Generated by Cython 3.3.0
Yellow lines hint at Python interaction.
Click on a line that starts with a "+" to see the C code that Cython generated for it.
Raw output: _client.c
+00001: ################################################################################
__pyx_t_19 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_test, __pyx_t_19) < (0)) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
00002: ## ___ _ ____ ____
00003: ## / _ \ _ _ ___ ___| |_| _ \| __ )
00004: ## | | | | | | |/ _ \/ __| __| | | | _ \
00005: ## | |_| | |_| | __/\__ \ |_| |_| | |_) |
00006: ## \__\_\\__,_|\___||___/\__|____/|____/
00007: ##
00008: ## Copyright (c) 2014-2019 Appsicle
00009: ## Copyright (c) 2019-2024 QuestDB
00010: ##
00011: ## Licensed under the Apache License, Version 2.0 (the "License");
00012: ## you may not use this file except in compliance with the License.
00013: ## You may obtain a copy of the License at
00014: ##
00015: ## http://www.apache.org/licenses/LICENSE-2.0
00016: ##
00017: ## Unless required by applicable law or agreed to in writing, software
00018: ## distributed under the License is distributed on an "AS IS" BASIS,
00019: ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00020: ## See the License for the specific language governing permissions and
00021: ## limitations under the License.
00022: ##
00023: ################################################################################
00024:
00025: # distutils: language=c
00026: # cython: language_level=3
00027: # cython: binding=True
00028:
00029: """
00030: API for fast data ingestion into and querying from QuestDB.
00031: """
00032:
+00033: __all__ = [
{
PyObject* __pyx_temp[30] = {__pyx_mstate_global->__pyx_n_u_Char_2, __pyx_mstate_global->__pyx_n_u_ConnectionEvent, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind, __pyx_mstate_global->__pyx_n_u_DateMillis_2, __pyx_mstate_global->__pyx_n_u_ExecDone, __pyx_mstate_global->__pyx_n_u_Geohash_2, __pyx_mstate_global->__pyx_n_u_Long256_2, __pyx_mstate_global->__pyx_n_u_PooledReader, __pyx_mstate_global->__pyx_n_u_PooledSender, __pyx_mstate_global->__pyx_n_u_Protocol, __pyx_mstate_global->__pyx_n_u_QueryResult, __pyx_mstate_global->__pyx_n_u_QuestDB, __pyx_mstate_global->__pyx_n_u_QuestDBError, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode, __pyx_mstate_global->__pyx_n_u_QuestDBServerRejectionError, __pyx_mstate_global->__pyx_n_u_QwpWsProgress, __pyx_mstate_global->__pyx_n_u_Sender, __pyx_mstate_global->__pyx_n_u_SenderError, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy, __pyx_mstate_global->__pyx_n_u_SenderTransaction, __pyx_mstate_global->__pyx_n_u_ServerInfo, __pyx_mstate_global->__pyx_n_u_ServerRole, __pyx_mstate_global->__pyx_n_u_ServerTimestamp, __pyx_mstate_global->__pyx_n_u_ServerTimestampType, __pyx_mstate_global->__pyx_n_u_TimestampMicros_2, __pyx_mstate_global->__pyx_n_u_TimestampNanos_2, __pyx_mstate_global->__pyx_n_u_TlsCa, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError, __pyx_mstate_global->__pyx_n_u_WARN_HIGH_RECONNECTS};
__pyx_t_4 = __Pyx_PyList_FromArray(__pyx_temp, 30); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 33, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_all, __pyx_t_4) < (0)) __PYX_ERR(0, 33, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
00034: 'Char',
00035: 'ConnectionEvent',
00036: 'ConnectionEventKind',
00037: 'DateMillis',
00038: 'ExecDone',
00039: 'Geohash',
00040: 'Long256',
00041: 'PooledReader',
00042: 'PooledSender',
00043: 'Protocol',
00044: 'QueryResult',
00045: 'QuestDB',
00046: 'QuestDBError',
00047: 'QuestDBErrorCode',
00048: 'QuestDBServerRejectionError',
00049: 'QwpWsProgress',
00050: 'Sender',
00051: 'SenderError',
00052: 'SenderErrorCategory',
00053: 'SenderErrorPolicy',
00054: 'SenderTransaction',
00055: 'ServerInfo',
00056: 'ServerRole',
00057: 'ServerTimestamp',
00058: 'ServerTimestampType',
00059: 'TimestampMicros',
00060: 'TimestampNanos',
00061: 'TlsCa',
00062: 'UnsupportedDataFrameShapeError',
00063: 'WARN_HIGH_RECONNECTS',
00064: ]
00065:
00066: # For prototypes: https://github.com/cython/cython/tree/master/Cython/Includes
00067: from libc.stdint cimport uint8_t, uint16_t, uint64_t, int64_t, int32_t, uint32_t, \
00068: uintptr_t, INT64_MAX, INT64_MIN
00069: from libc.stdlib cimport malloc, calloc, realloc, free, qsort
00070: from libc.string cimport strncmp, memset, memcpy, memcmp, strlen
00071: from libc.math cimport isnan, floor
00072: from cpython.datetime cimport datetime as cp_datetime
00073: from cpython.datetime cimport timedelta as cp_timedelta
00074: from cpython.datetime cimport import_datetime, datetime_new
00075: from cpython.datetime cimport (
00076: PyDateTime_GET_YEAR, PyDateTime_GET_MONTH, PyDateTime_GET_DAY,
00077: PyDateTime_DATE_GET_HOUR, PyDateTime_DATE_GET_MINUTE,
00078: PyDateTime_DATE_GET_SECOND, PyDateTime_DATE_GET_MICROSECOND,
00079: )
00080: from cpython.bool cimport bool
00081: from cpython.ref cimport Py_XDECREF
00082: from cpython.weakref cimport PyWeakref_NewRef, PyWeakref_GetRef
00083: from cpython.object cimport PyObject, PyTypeObject, PyObject_TypeCheck
00084: from cpython.buffer cimport Py_buffer, PyObject_CheckBuffer, \
00085: PyObject_GetBuffer, PyBuffer_Release, PyBUF_SIMPLE
00086: from cpython.pycapsule cimport (PyCapsule_Destructor,
00087: PyCapsule_GetPointer, PyCapsule_IsValid,
00088: PyCapsule_New)
00089: from cpython.pythread cimport (PyThread_tss_create, PyThread_tss_get,
00090: PyThread_tss_set)
00091: from cpython.pystate cimport PyThreadState_GetDict
00092: from cpython.ref cimport Py_INCREF, Py_DECREF
00093: from cpython.exc cimport PyErr_Fetch, PyErr_Restore
00094:
00095: from .line_sender cimport *
00096: from .rpyutils cimport *
00097: from .conf_str cimport *
00098: from .arrow_c_data_interface cimport *
00099: from .extra_cpython cimport *
00100: from ._client_helper cimport *
00101:
00102: # An int we use only for error reporting.
00103: # 0 is success.
00104: # -1 is failure.
00105: ctypedef int void_int
00106:
00107: import cython
00108:
00109: # Imported before the includes because `dataframe.pxi` binds two of its
00110: # classes at module-init time.
+00111: import ipaddress
__pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_ipaddress, 0, 0, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 111, __pyx_L1_error) __pyx_t_4 = __pyx_t_1; __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ipaddress, __pyx_t_4) < (0)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
00112:
00113: include "dataframe.pxi"
00114: include "egress.pxi"
00115:
+00116: from enum import Enum
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_Enum};
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_enum, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 116, __pyx_L1_error)
}
__pyx_t_17 = __pyx_t_3;
__Pyx_GOTREF(__pyx_t_17);
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_Enum};
__pyx_t_9 = 0; {
__pyx_t_18 = __Pyx_ImportFrom(__pyx_t_17, __pyx_imported_names[__pyx_t_9]); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 116, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_9], __pyx_t_18) < (0)) __PYX_ERR(0, 116, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
}
}
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00117: from typing import (
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_List,__pyx_mstate_global->__pyx_n_u_Dict,__pyx_mstate_global->__pyx_n_u_Union,__pyx_mstate_global->__pyx_n_u_Any,__pyx_mstate_global->__pyx_n_u_Optional,__pyx_mstate_global->__pyx_n_u_SupportsIndex,__pyx_mstate_global->__pyx_n_u_Tuple};
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_typing, __pyx_imported_names, 7, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 117, __pyx_L1_error)
}
__pyx_t_17 = __pyx_t_3;
__Pyx_GOTREF(__pyx_t_17);
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_List,__pyx_mstate_global->__pyx_n_u_Dict,__pyx_mstate_global->__pyx_n_u_Union,__pyx_mstate_global->__pyx_n_u_Any,__pyx_mstate_global->__pyx_n_u_Optional,__pyx_mstate_global->__pyx_n_u_SupportsIndex,__pyx_mstate_global->__pyx_n_u_Tuple};
for (__pyx_t_9=0; __pyx_t_9 < 7; __pyx_t_9++) {
__pyx_t_18 = __Pyx_ImportFrom(__pyx_t_17, __pyx_imported_names[__pyx_t_9]); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 117, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_9], __pyx_t_18) < (0)) __PYX_ERR(0, 117, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
}
}
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
00118: List, Dict, Union, Any, Optional, SupportsIndex, Tuple)
+00119: from dataclasses import dataclass
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_dataclass};
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_dataclasses, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 119, __pyx_L1_error)
}
__pyx_t_17 = __pyx_t_3;
__Pyx_GOTREF(__pyx_t_17);
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_dataclass};
__pyx_t_9 = 0; {
__pyx_t_18 = __Pyx_ImportFrom(__pyx_t_17, __pyx_imported_names[__pyx_t_9]); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 119, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_9], __pyx_t_18) < (0)) __PYX_ERR(0, 119, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
}
}
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
00120: from cpython.bytes cimport (PyBytes_FromStringAndSize,
00121: PyBytes_GET_SIZE, PyBytes_AsString, PyBytes_Check)
00122: from cpython.bytearray cimport (PyByteArray_AsString, PyByteArray_Size,
00123: PyByteArray_Check)
00124: from cpython.long cimport PyLong_AsLongLongAndOverflow
00125: from cpython.memoryview cimport PyMemoryView_Check
00126:
+00127: import datetime
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_datetime, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 127, __pyx_L1_error) __pyx_t_17 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_17); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_datetime, __pyx_t_17) < (0)) __PYX_ERR(0, 127, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00128: import decimal
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_decimal, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 128, __pyx_L1_error) __pyx_t_17 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_17); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_decimal, __pyx_t_17) < (0)) __PYX_ERR(0, 128, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00129: import operator
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_operator, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 129, __pyx_L1_error) __pyx_t_17 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_17); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_operator, __pyx_t_17) < (0)) __PYX_ERR(0, 129, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00130: import numbers as _numbers
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_numbers_2, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 130, __pyx_L1_error) __pyx_t_17 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_17); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_numbers, __pyx_t_17) < (0)) __PYX_ERR(0, 130, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00131: import os
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_os, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 131, __pyx_L1_error) __pyx_t_17 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_17); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_os, __pyx_t_17) < (0)) __PYX_ERR(0, 131, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00132: import sys
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_sys, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 132, __pyx_L1_error) __pyx_t_17 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_17); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_sys, __pyx_t_17) < (0)) __PYX_ERR(0, 132, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00133: import threading
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_threading, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 133, __pyx_L1_error) __pyx_t_17 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_17); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_threading, __pyx_t_17) < (0)) __PYX_ERR(0, 133, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00134: import time
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_time, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 134, __pyx_L1_error) __pyx_t_17 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_17); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_time, __pyx_t_17) < (0)) __PYX_ERR(0, 134, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00135: import uuid
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_uuid, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 135, __pyx_L1_error) __pyx_t_17 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_17); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_uuid, __pyx_t_17) < (0)) __PYX_ERR(0, 135, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00136: import warnings
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_warnings, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 136, __pyx_L1_error) __pyx_t_17 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_17); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_warnings, __pyx_t_17) < (0)) __PYX_ERR(0, 136, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00137: import logging
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_logging, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 137, __pyx_L1_error) __pyx_t_17 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_17); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_logging, __pyx_t_17) < (0)) __PYX_ERR(0, 137, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
00138:
+00139: import numpy
__pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_numpy, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 139, __pyx_L1_error) __pyx_t_17 = __pyx_t_3; __Pyx_GOTREF(__pyx_t_17); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_numpy, __pyx_t_17) < (0)) __PYX_ERR(0, 139, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
00140: cimport numpy as cnp
00141: from numpy cimport NPY_DOUBLE, PyArrayObject
00142:
00143: # Functions we need to import as `PyObject` to avoid Cython's `object` type
00144: from .extra_numpy cimport *
00145:
+00146: cnp.import_array()
__pyx_t_12 = __pyx_f_5numpy_import_array(); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 146, __pyx_L1_error)
+00147: import_datetime()
__pyx_f_7cpython_8datetime_import_datetime();
00148:
+00149: cdef bint _dataframe_columnar_count_io_stats = False
__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats = 0;
+00150: cdef uint64_t _dataframe_columnar_flush_calls = 0
__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls = 0;
+00151: cdef uint64_t _dataframe_columnar_flush_ns = 0
__pyx_v_7questdb_7_client__dataframe_columnar_flush_ns = 0;
+00152: cdef uint64_t _dataframe_columnar_sync_calls = 0
__pyx_v_7questdb_7_client__dataframe_columnar_sync_calls = 0;
+00153: cdef uint64_t _dataframe_columnar_sync_ns = 0
__pyx_v_7questdb_7_client__dataframe_columnar_sync_ns = 0;
+00154: cdef uint64_t _dataframe_columnar_flush_retry_syncs = 0
__pyx_v_7questdb_7_client__dataframe_columnar_flush_retry_syncs = 0;
00155:
+00156: cdef size_t _QWP_MAX_DEFERRED_ARROW_FRAMES = 100
__pyx_v_7questdb_7_client__QWP_MAX_DEFERRED_ARROW_FRAMES = 0x64;
00157:
00158: # Default rows per columnar batch. Only a pipelining-granularity default: the
00159: # column sender splits any frame exceeding the negotiated batch cap regardless
00160: # of this size. Mirrors the Rust core's `DEFAULT_MAX_CHUNK_ROWS`; both sides
00161: # pin the value in tests so it cannot drift. Keep them in sync when changing it.
+00162: DEFAULT_MAX_CHUNK_ROWS = 16384
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS, __pyx_mstate_global->__pyx_int_16384) < (0)) __PYX_ERR(0, 162, __pyx_L1_error)
00163:
00164:
00165: # This value is automatically updated by the `bump2version` tool.
00166: # If you need to update it, also update the search definition in
00167: # .bumpversion.cfg.
+00168: VERSION = '6.0.0'
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_VERSION, __pyx_mstate_global->__pyx_kp_u_6_0_0) < (0)) __PYX_ERR(0, 168, __pyx_L1_error)
00169:
+00170: WARN_HIGH_RECONNECTS = True
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_WARN_HIGH_RECONNECTS, Py_True) < (0)) __PYX_ERR(0, 170, __pyx_L1_error)
00171:
00172:
+00173: cdef bint _has_gil(PyThreadState** gs) noexcept:
static int __pyx_f_7questdb_7_client__has_gil(PyThreadState **__pyx_v_gs) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
+00174: return gs[0] == NULL
{
__pyx_r = ((__pyx_v_gs[0]) == NULL);
}
goto __pyx_L0;
00175:
00176:
+00177: cdef bint _ensure_doesnt_have_gil(PyThreadState** gs) noexcept:
static int __pyx_f_7questdb_7_client__ensure_doesnt_have_gil(PyThreadState **__pyx_v_gs) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
00178: """Returns True if previously had the GIL, False otherwise."""
+00179: if _has_gil(gs):
__pyx_t_1 = __pyx_f_7questdb_7_client__has_gil(__pyx_v_gs);
if (__pyx_t_1) {
/* … */
}
+00180: gs[0] = PyEval_SaveThread()
(__pyx_v_gs[0]) = PyEval_SaveThread();
+00181: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+00182: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
00183:
00184:
+00185: cdef void _ensure_has_gil(PyThreadState** gs) noexcept:
static void __pyx_f_7questdb_7_client__ensure_has_gil(PyThreadState **__pyx_v_gs) {
/* … */
/* function exit code */
}
+00186: if not _has_gil(gs):
__pyx_t_1 = (!__pyx_f_7questdb_7_client__has_gil(__pyx_v_gs));
if (__pyx_t_1) {
/* … */
}
+00187: PyEval_RestoreThread(gs[0])
PyEval_RestoreThread((__pyx_v_gs[0]));
+00188: gs[0] = NULL
(__pyx_v_gs[0]) = NULL;
00189:
00190:
+00191: class QuestDBErrorCode(Enum):
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_Enum); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 191, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); { PyObject* __pyx_temp[1] = {__pyx_t_17}; __pyx_t_18 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 191, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_17 = __Pyx_PEP560_update_bases(__pyx_t_18); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 191, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_19 = __Pyx_CalculateMetaclass(NULL, __pyx_t_17); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 191, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_20 = __Pyx_Py3MetaclassPrepare(__pyx_t_19, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Category_of_Error); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 191, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); if (__pyx_t_17 != __pyx_t_18) { if (unlikely((PyDict_SetItemString(__pyx_t_20, "__orig_bases__", __pyx_t_18) < 0))) __PYX_ERR(0, 191, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; /* … */ __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode, __pyx_t_17, __pyx_t_20, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 191, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode, __pyx_t_4) < (0)) __PYX_ERR(0, 191, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
00192: """Category of Error."""
+00193: CouldNotResolveAddr = line_sender_error_could_not_resolve_addr
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_could_not_resolve_addr); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 193, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_CouldNotResolveAddr, __pyx_t_18) < (0)) __PYX_ERR(0, 193, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00194: InvalidApiCall = line_sender_error_invalid_api_call
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_api_call); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 194, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_InvalidApiCall, __pyx_t_18) < (0)) __PYX_ERR(0, 194, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00195: SocketError = line_sender_error_socket_error
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_socket_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 195, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_SocketError, __pyx_t_18) < (0)) __PYX_ERR(0, 195, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00196: InvalidUtf8 = line_sender_error_invalid_utf8
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_utf8); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 196, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_InvalidUtf8, __pyx_t_18) < (0)) __PYX_ERR(0, 196, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00197: InvalidName = line_sender_error_invalid_name
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_name); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 197, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_InvalidName, __pyx_t_18) < (0)) __PYX_ERR(0, 197, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00198: InvalidTimestamp = line_sender_error_invalid_timestamp
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_timestamp); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 198, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp, __pyx_t_18) < (0)) __PYX_ERR(0, 198, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00199: AuthError = line_sender_error_auth_error
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_auth_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 199, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_AuthError, __pyx_t_18) < (0)) __PYX_ERR(0, 199, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00200: TlsError = line_sender_error_tls_error
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_tls_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 200, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_TlsError, __pyx_t_18) < (0)) __PYX_ERR(0, 200, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00201: HttpNotSupported = line_sender_error_http_not_supported
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_http_not_supported); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 201, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_HttpNotSupported, __pyx_t_18) < (0)) __PYX_ERR(0, 201, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00202: ServerFlushError = line_sender_error_server_flush_error
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_flush_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 202, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerFlushError, __pyx_t_18) < (0)) __PYX_ERR(0, 202, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00203: ServerRejection = line_sender_error_server_rejection
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_rejection); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 203, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerRejection, __pyx_t_18) < (0)) __PYX_ERR(0, 203, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00204: RoleMismatch = line_sender_error_role_mismatch
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_role_mismatch); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 204, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_RoleMismatch, __pyx_t_18) < (0)) __PYX_ERR(0, 204, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00205: ConfigError = line_sender_error_config_error
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_config_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 205, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ConfigError, __pyx_t_18) < (0)) __PYX_ERR(0, 205, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00206: ArrayError = line_sender_error_array_error
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_array_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 206, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ArrayError, __pyx_t_18) < (0)) __PYX_ERR(0, 206, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00207: ProtocolVersionError = line_sender_error_protocol_version_error
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_protocol_version_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 207, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ProtocolVersionError, __pyx_t_18) < (0)) __PYX_ERR(0, 207, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00208: DecimalError = line_sender_error_invalid_decimal
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_decimal); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 208, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_DecimalError, __pyx_t_18) < (0)) __PYX_ERR(0, 208, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00209: ArrowUnsupportedColumnKind = line_sender_error_arrow_unsupported_column_kind
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_arrow_unsupported_column_kind); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 209, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ArrowUnsupportedColumnKind, __pyx_t_18) < (0)) __PYX_ERR(0, 209, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00210: ArrowIngest = line_sender_error_arrow_ingest
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_arrow_ingest); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 210, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ArrowIngest, __pyx_t_18) < (0)) __PYX_ERR(0, 210, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00211: FailoverRetry = line_sender_error_failover_retry
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_failover_retry); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 211, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_FailoverRetry, __pyx_t_18) < (0)) __PYX_ERR(0, 211, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00212: ConnectTimeout = line_sender_error_connect_timeout
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_connect_timeout); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 212, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ConnectTimeout, __pyx_t_18) < (0)) __PYX_ERR(0, 212, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
00213: # Query / reader (egress) categories. The error model is unified across
00214: # ingest and query, so these are real FFI codes (no longer bucketed).
+00215: HandshakeError = line_sender_error_handshake_error
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_handshake_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 215, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_HandshakeError, __pyx_t_18) < (0)) __PYX_ERR(0, 215, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00216: UnsupportedServer = line_sender_error_unsupported_server
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_unsupported_server); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 216, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_UnsupportedServer, __pyx_t_18) < (0)) __PYX_ERR(0, 216, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00217: ProtocolError = line_sender_error_protocol_error
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_protocol_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 217, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ProtocolError, __pyx_t_18) < (0)) __PYX_ERR(0, 217, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00218: InvalidBind = line_sender_error_invalid_bind
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_bind); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 218, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_InvalidBind, __pyx_t_18) < (0)) __PYX_ERR(0, 218, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00219: ServerSchemaMismatch = line_sender_error_server_schema_mismatch
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_schema_mismatch); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 219, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerSchemaMismatch, __pyx_t_18) < (0)) __PYX_ERR(0, 219, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00220: ServerParseError = line_sender_error_server_parse_error
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_parse_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 220, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerParseError, __pyx_t_18) < (0)) __PYX_ERR(0, 220, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00221: ServerInternalError = line_sender_error_server_internal_error
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_internal_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 221, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerInternalError, __pyx_t_18) < (0)) __PYX_ERR(0, 221, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00222: ServerSecurityError = line_sender_error_server_security_error
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_security_error); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 222, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerSecurityError, __pyx_t_18) < (0)) __PYX_ERR(0, 222, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00223: LimitExceeded = line_sender_error_limit_exceeded
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_limit_exceeded); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 223, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_LimitExceeded, __pyx_t_18) < (0)) __PYX_ERR(0, 223, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00224: ServerLimitExceeded = line_sender_error_server_limit_exceeded
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_limit_exceeded); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 224, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerLimitExceeded, __pyx_t_18) < (0)) __PYX_ERR(0, 224, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00225: Cancelled = line_sender_error_cancelled
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_cancelled); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_Cancelled, __pyx_t_18) < (0)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00226: FailoverWouldDuplicate = line_sender_error_failover_would_duplicate
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_failover_would_duplicate); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 226, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_FailoverWouldDuplicate, __pyx_t_18) < (0)) __PYX_ERR(0, 226, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00227: SchemaDrift = line_sender_error_schema_drift
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_schema_drift); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 227, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_SchemaDrift, __pyx_t_18) < (0)) __PYX_ERR(0, 227, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00228: NoSchema = line_sender_error_no_schema
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_no_schema); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 228, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_NoSchema, __pyx_t_18) < (0)) __PYX_ERR(0, 228, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00229: ArrowExport = line_sender_error_arrow_export
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_arrow_export); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ArrowExport, __pyx_t_18) < (0)) __PYX_ERR(0, 229, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00230: BatchTooLarge = line_sender_error_batch_too_large
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_batch_too_large); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_BatchTooLarge, __pyx_t_18) < (0)) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00231: StoreResendRequired = line_sender_error_store_resend_required
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_store_resend_required); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 231, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_StoreResendRequired, __pyx_t_18) < (0)) __PYX_ERR(0, 231, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00232: SymbolDictFull = line_sender_error_symbol_dict_full
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_symbol_dict_full); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 232, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_SymbolDictFull, __pyx_t_18) < (0)) __PYX_ERR(0, 232, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00233: QueryTimeout = line_sender_error_query_timeout
__pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_query_timeout); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 233, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_QueryTimeout, __pyx_t_18) < (0)) __PYX_ERR(0, 233, __pyx_L1_error) __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
00234: # Python-only sentinel with no backing FFI code: raised by the Cython
00235: # DataFrame-shape validation path. Sits in a reserved high band, disjoint
00236: # from the contiguous FFI code space, so an appended FFI variant can never
00237: # collide with it. Compared by identity; never sent over FFI.
+00238: BadDataFrame = 0x10000
if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_BadDataFrame, __pyx_mstate_global->__pyx_int_65536) < (0)) __PYX_ERR(0, 238, __pyx_L1_error)
00239:
+00240: def __str__(self) -> str:
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_16QuestDBErrorCode_1__str__(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_16QuestDBErrorCode___str__, "Return the name of the enum."); static PyMethodDef __pyx_mdef_7questdb_7_client_16QuestDBErrorCode_1__str__ = {"__str__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_16QuestDBErrorCode_1__str__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_16QuestDBErrorCode___str__}; static PyObject *__pyx_pw_7questdb_7_client_16QuestDBErrorCode_1__str__(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_self = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__str__ (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 240, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 240, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__str__", 0) < (0)) __PYX_ERR(0, 240, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__str__", 1, 1, 1, i); __PYX_ERR(0, 240, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 240, __pyx_L3_error) } __pyx_v_self = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__str__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 240, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.QuestDBErrorCode.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_16QuestDBErrorCode___str__(__pyx_self, __pyx_v_self); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_16QuestDBErrorCode___str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("questdb._client.QuestDBErrorCode.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 240, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 240, __pyx_L1_error) __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_16QuestDBErrorCode_1__str__, 0, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode___str, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[64])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 240, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4); #endif __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_18); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_str, __pyx_t_4) < (0)) __PYX_ERR(0, 240, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
00241: """Return the name of the enum."""
+00242: return self.name
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(0, 242, __pyx_L1_error) { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = ((PyObject*)__pyx_t_1); } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00243:
00244:
+00245: class QuestDBError(Exception):
{
PyObject* __pyx_temp[1] = {((PyObject *)(((PyTypeObject*)PyExc_Exception)))};
__pyx_t_17 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 245, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
}
__pyx_t_19 = __Pyx_PEP560_update_bases(__pyx_t_17); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 245, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_19);
__pyx_t_20 = __Pyx_CalculateMetaclass(NULL, __pyx_t_19); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 245, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_20);
__pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_20, __pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBError, __pyx_mstate_global->__pyx_n_u_QuestDBError, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_An_error_whilst_using_the_QuestD); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 245, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
if (__pyx_t_19 != __pyx_t_17) {
if (unlikely((PyDict_SetItemString(__pyx_t_4, "__orig_bases__", __pyx_t_17) < 0))) __PYX_ERR(0, 245, __pyx_L1_error)
}
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
__pyx_t_17 = PyList_New(0); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 245, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
/* … */
__pyx_t_16 = __Pyx_Py3ClassCreate(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_QuestDBError, __pyx_t_19, __pyx_t_4, NULL, 0, 0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 245, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_16);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16);
#endif
if (__Pyx_CyFunction_InitClassCell(__pyx_t_17, __pyx_t_16) < (0)) __PYX_ERR(0, 245, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_QuestDBError, __pyx_t_16) < (0)) __PYX_ERR(0, 245, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
00246: """An error whilst using the QuestDB client."""
+00247: def __init__(self, code, msg, sender_error=None, *, in_doubt=False):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12QuestDBError_1__init__(PyObject *__pyx_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_12QuestDBError_1__init__ = {"__init__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12QuestDBError_1__init__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_12QuestDBError_1__init__(PyObject *__pyx_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_self = 0;
PyObject *__pyx_v_code = 0;
PyObject *__pyx_v_msg = 0;
PyObject *__pyx_v_sender_error = 0;
PyObject *__pyx_v_in_doubt = 0;
#if !CYTHON_VECTORCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
#if !CYTHON_VECTORCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,&__pyx_mstate_global->__pyx_n_u_code,&__pyx_mstate_global->__pyx_n_u_msg,&__pyx_mstate_global->__pyx_n_u_sender_error,&__pyx_mstate_global->__pyx_n_u_in_doubt,0};
PyObject* values[5] = {0,0,0,0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 247, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 4:
values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 247, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 247, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 247, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 247, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__init__", 0) < (0)) __PYX_ERR(0, 247, __pyx_L3_error)
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)((PyObject*)Py_False)));
for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, i); __PYX_ERR(0, 247, __pyx_L3_error) }
}
} else {
switch (__pyx_nargs) {
case 4:
values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 247, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 247, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 247, __pyx_L3_error)
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 247, __pyx_L3_error)
break;
default: goto __pyx_L5_argtuple_error;
}
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)((PyObject*)Py_False)));
}
__pyx_v_self = values[0];
__pyx_v_code = values[1];
__pyx_v_msg = values[2];
__pyx_v_sender_error = values[3];
__pyx_v_in_doubt = values[4];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, __pyx_nargs); __PYX_ERR(0, 247, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.QuestDBError.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_12QuestDBError___init__(__pyx_self, __pyx_v_self, __pyx_v_code, __pyx_v_msg, __pyx_v_sender_error, __pyx_v_in_doubt);
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_12QuestDBError___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_code, PyObject *__pyx_v_msg, PyObject *__pyx_v_sender_error, PyObject *__pyx_v_in_doubt) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client.QuestDBError.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_18 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 247, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_in_doubt, ((PyObject*)Py_False)) < (0)) __PYX_ERR(0, 247, __pyx_L1_error)
__pyx_t_16 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12QuestDBError_1__init__, 0, __pyx_mstate_global->__pyx_n_u_QuestDBError___init, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[65])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 247, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_16);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16);
#endif
PyList_Append(__pyx_t_17, __pyx_t_16);
__Pyx_CyFunction_SetDefaultsTuple(__pyx_t_16, __pyx_mstate_global->__pyx_tuple[49]);
__Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_16, __pyx_t_18);
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_init, __pyx_t_16) < (0)) __PYX_ERR(0, 247, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+00248: super().__init__(msg)
__pyx_t_4 = NULL; __pyx_t_5 = __Pyx_CyFunction_GetClassObj(__pyx_self); if (!__pyx_t_5) { PyErr_SetString(PyExc_RuntimeError, "super(): empty __class__ cell"); __PYX_ERR(0, 248, __pyx_L1_error) } __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 1; { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_5, __pyx_v_self}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_super, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 248, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_t_2 = __pyx_t_3; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_msg}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_init, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 248, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+00249: self._code = code
if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_code_2, __pyx_v_code) < (0)) __PYX_ERR(0, 249, __pyx_L1_error)
+00250: self._sender_error = sender_error
if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_sender_error_2, __pyx_v_sender_error) < (0)) __PYX_ERR(0, 250, __pyx_L1_error)
+00251: self._in_doubt = bool(in_doubt)
__pyx_t_3 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_in_doubt};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 251, __pyx_L1_error)
__Pyx_GOTREF((PyObject *)__pyx_t_1);
}
if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_in_doubt_2, ((PyObject *)__pyx_t_1)) < (0)) __PYX_ERR(0, 251, __pyx_L1_error)
__Pyx_DECREF((PyObject *)__pyx_t_1); __pyx_t_1 = 0;
00252:
+00253: @property
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12QuestDBError_3code(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12QuestDBError_2code, "Return the error code."); static PyMethodDef __pyx_mdef_7questdb_7_client_12QuestDBError_3code = {"code", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12QuestDBError_3code, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12QuestDBError_2code}; static PyObject *__pyx_pw_7questdb_7_client_12QuestDBError_3code(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_self = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("code (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 253, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 253, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "code", 0) < (0)) __PYX_ERR(0, 253, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("code", 1, 1, 1, i); __PYX_ERR(0, 253, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 253, __pyx_L3_error) } __pyx_v_self = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("code", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 253, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.QuestDBError.code", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_12QuestDBError_2code(__pyx_self, __pyx_v_self); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12QuestDBError_2code(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("questdb._client.QuestDBError.code", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_18 = NULL; __pyx_t_21 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 253, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_21); if (PyDict_SetItem(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode) < (0)) __PYX_ERR(0, 253, __pyx_L1_error) __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12QuestDBError_3code, 0, __pyx_mstate_global->__pyx_n_u_QuestDBError_code, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[66])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 253, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25); #endif __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_25, __pyx_t_21); __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_18, __pyx_t_25}; __pyx_t_16 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_property, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 253, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); } if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_code, __pyx_t_16) < (0)) __PYX_ERR(0, 253, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
00254: def code(self) -> QuestDBErrorCode:
00255: """Return the error code."""
+00256: return self._code
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_code_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00257:
+00258: @property
/* Python wrapper */ static PyLongObject *__pyx_pw_7questdb_7_client_12QuestDBError_5in_doubt(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12QuestDBError_4in_doubt, "\n Whether the failed ingestion operation may already have delivered\n its input. For QWP ``dataframe()``, this covers the entire DataFrame,\n including earlier batches from the same call, even when a later batch\n fails local validation. For a sender flush, it describes that flush;\n it does not summarize earlier independent calls on the sender.\n\n Retrying that input when this is true requires an appropriate\n application- or table-level deduplication guarantee. A false value says\n only that duplicate delivery is not known to be possible; a consumed\n one-shot input may still be impossible to replay.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_12QuestDBError_5in_doubt = {"in_doubt", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12QuestDBError_5in_doubt, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12QuestDBError_4in_doubt}; static PyLongObject *__pyx_pw_7questdb_7_client_12QuestDBError_5in_doubt(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_self = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyLongObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("in_doubt (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 258, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 258, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "in_doubt", 0) < (0)) __PYX_ERR(0, 258, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("in_doubt", 1, 1, 1, i); __PYX_ERR(0, 258, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 258, __pyx_L3_error) } __pyx_v_self = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("in_doubt", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 258, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.QuestDBError.in_doubt", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_12QuestDBError_4in_doubt(__pyx_self, __pyx_v_self); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyLongObject *__pyx_pf_7questdb_7_client_12QuestDBError_4in_doubt(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyLongObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("questdb._client.QuestDBError.in_doubt", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF((PyObject *)__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = NULL; __pyx_t_18 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 258, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(0, 258, __pyx_L1_error) __pyx_t_21 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12QuestDBError_5in_doubt, 0, __pyx_mstate_global->__pyx_n_u_QuestDBError_in_doubt, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[67])); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 258, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_21); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_21); #endif __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_21, __pyx_t_18); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_25, __pyx_t_21}; __pyx_t_16 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_property, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0; __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 258, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); } if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_t_16) < (0)) __PYX_ERR(0, 258, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
00259: def in_doubt(self) -> bool:
00260: """
00261: Whether the failed ingestion operation may already have delivered
00262: its input. For QWP ``dataframe()``, this covers the entire DataFrame,
00263: including earlier batches from the same call, even when a later batch
00264: fails local validation. For a sender flush, it describes that flush;
00265: it does not summarize earlier independent calls on the sender.
00266:
00267: Retrying that input when this is true requires an appropriate
00268: application- or table-level deduplication guarantee. A false value says
00269: only that duplicate delivery is not known to be possible; a consumed
00270: one-shot input may still be impossible to replay.
00271: """
+00272: return self._in_doubt
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_in_doubt_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 272, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 272, __pyx_L1_error) { PyLongObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = ((PyLongObject *)__pyx_t_1); } __Pyx_XDECREF((PyObject *)__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00273:
+00274: @property
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12QuestDBError_7sender_error(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12QuestDBError_6sender_error, "\n Return the structured QWP/WebSocket diagnostic, if this error carries\n one from a QWP/WebSocket sender failure.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_12QuestDBError_7sender_error = {"sender_error", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12QuestDBError_7sender_error, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12QuestDBError_6sender_error}; static PyObject *__pyx_pw_7questdb_7_client_12QuestDBError_7sender_error(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_self = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("sender_error (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 274, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 274, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "sender_error", 0) < (0)) __PYX_ERR(0, 274, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("sender_error", 1, 1, 1, i); __PYX_ERR(0, 274, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 274, __pyx_L3_error) } __pyx_v_self = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("sender_error", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 274, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.QuestDBError.sender_error", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_12QuestDBError_6sender_error(__pyx_self, __pyx_v_self); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12QuestDBError_6sender_error(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("questdb._client.QuestDBError.sender_error", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_21 = NULL; __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12QuestDBError_7sender_error, 0, __pyx_mstate_global->__pyx_n_u_QuestDBError_sender_error, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[68])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 274, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25); #endif __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_21, __pyx_t_25}; __pyx_t_16 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_property, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 274, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); } if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_sender_error, __pyx_t_16) < (0)) __PYX_ERR(0, 274, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
00275: def sender_error(self):
00276: """
00277: Return the structured QWP/WebSocket diagnostic, if this error carries
00278: one from a QWP/WebSocket sender failure.
00279: """
+00280: if self._sender_error is not None:
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_sender_error_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 280, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = (__pyx_t_1 != Py_None); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ }
+00281: self._sender_error = _sender_error_from_raw(self._sender_error)
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_sender_error_from_raw); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 281, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_sender_error_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 281, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_6 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_6 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 281, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_sender_error_2, __pyx_t_1) < (0)) __PYX_ERR(0, 281, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+00282: return self._sender_error
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_sender_error_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 282, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00283:
00284:
+00285: class QuestDBServerRejectionError(QuestDBError):
__Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); { PyObject* __pyx_temp[1] = {__pyx_t_19}; __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); } __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __pyx_t_19 = __Pyx_PEP560_update_bases(__pyx_t_20); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_4 = __Pyx_CalculateMetaclass(NULL, __pyx_t_19); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_16 = __Pyx_Py3MetaclassPrepare(__pyx_t_4, __pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBServerRejectionError, __pyx_mstate_global->__pyx_n_u_QuestDBServerRejectionError, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_A_terminal_QWP_WebSocket_server); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); if (__pyx_t_19 != __pyx_t_20) { if (unlikely((PyDict_SetItemString(__pyx_t_16, "__orig_bases__", __pyx_t_20) < 0))) __PYX_ERR(0, 285, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __pyx_t_20 = __Pyx_Py3ClassCreate(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBServerRejectionError, __pyx_t_19, __pyx_t_16, NULL, 0, 0); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_QuestDBServerRejectionError, __pyx_t_20) < (0)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
00286: """
00287: A terminal QWP/WebSocket server rejection.
00288:
00289: The structured server payload is available through
00290: :attr:`QuestDBError.sender_error`.
00291: """
00292:
00293:
+00294: class UnsupportedDataFrameShapeError(QuestDBError):
__Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); { PyObject* __pyx_temp[1] = {__pyx_t_19}; __pyx_t_4 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __pyx_t_19 = __Pyx_PEP560_update_bases(__pyx_t_4); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_16 = __Pyx_CalculateMetaclass(NULL, __pyx_t_19); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_20 = __Pyx_Py3MetaclassPrepare(__pyx_t_16, __pyx_t_19, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_A_DataFrame_shape_is_not_suppor); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); if (__pyx_t_19 != __pyx_t_4) { if (unlikely((PyDict_SetItemString(__pyx_t_20, "__orig_bases__", __pyx_t_4) < 0))) __PYX_ERR(0, 294, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); /* … */ __pyx_t_17 = __Pyx_Py3ClassCreate(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError, __pyx_t_19, __pyx_t_20, NULL, 0, 0); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif if (__Pyx_CyFunction_InitClassCell(__pyx_t_4, __pyx_t_17) < (0)) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError, __pyx_t_17) < (0)) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
00295: """
00296: A DataFrame shape is not supported by the optimized columnar client path.
00297:
00298: ``column_failures`` carries structured per-column rejection details where
00299: available; each is a ``dict`` with ``column`` (name or ``None`` for a
00300: whole-frame issue), ``target``, ``source_code``, and ``reason``. The same
00301: per-column reasons are also folded into ``str(exc)`` so a bare
00302: ``print(exc)`` explains *why* the frame was rejected, and — when the
00303: designated timestamp is at fault — how to fix it on
00304: :meth:`QuestDB.dataframe` (name a valid timestamp column, or pass
00305: ``ServerTimestamp``).
00306: """
+00307: def __init__(self, msg, column_failures=None):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_30UnsupportedDataFrameShapeError_1__init__(PyObject *__pyx_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_30UnsupportedDataFrameShapeError_1__init__ = {"__init__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_30UnsupportedDataFrameShapeError_1__init__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_30UnsupportedDataFrameShapeError_1__init__(PyObject *__pyx_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_self = 0;
PyObject *__pyx_v_msg = 0;
PyObject *__pyx_v_column_failures = 0;
#if !CYTHON_VECTORCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
#if !CYTHON_VECTORCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,&__pyx_mstate_global->__pyx_n_u_msg,&__pyx_mstate_global->__pyx_n_u_column_failures,0};
PyObject* values[3] = {0,0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 307, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 307, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 307, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 307, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__init__", 0) < (0)) __PYX_ERR(0, 307, __pyx_L3_error)
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 3, i); __PYX_ERR(0, 307, __pyx_L3_error) }
}
} else {
switch (__pyx_nargs) {
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 307, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 307, __pyx_L3_error)
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 307, __pyx_L3_error)
break;
default: goto __pyx_L5_argtuple_error;
}
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
}
__pyx_v_self = values[0];
__pyx_v_msg = values[1];
__pyx_v_column_failures = values[2];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 307, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.UnsupportedDataFrameShapeError.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_30UnsupportedDataFrameShapeError___init__(__pyx_self, __pyx_v_self, __pyx_v_msg, __pyx_v_column_failures);
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_30UnsupportedDataFrameShapeError___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_msg, PyObject *__pyx_v_column_failures) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("questdb._client.UnsupportedDataFrameShapeError.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_30UnsupportedDataFrameShapeError_1__init__, 0, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError_2, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[69])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 307, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
#endif
PyList_Append(__pyx_t_4, __pyx_t_17);
__Pyx_CyFunction_SetDefaultsTuple(__pyx_t_17, __pyx_mstate_global->__pyx_tuple[49]);
if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_init, __pyx_t_17) < (0)) __PYX_ERR(0, 307, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00308: self.column_failures = tuple(column_failures or ())
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_column_failures); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 308, __pyx_L1_error) if (!__pyx_t_2) { } else { __Pyx_INCREF(__pyx_v_column_failures); __pyx_t_1 = __pyx_v_column_failures; goto __pyx_L3_bool_binop_done; } __Pyx_INCREF(__pyx_mstate_global->__pyx_empty_tuple); __pyx_t_1 = __pyx_mstate_global->__pyx_empty_tuple; __pyx_L3_bool_binop_done:; __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 308, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_column_failures, __pyx_t_3) < (0)) __PYX_ERR(0, 308, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+00309: super().__init__(
__pyx_t_5 = NULL; __pyx_t_6 = __Pyx_CyFunction_GetClassObj(__pyx_self); if (!__pyx_t_6) { PyErr_SetString(PyExc_RuntimeError, "super(): empty __class__ cell"); __PYX_ERR(0, 309, __pyx_L1_error) } __Pyx_INCREF(__pyx_t_6); __pyx_t_7 = 1; { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_v_self}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_super, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 309, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_1 = __pyx_t_4; __Pyx_INCREF(__pyx_t_1);
+00310: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 310, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 310, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+00311: _format_unsupported_dataframe_msg(msg, self.column_failures))
__pyx_t_6 = __pyx_v_msg; __Pyx_INCREF(__pyx_t_6); if (!(likely(PyUnicode_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_6))) __PYX_ERR(0, 311, __pyx_L1_error) __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_column_failures); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 311, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); if (!(likely(PyTuple_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_8))) __PYX_ERR(0, 311, __pyx_L1_error) __pyx_t_9 = __pyx_f_7questdb_7_client__format_unsupported_dataframe_msg(((PyObject*)__pyx_t_6), ((PyObject*)__pyx_t_8)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 311, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_7 = 0; { PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_5, __pyx_t_9}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_init, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 309, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
00312:
00313:
+00314: cdef str _format_unsupported_dataframe_msg(str msg, tuple column_failures):
static PyObject *__pyx_f_7questdb_7_client__format_unsupported_dataframe_msg(PyObject *__pyx_v_msg, PyObject *__pyx_v_column_failures) {
PyObject *__pyx_v_lines = 0;
PyObject *__pyx_v_failure = 0;
PyObject *__pyx_v_column = 0;
PyObject *__pyx_v_reason = 0;
int __pyx_v_ts_related;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_AddTraceback("questdb._client._format_unsupported_dataframe_msg", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_lines);
__Pyx_XDECREF(__pyx_v_failure);
__Pyx_XDECREF(__pyx_v_column);
__Pyx_XDECREF(__pyx_v_reason);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00315: # Surface the per-column reasons (otherwise stranded on the
00316: # `.column_failures` attribute) so a plain `str(exc)` says what to fix
00317: # instead of a bare "columnar v1". When the designated timestamp is the
00318: # problem, point at the two client-side remedies (name a valid column,
00319: # or let the server stamp) — keeping the user on QuestDB.dataframe()
00320: # rather than steering them off to the row path.
+00321: if not column_failures:
if (__pyx_v_column_failures == Py_None) __pyx_t_1 = 0;
else
{
Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_v_column_failures);
if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 321, __pyx_L1_error)
__pyx_t_1 = (__pyx_temp != 0);
}
__pyx_t_2 = (!__pyx_t_1);
if (__pyx_t_2) {
/* … */
}
+00322: return msg
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_msg);
__pyx_r = __pyx_v_msg;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+00323: cdef list lines = [msg]
__pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 323, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_msg); __Pyx_GIVEREF(__pyx_v_msg); if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_msg) != (0)) __PYX_ERR(0, 323, __pyx_L1_error); __pyx_v_lines = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
00324: cdef object failure, column, reason
+00325: cdef bint ts_related = False
__pyx_v_ts_related = 0;
+00326: for failure in column_failures:
if (unlikely(__pyx_v_column_failures == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
__PYX_ERR(0, 326, __pyx_L1_error)
}
__pyx_t_3 = __pyx_v_column_failures; __Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
for (;;) {
{
Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 326, __pyx_L1_error)
#endif
if (__pyx_t_4 >= __pyx_temp) break;
}
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
__pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4));
#else
__pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4);
#endif
++__pyx_t_4;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 326, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_XDECREF_SET(__pyx_v_failure, __pyx_t_5);
__pyx_t_5 = 0;
/* … */
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+00327: if isinstance(failure, dict):
__pyx_t_2 = PyDict_Check(__pyx_v_failure);
if (__pyx_t_2) {
/* … */
goto __pyx_L6;
}
+00328: column = failure.get('column')
__pyx_t_6 = __pyx_v_failure;
__Pyx_INCREF(__pyx_t_6);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_n_u_column_2};
__pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 328, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
__Pyx_XDECREF_SET(__pyx_v_column, __pyx_t_5);
__pyx_t_5 = 0;
+00329: reason = failure.get('reason', failure)
__pyx_t_6 = __pyx_v_failure;
__Pyx_INCREF(__pyx_t_6);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_mstate_global->__pyx_n_u_reason, __pyx_v_failure};
__pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 329, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
__Pyx_XDECREF_SET(__pyx_v_reason, __pyx_t_5);
__pyx_t_5 = 0;
+00330: if (failure.get('target') == 'designated timestamp'
__pyx_t_6 = __pyx_v_failure;
__Pyx_INCREF(__pyx_t_6);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_n_u_target};
__pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 330, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
__pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_designated_timestamp, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 330, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (!__pyx_t_1) {
} else {
__pyx_t_2 = __pyx_t_1;
goto __pyx_L8_bool_binop_done;
}
/* … */
if (__pyx_t_2) {
/* … */
}
+00331: or 'ServerTimestamp' in str(reason)):
__pyx_t_5 = __Pyx_PyObject_Unicode(__pyx_v_reason); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 331, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = (__Pyx_PyUnicode_ContainsTF(__pyx_mstate_global->__pyx_n_u_ServerTimestamp, __pyx_t_5, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 331, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_2 = __pyx_t_1; __pyx_L8_bool_binop_done:;
+00332: ts_related = True
__pyx_v_ts_related = 1;
00333: else:
+00334: column, reason = None, failure
/*else*/ {
__pyx_t_5 = Py_None;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_6 = __pyx_v_failure;
__Pyx_INCREF(__pyx_t_6);
__Pyx_XDECREF_SET(__pyx_v_column, __pyx_t_5);
__pyx_t_5 = 0;
__Pyx_XDECREF_SET(__pyx_v_reason, __pyx_t_6);
__pyx_t_6 = 0;
}
__pyx_L6:;
+00335: if column is not None:
__pyx_t_2 = (__pyx_v_column != Py_None);
if (__pyx_t_2) {
/* … */
goto __pyx_L10;
}
+00336: lines.append(f' - column {column!r}: {reason}')
__pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_column), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 336, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_v_reason, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 336, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_column_4; __pyx_t_8[1] = __pyx_t_6; __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u__2; __pyx_t_8[3] = __pyx_t_5; __pyx_t_9 = 13; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[3]); #endif __pyx_t_10 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_10 |= __Pyx_PyUnicode_KIND_04(__pyx_t_8[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_8[3]); #endif __pyx_t_11 = __Pyx_PyUnicode_Join(__pyx_t_8, 4, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 336, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_lines, __pyx_t_11); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 336, __pyx_L1_error) __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
00337: else:
+00338: lines.append(f' - {reason}')
/*else*/ {
__pyx_t_11 = __Pyx_PyObject_FormatSimple(__pyx_v_reason, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 338, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
__pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u__24, __pyx_t_11); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 338, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
__pyx_t_12 = __Pyx_PyList_Append(__pyx_v_lines, __pyx_t_5); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 338, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
}
__pyx_L10:;
+00339: if ts_related:
if (__pyx_v_ts_related) {
/* … */
}
+00340: lines.append(
__pyx_t_12 = __Pyx_PyList_Append(__pyx_v_lines, __pyx_mstate_global->__pyx_kp_u_For_the_designated_timestamp_na); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 340, __pyx_L1_error)
00341: " For the designated timestamp, name a valid timestamp column "
00342: "with at='<column>', or pass at=ServerTimestamp to have the "
00343: "server assign each row's timestamp on arrival.")
+00344: return '\n'.join(lines)
__pyx_t_3 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__25, __pyx_v_lines); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 344, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = ((PyObject*)__pyx_t_3); } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
00345:
00346:
+00347: cdef inline object c_err_code_to_py(line_sender_error_code code):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_c_err_code_to_py(enum line_sender_error_code __pyx_v_code) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.c_err_code_to_py", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+00348: if code == line_sender_error_could_not_resolve_addr:
switch (__pyx_v_code) {
case line_sender_error_could_not_resolve_addr:
/* … */
break;
case line_sender_error_invalid_api_call:
+00349: return QuestDBErrorCode.CouldNotResolveAddr
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 349, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_CouldNotResolveAddr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 349, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00350: elif code == line_sender_error_invalid_api_call:
break;
case line_sender_error_socket_error:
+00351: return QuestDBErrorCode.InvalidApiCall
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 351, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 351, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00352: elif code == line_sender_error_socket_error:
break;
case line_sender_error_invalid_utf8:
+00353: return QuestDBErrorCode.SocketError
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 353, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_SocketError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 353, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00354: elif code == line_sender_error_invalid_utf8:
break;
case line_sender_error_invalid_name:
+00355: return QuestDBErrorCode.InvalidUtf8
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidUtf8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 355, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00356: elif code == line_sender_error_invalid_name:
break;
case line_sender_error_invalid_timestamp:
+00357: return QuestDBErrorCode.InvalidName
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_InvalidName); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 357, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00358: elif code == line_sender_error_invalid_timestamp:
break;
case line_sender_error_auth_error:
+00359: return QuestDBErrorCode.InvalidTimestamp
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 359, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 359, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00360: elif code == line_sender_error_auth_error:
break;
case line_sender_error_tls_error:
+00361: return QuestDBErrorCode.AuthError
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 361, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_AuthError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 361, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00362: elif code == line_sender_error_tls_error:
break;
case line_sender_error_http_not_supported:
+00363: return QuestDBErrorCode.TlsError
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_TlsError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00364: elif code == line_sender_error_http_not_supported:
break;
case line_sender_error_server_flush_error:
+00365: return QuestDBErrorCode.HttpNotSupported
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 365, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_HttpNotSupported); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 365, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00366: elif code == line_sender_error_server_flush_error:
break;
case line_sender_error_server_rejection:
+00367: return QuestDBErrorCode.ServerFlushError
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 367, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 367, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00368: elif code == line_sender_error_server_rejection:
break;
case line_sender_error_role_mismatch:
+00369: return QuestDBErrorCode.ServerRejection
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 369, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ServerRejection); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 369, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00370: elif code == line_sender_error_role_mismatch:
break;
case line_sender_error_config_error:
+00371: return QuestDBErrorCode.RoleMismatch
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 371, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_RoleMismatch); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 371, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00372: elif code == line_sender_error_config_error:
break;
case line_sender_error_array_error:
+00373: return QuestDBErrorCode.ConfigError
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00374: elif code == line_sender_error_array_error:
break;
case line_sender_error_protocol_version_error:
+00375: return QuestDBErrorCode.ArrayError
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 375, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ArrayError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 375, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00376: elif code == line_sender_error_protocol_version_error:
break;
case line_sender_error_invalid_decimal:
+00377: return QuestDBErrorCode.ProtocolVersionError
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 377, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ProtocolVersionError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 377, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00378: elif code == line_sender_error_invalid_decimal:
break;
case line_sender_error_arrow_unsupported_column_kind:
+00379: return QuestDBErrorCode.DecimalError
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 379, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_DecimalError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 379, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00380: elif code == line_sender_error_arrow_unsupported_column_kind:
break;
case line_sender_error_arrow_ingest:
+00381: return QuestDBErrorCode.ArrowUnsupportedColumnKind
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 381, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ArrowUnsupportedColumnKind); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 381, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00382: elif code == line_sender_error_arrow_ingest:
break;
case line_sender_error_failover_retry:
+00383: return QuestDBErrorCode.ArrowIngest
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ArrowIngest); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00384: elif code == line_sender_error_failover_retry:
break;
case line_sender_error_connect_timeout:
+00385: return QuestDBErrorCode.FailoverRetry
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 385, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_FailoverRetry); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 385, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00386: elif code == line_sender_error_connect_timeout:
break;
case line_sender_error_handshake_error:
+00387: return QuestDBErrorCode.ConnectTimeout
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 387, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ConnectTimeout); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 387, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00388: elif code == line_sender_error_handshake_error:
break;
case line_sender_error_unsupported_server:
+00389: return QuestDBErrorCode.HandshakeError
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 389, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_HandshakeError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 389, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00390: elif code == line_sender_error_unsupported_server:
break;
case line_sender_error_protocol_error:
+00391: return QuestDBErrorCode.UnsupportedServer
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 391, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_UnsupportedServer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 391, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00392: elif code == line_sender_error_protocol_error:
break;
case line_sender_error_invalid_bind:
+00393: return QuestDBErrorCode.ProtocolError
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 393, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ProtocolError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 393, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00394: elif code == line_sender_error_invalid_bind:
break;
case line_sender_error_server_schema_mismatch:
+00395: return QuestDBErrorCode.InvalidBind
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 395, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidBind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 395, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00396: elif code == line_sender_error_server_schema_mismatch:
break;
case line_sender_error_server_parse_error:
+00397: return QuestDBErrorCode.ServerSchemaMismatch
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 397, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ServerSchemaMismatch); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 397, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00398: elif code == line_sender_error_server_parse_error:
break;
case line_sender_error_server_internal_error:
+00399: return QuestDBErrorCode.ServerParseError
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 399, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ServerParseError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 399, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00400: elif code == line_sender_error_server_internal_error:
break;
case line_sender_error_server_security_error:
+00401: return QuestDBErrorCode.ServerInternalError
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 401, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ServerInternalError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 401, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00402: elif code == line_sender_error_server_security_error:
break;
case line_sender_error_limit_exceeded:
+00403: return QuestDBErrorCode.ServerSecurityError
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 403, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ServerSecurityError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 403, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00404: elif code == line_sender_error_limit_exceeded:
break;
case line_sender_error_server_limit_exceeded:
+00405: return QuestDBErrorCode.LimitExceeded
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 405, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_LimitExceeded); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 405, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00406: elif code == line_sender_error_server_limit_exceeded:
break;
case line_sender_error_cancelled:
+00407: return QuestDBErrorCode.ServerLimitExceeded
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 407, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ServerLimitExceeded); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 407, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00408: elif code == line_sender_error_cancelled:
break;
case line_sender_error_failover_would_duplicate:
+00409: return QuestDBErrorCode.Cancelled
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 409, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_Cancelled); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 409, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00410: elif code == line_sender_error_failover_would_duplicate:
break;
case line_sender_error_schema_drift:
+00411: return QuestDBErrorCode.FailoverWouldDuplicate
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 411, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_FailoverWouldDuplicate); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00412: elif code == line_sender_error_schema_drift:
break;
case line_sender_error_no_schema:
+00413: return QuestDBErrorCode.SchemaDrift
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 413, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_SchemaDrift); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 413, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00414: elif code == line_sender_error_no_schema:
break;
case line_sender_error_arrow_export:
+00415: return QuestDBErrorCode.NoSchema
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 415, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_NoSchema); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00416: elif code == line_sender_error_arrow_export:
break;
case line_sender_error_batch_too_large:
+00417: return QuestDBErrorCode.ArrowExport
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ArrowExport); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 417, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00418: elif code == line_sender_error_batch_too_large:
break;
case line_sender_error_store_resend_required:
+00419: return QuestDBErrorCode.BatchTooLarge
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 419, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 419, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00420: elif code == line_sender_error_store_resend_required:
break;
case line_sender_error_symbol_dict_full:
+00421: return QuestDBErrorCode.StoreResendRequired
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 421, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_StoreResendRequired); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 421, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+00422: elif code == line_sender_error_symbol_dict_full:
break;
case line_sender_error_query_timeout:
+00423: return QuestDBErrorCode.SymbolDictFull
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 423, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_SymbolDictFull); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 423, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+00424: elif code == line_sender_error_query_timeout:
break;
default:
+00425: return QuestDBErrorCode.QueryTimeout
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 425, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QueryTimeout); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 425, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
00426: else:
+00427: raise ValueError('Internal error converting error code.')
__pyx_t_1 = NULL;
__pyx_t_3 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_mstate_global->__pyx_kp_u_Internal_error_converting_error};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 427, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 427, __pyx_L1_error)
break;
}
00428:
00429:
+00430: def _debug_error_code_to_py(int raw_code):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_18_debug_error_code_to_py(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_17_debug_error_code_to_py, "Internal ABI test hook for the native-to-Python error mapping."); static PyMethodDef __pyx_mdef_7questdb_7_client_18_debug_error_code_to_py = {"_debug_error_code_to_py", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_18_debug_error_code_to_py, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_17_debug_error_code_to_py}; static PyObject *__pyx_pw_7questdb_7_client_18_debug_error_code_to_py(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { int __pyx_v_raw_code; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_error_code_to_py (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_raw_code,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 430, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 430, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_error_code_to_py", 0) < (0)) __PYX_ERR(0, 430, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_error_code_to_py", 1, 1, 1, i); __PYX_ERR(0, 430, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 430, __pyx_L3_error) } __pyx_v_raw_code = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_raw_code == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 430, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_debug_error_code_to_py", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 430, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._debug_error_code_to_py", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_17_debug_error_code_to_py(__pyx_self, __pyx_v_raw_code); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_17_debug_error_code_to_py(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_raw_code) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("questdb._client._debug_error_code_to_py", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_18_debug_error_code_to_py, 0, __pyx_mstate_global->__pyx_n_u_debug_error_code_to_py, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[70])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 430, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_error_code_to_py, __pyx_t_19) < (0)) __PYX_ERR(0, 430, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
00431: """Internal ABI test hook for the native-to-Python error mapping."""
+00432: return c_err_code_to_py(<line_sender_error_code>raw_code)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_code_to_py(((enum line_sender_error_code)__pyx_v_raw_code)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 432, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00433:
00434:
+00435: cdef inline object c_sender_error_view_to_raw(
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_c_sender_error_view_to_raw(struct line_sender_qwpws_error_view __pyx_v_view) {
PyObject *__pyx_v_message = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client.c_sender_error_view_to_raw", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_message);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00436: line_sender_qwpws_error_view view):
00437: cdef object message
+00438: if view.message == NULL:
__pyx_t_1 = (__pyx_v_view.message == NULL);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+00439: message = ''
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__6);
__pyx_v_message = __pyx_mstate_global->__pyx_kp_u__6;
00440: else:
+00441: message = PyUnicode_FromStringAndSize(
/*else*/ {
/* … */
__pyx_t_2 = PyUnicode_FromStringAndSize(__pyx_v_view.message, ((Py_ssize_t)__pyx_v_view.message_len)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 441, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_v_message = __pyx_t_2;
__pyx_t_2 = 0;
}
__pyx_L3:;
00442: view.message, <Py_ssize_t>view.message_len)
00443: return (
+00444: <int>view.category,
__pyx_t_2 = __Pyx_PyLong_From_int(((int)__pyx_v_view.category)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 444, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); /* … */ __pyx_t_8 = PyTuple_New(7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 444, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 444, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_3); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_3) != (0)) __PYX_ERR(0, 444, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_4); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_4) != (0)) __PYX_ERR(0, 444, __pyx_L1_error); __Pyx_INCREF(__pyx_v_message); __Pyx_GIVEREF(__pyx_v_message); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_v_message) != (0)) __PYX_ERR(0, 444, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_5); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 4, __pyx_t_5) != (0)) __PYX_ERR(0, 444, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_6); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 5, __pyx_t_6) != (0)) __PYX_ERR(0, 444, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_7); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 6, __pyx_t_7) != (0)) __PYX_ERR(0, 444, __pyx_L1_error); __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_8; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_8 = 0; goto __pyx_L0;
+00445: <int>view.applied_policy,
__pyx_t_3 = __Pyx_PyLong_From_int(((int)__pyx_v_view.applied_policy)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 445, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3);
+00446: view.status if view.has_status else None,
__pyx_t_1 = (__pyx_v_view.has_status != 0);
if (__pyx_t_1) {
__pyx_t_5 = __Pyx_PyLong_From_uint8_t(__pyx_v_view.status); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 446, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_4 = __pyx_t_5;
__pyx_t_5 = 0;
} else {
__Pyx_INCREF(Py_None);
__pyx_t_4 = Py_None;
}
00447: message,
+00448: view.message_sequence if view.has_message_sequence else None,
__pyx_t_1 = (__pyx_v_view.has_message_sequence != 0);
if (__pyx_t_1) {
__pyx_t_6 = __Pyx_PyLong_From_uint64_t(__pyx_v_view.message_sequence); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 448, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_5 = __pyx_t_6;
__pyx_t_6 = 0;
} else {
__Pyx_INCREF(Py_None);
__pyx_t_5 = Py_None;
}
+00449: view.from_fsn,
__pyx_t_6 = __Pyx_PyLong_From_uint64_t(__pyx_v_view.from_fsn); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 449, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6);
+00450: view.to_fsn)
__pyx_t_7 = __Pyx_PyLong_From_uint64_t(__pyx_v_view.to_fsn); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 450, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7);
00451:
00452:
+00453: cdef inline object c_err_to_fields(questdb_error* err):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_c_err_to_fields(questdb_error *__pyx_v_err) {
questdb_error_code __pyx_v_code;
size_t __pyx_v_c_len;
char const *__pyx_v_c_msg;
struct line_sender_qwpws_error_view __pyx_v_qwp_ws_view;
int __pyx_v_in_doubt;
PyObject *__pyx_v_py_msg = 0;
PyObject *__pyx_v_py_code = 0;
PyObject *__pyx_v_py_sender_error = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.c_err_to_fields", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_py_msg);
__Pyx_XDECREF(__pyx_v_py_code);
__Pyx_XDECREF(__pyx_v_py_sender_error);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00454: """Extract ``QuestDBError`` fields from a C error, which will be freed."""
+00455: if err == NULL:
__pyx_t_1 = (__pyx_v_err == NULL);
if (__pyx_t_1) {
/* … */
}
00456: return (
+00457: QuestDBErrorCode.SocketError,
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 457, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_SocketError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 457, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* … */ __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 457, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_3); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3) != (0)) __PYX_ERR(0, 457, __pyx_L1_error); __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_Unknown_error_the_client_library); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_kp_u_Unknown_error_the_client_library); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_mstate_global->__pyx_kp_u_Unknown_error_the_client_library) != (0)) __PYX_ERR(0, 457, __pyx_L1_error); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, Py_None) != (0)) __PYX_ERR(0, 457, __pyx_L1_error); __Pyx_INCREF(Py_False); __Pyx_GIVEREF(Py_False); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 3, Py_False) != (0)) __PYX_ERR(0, 457, __pyx_L1_error); __pyx_t_3 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
00458: 'Unknown error: the client library reported failure without '
00459: 'a diagnostic.',
00460: None,
00461: False)
+00462: cdef questdb_error_code code = questdb_error_get_code(err)
__pyx_v_code = questdb_error_get_code(__pyx_v_err);
+00463: cdef size_t c_len = 0
__pyx_v_c_len = 0;
+00464: cdef const char* c_msg = questdb_error_msg(err, &c_len)
__pyx_v_c_msg = questdb_error_msg(__pyx_v_err, (&__pyx_v_c_len));
00465: cdef line_sender_qwpws_error_view qwp_ws_view
+00466: cdef bint in_doubt = questdb_error_in_doubt(err)
__pyx_v_in_doubt = questdb_error_in_doubt(__pyx_v_err);
00467: cdef object py_msg
00468: cdef object py_code
+00469: cdef object py_sender_error = None
__Pyx_INCREF(Py_None);
__pyx_v_py_sender_error = Py_None;
+00470: try:
/*try:*/ {
+00471: py_code = c_err_code_to_py(code)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_code_to_py(__pyx_v_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 471, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_py_code = __pyx_t_2; __pyx_t_2 = 0;
+00472: py_msg = PyUnicode_FromStringAndSize(c_msg, <Py_ssize_t>c_len)
__pyx_t_2 = PyUnicode_FromStringAndSize(__pyx_v_c_msg, ((Py_ssize_t)__pyx_v_c_len)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 472, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_py_msg = __pyx_t_2; __pyx_t_2 = 0;
+00473: if line_sender_error_qwpws_get_view(err, &qwp_ws_view):
__pyx_t_1 = line_sender_error_qwpws_get_view(__pyx_v_err, (&__pyx_v_qwp_ws_view));
if (__pyx_t_1) {
/* … */
}
+00474: py_sender_error = c_sender_error_view_to_raw(qwp_ws_view)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_sender_error_view_to_raw(__pyx_v_qwp_ws_view); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 474, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF_SET(__pyx_v_py_sender_error, __pyx_t_2); __pyx_t_2 = 0;
+00475: return (py_code, py_msg, py_sender_error, in_doubt)
__pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 475, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 475, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_py_code); __Pyx_GIVEREF(__pyx_v_py_code); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_py_code) != (0)) __PYX_ERR(0, 475, __pyx_L5_error); __Pyx_INCREF(__pyx_v_py_msg); __Pyx_GIVEREF(__pyx_v_py_msg); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_py_msg) != (0)) __PYX_ERR(0, 475, __pyx_L5_error); __Pyx_INCREF(__pyx_v_py_sender_error); __Pyx_GIVEREF(__pyx_v_py_sender_error); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_py_sender_error) != (0)) __PYX_ERR(0, 475, __pyx_L5_error); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_2) != (0)) __PYX_ERR(0, 475, __pyx_L5_error); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L4_return; }
00476: finally:
+00477: questdb_error_free(err)
/*finally:*/ {
__pyx_L5_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
{
questdb_error_free(__pyx_v_err);
}
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
goto __pyx_L1_error;
}
__pyx_L4_return: {
__pyx_t_12 = __pyx_r;
__pyx_r = 0;
questdb_error_free(__pyx_v_err);
__pyx_r = __pyx_t_12;
__pyx_t_12 = 0;
goto __pyx_L0;
}
}
00478:
00479:
+00480: cdef inline object c_err_to_py(line_sender_error* err):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_c_err_to_py(struct line_sender_error *__pyx_v_err) {
PyObject *__pyx_v_tup = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_AddTraceback("questdb._client.c_err_to_py", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_tup);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00481: """Construct a ``QuestDBError`` from a C error, which will be freed."""
+00482: cdef object tup = c_err_to_fields(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_fields(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_tup = __pyx_t_1; __pyx_t_1 = 0;
+00483: if tup[0] == QuestDBErrorCode.ServerRejection:
__pyx_t_1 = __Pyx_GetItemInt(__pyx_v_tup, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 483, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 483, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ServerRejection); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 483, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_1, __pyx_t_3, Py_EQ); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 483, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_4) { /* … */ }
+00484: return QuestDBServerRejectionError(
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBServerRejectionError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 484, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
/* … */
{
PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_in_doubt};
__pyx_mstate_global->__pyx_tuple[23] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[23])) __PYX_ERR(0, 484, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[23]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[23]);
+00485: tup[0], tup[1], tup[2], in_doubt=tup[3])
__pyx_t_5 = __Pyx_GetItemInt(__pyx_v_tup, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 485, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_tup, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 485, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_tup, 2, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 485, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); /* … */ __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_tup, 3, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 485, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[5] = {__pyx_t_1, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8}; #if CYTHON_VECTORCALL __pyx_t_10 = __pyx_mstate_global->__pyx_tuple[23]; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 484, __pyx_L1_error) __Pyx_INCREF(__pyx_t_10); #else { PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_in_doubt}; __pyx_t_10 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+4, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 484, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); } #endif __pyx_t_3 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_9, (4-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_10); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 484, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
+00486: return QuestDBError(tup[0], tup[1], tup[2], in_doubt=tup[3])
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 486, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_tup, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 486, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_tup, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 486, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_tup, 2, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 486, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_tup, 3, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 486, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_10))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_10); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_10); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_10, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[5] = {__pyx_t_2, __pyx_t_8, __pyx_t_7, __pyx_t_6, __pyx_t_5}; #if CYTHON_VECTORCALL __pyx_t_1 = __pyx_mstate_global->__pyx_tuple[23]; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 486, __pyx_L1_error) __Pyx_INCREF(__pyx_t_1); #else { PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_in_doubt}; __pyx_t_1 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+4, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 486, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } #endif __pyx_t_3 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_10, __pyx_callargs+__pyx_t_9, (4-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 486, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
00487:
00488:
+00489: cdef inline object c_err_to_py_fmt(line_sender_error* err, str fmt):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_c_err_to_py_fmt(struct line_sender_error *__pyx_v_err, PyObject *__pyx_v_fmt) {
PyObject *__pyx_v_tup = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_AddTraceback("questdb._client.c_err_to_py_fmt", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_tup);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00490: """Construct a ``QuestDBError`` from a C error, which will be freed."""
+00491: cdef object tup = c_err_to_fields(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_fields(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 491, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_tup = __pyx_t_1; __pyx_t_1 = 0;
+00492: if tup[0] == QuestDBErrorCode.ServerRejection:
__pyx_t_1 = __Pyx_GetItemInt(__pyx_v_tup, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 492, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 492, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ServerRejection); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 492, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_1, __pyx_t_3, Py_EQ); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 492, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_4) { /* … */ }
+00493: return QuestDBServerRejectionError(
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBServerRejectionError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 493, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
+00494: tup[0], fmt.format(tup[1]), tup[2], in_doubt=tup[3])
__pyx_t_5 = __Pyx_GetItemInt(__pyx_v_tup, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_tup, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_CallUnboundCMethod1(&__pyx_mstate_global->__pyx_umethod_PyUnicode_Type__format, __pyx_v_fmt, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (!(likely(PyUnicode_CheckExact(__pyx_t_7)) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_7))) __PYX_ERR(0, 494, __pyx_L1_error) __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_tup, 2, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); /* … */ __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_tup, 3, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[5] = {__pyx_t_1, __pyx_t_5, __pyx_t_7, __pyx_t_6, __pyx_t_8}; #if CYTHON_VECTORCALL __pyx_t_10 = __pyx_mstate_global->__pyx_tuple[23]; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 493, __pyx_L1_error) __Pyx_INCREF(__pyx_t_10); #else { PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_in_doubt}; __pyx_t_10 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+4, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 493, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); } #endif __pyx_t_3 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_9, (4-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_10); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 493, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
+00495: return QuestDBError(
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 495, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10);
+00496: tup[0], fmt.format(tup[1]), tup[2], in_doubt=tup[3])
__pyx_t_8 = __Pyx_GetItemInt(__pyx_v_tup, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 496, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_tup, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 496, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_CallUnboundCMethod1(&__pyx_mstate_global->__pyx_umethod_PyUnicode_Type__format, __pyx_v_fmt, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 496, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (!(likely(PyUnicode_CheckExact(__pyx_t_7)) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_7))) __PYX_ERR(0, 496, __pyx_L1_error) __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_tup, 2, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 496, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); /* … */ __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_tup, 3, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 496, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_10))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_10); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_10); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_10, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[5] = {__pyx_t_2, __pyx_t_8, __pyx_t_7, __pyx_t_6, __pyx_t_5}; #if CYTHON_VECTORCALL __pyx_t_1 = __pyx_mstate_global->__pyx_tuple[23]; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 495, __pyx_L1_error) __Pyx_INCREF(__pyx_t_1); #else { PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_in_doubt}; __pyx_t_1 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+4, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 495, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } #endif __pyx_t_3 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_10, __pyx_callargs+__pyx_t_9, (4-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 495, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
00497:
00498:
+00499: cdef inline void_int reserve_buffer(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_reserve_buffer(struct line_sender_buffer *__pyx_v_buffer, size_t __pyx_v_additional) {
struct line_sender_error *__pyx_v_err;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.reserve_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00500: line_sender_buffer* buffer,
00501: size_t additional) except -1:
+00502: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+00503: if not line_sender_buffer_reserve(buffer, additional, &err):
__pyx_t_1 = (!line_sender_buffer_reserve(__pyx_v_buffer, __pyx_v_additional, (&__pyx_v_err)));
if (unlikely(__pyx_t_1)) {
/* … */
}
+00504: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 504, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 504, __pyx_L1_error)
00505:
00506:
+00507: cdef object _utf8_decode_error(
static PyObject *__pyx_f_7questdb_7_client__utf8_decode_error(PyObject *__pyx_v_string, uint32_t __pyx_v_bad_codepoint) {
PyObject *__pyx_v_s = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_AddTraceback("questdb._client._utf8_decode_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_s);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00508: PyObject* string, uint32_t bad_codepoint):
+00509: cdef str s = <str><object>string
__pyx_t_1 = ((PyObject *)__pyx_v_string);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_s = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
+00510: return QuestDBError(
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 510, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3);
+00511: QuestDBErrorCode.InvalidUtf8,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 511, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidUtf8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 511, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+00512: f'Invalid codepoint 0x{bad_codepoint:x} in string {s!r}: ' +
__pyx_t_4 = __Pyx_PyUnicode_From_uint32_t(__pyx_v_bad_codepoint, 0, ' ', 'x'); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 512, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_s), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 512, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7[0] = __pyx_mstate_global->__pyx_kp_u_Invalid_codepoint_0x; __pyx_t_7[1] = __pyx_t_4; __pyx_t_7[2] = __pyx_mstate_global->__pyx_kp_u_in_string; __pyx_t_7[3] = __pyx_t_6; __pyx_t_7[4] = __pyx_mstate_global->__pyx_kp_u_Cannot_be_encoded_as_UTF_8; __pyx_t_8 = 60; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7[3]); #endif __pyx_t_9 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_9 |= __Pyx_PyUnicode_KIND_04(__pyx_t_7[3]); #endif __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_7, 5, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 512, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_11 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_11 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_5, __pyx_t_10}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_11, (3-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 510, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00513: 'Cannot be encoded as UTF-8.')
00514:
00515:
+00516: cdef str _fqn(type obj):
static PyObject *__pyx_f_7questdb_7_client__fqn(PyTypeObject *__pyx_v_obj) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._fqn", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+00517: if obj.__module__ == 'builtins':
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_mstate_global->__pyx_n_u_module); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 517, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_builtins, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 517, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ }
+00518: return obj.__qualname__
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_mstate_global->__pyx_n_u_qualname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 518, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(0, 518, __pyx_L1_error) { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = ((PyObject*)__pyx_t_1); } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00519: else:
+00520: return f'{obj.__module__}.{obj.__qualname__}'
/*else*/ {
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_mstate_global->__pyx_n_u_module); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 520, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 520, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_mstate_global->__pyx_n_u_qualname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 520, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 520, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_5[0] = __pyx_t_3;
__pyx_t_5[1] = __pyx_mstate_global->__pyx_kp_u__3;
__pyx_t_5[2] = __pyx_t_4;
__pyx_t_6 = 1;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5[0]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5[2]);
#endif
__pyx_t_7 = 0;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_7 |= __Pyx_PyUnicode_KIND_04(__pyx_t_5[0]) | __Pyx_PyUnicode_KIND_04(__pyx_t_5[2]);
#endif
__pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, __pyx_t_6, __pyx_t_7);
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 520, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = ((PyObject*)__pyx_t_1);
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_1 = 0;
goto __pyx_L0;
}
00521:
00522:
+00523: cdef inline void_int _encode_utf8(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__encode_utf8(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_string, struct line_sender_utf8 *__pyx_v_utf8_out) {
uint32_t __pyx_v_bad_codepoint;
size_t __pyx_v_count;
int __pyx_v_kind;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client._encode_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00524: qdb_pystr_buf* b,
00525: PyObject* string,
00526: line_sender_utf8* utf8_out) except -1:
+00527: cdef uint32_t bad_codepoint = 0
__pyx_v_bad_codepoint = 0;
+00528: cdef size_t count = <size_t>(PyUnicode_GET_LENGTH(string))
__pyx_v_count = ((size_t)PyUnicode_GET_LENGTH(__pyx_v_string));
+00529: cdef int kind = PyUnicode_KIND(string)
__pyx_v_kind = PyUnicode_KIND(__pyx_v_string);
+00530: if kind == PyUnicode_1BYTE_KIND:
switch (__pyx_v_kind) {
case PyUnicode_1BYTE_KIND:
/* … */
break;
case PyUnicode_2BYTE_KIND:
00531: # No error handling for UCS1: All code points translate into valid UTF8.
+00532: qdb_ucs1_to_utf8(
qdb_ucs1_to_utf8(__pyx_v_b, __pyx_v_count, PyUnicode_1BYTE_DATA(__pyx_v_string), (&__pyx_v_utf8_out->len), (&__pyx_v_utf8_out->buf));
00533: b,
00534: count,
00535: PyUnicode_1BYTE_DATA(string),
00536: &utf8_out.len,
00537: &utf8_out.buf)
+00538: elif kind == PyUnicode_2BYTE_KIND:
break;
case PyUnicode_4BYTE_KIND:
+00539: if not qdb_ucs2_to_utf8(
__pyx_t_1 = (!qdb_ucs2_to_utf8(__pyx_v_b, __pyx_v_count, PyUnicode_2BYTE_DATA(__pyx_v_string), (&__pyx_v_utf8_out->len), (&__pyx_v_utf8_out->buf), (&__pyx_v_bad_codepoint)));
if (unlikely(__pyx_t_1)) {
/* … */
}
00540: b,
00541: count,
00542: PyUnicode_2BYTE_DATA(string),
00543: &utf8_out.len,
00544: &utf8_out.buf,
00545: &bad_codepoint):
+00546: raise _utf8_decode_error(string, bad_codepoint)
__pyx_t_2 = __pyx_f_7questdb_7_client__utf8_decode_error(__pyx_v_string, __pyx_v_bad_codepoint); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 546, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 546, __pyx_L1_error)
+00547: elif kind == PyUnicode_4BYTE_KIND:
break;
default:
+00548: if not qdb_ucs4_to_utf8(
__pyx_t_1 = (!qdb_ucs4_to_utf8(__pyx_v_b, __pyx_v_count, ((uint32_t const *)PyUnicode_4BYTE_DATA(__pyx_v_string)), (&__pyx_v_utf8_out->len), (&__pyx_v_utf8_out->buf), (&__pyx_v_bad_codepoint)));
if (unlikely(__pyx_t_1)) {
/* … */
}
00549: b,
00550: count,
00551:
00552: # This cast is required and is possibly a Cython compiler bug.
00553: # It doesn't recognize that `const Py_UCS4*`
00554: # is the same as `const uint32_t*`.
00555: <const uint32_t*>PyUnicode_4BYTE_DATA(string),
00556:
00557: &utf8_out.len,
00558: &utf8_out.buf,
00559: &bad_codepoint):
+00560: raise _utf8_decode_error(string, bad_codepoint)
__pyx_t_2 = __pyx_f_7questdb_7_client__utf8_decode_error(__pyx_v_string, __pyx_v_bad_codepoint); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 560, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 560, __pyx_L1_error)
00561: else:
+00562: raise ValueError(f'Unknown UCS kind: {kind}.')
__pyx_t_3 = NULL;
__pyx_t_4 = __Pyx_PyUnicode_From_int(__pyx_v_kind, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 562, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5[0] = __pyx_mstate_global->__pyx_kp_u_Unknown_UCS_kind;
__pyx_t_5[1] = __pyx_t_4;
__pyx_t_5[2] = __pyx_mstate_global->__pyx_kp_u__3;
__pyx_t_6 = 19;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5[1]);
#endif
__pyx_t_7 = 0;
__pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, __pyx_t_6, __pyx_t_7);
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 562, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_9 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_8};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 562, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 562, __pyx_L1_error)
break;
}
00563:
00564:
+00565: cdef void_int str_to_utf8(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_str_to_utf8(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_string, struct line_sender_utf8 *__pyx_v_utf8_out) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client.str_to_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00566: qdb_pystr_buf* b,
00567: PyObject* string,
00568: line_sender_utf8* utf8_out) except -1:
00569: """
00570: Convert a Python string to a UTF-8 borrowed buffer.
00571: This is done without allocating new Python `bytes` objects.
00572: In case the string is an ASCII string, it's also generally zero-copy.
00573: The `utf8_out` param will point to (borrow from) either the ASCII buffer
00574: inside the original Python object or a part of memory allocated inside the
00575: `b` buffer.
00576:
00577: If you need to use `utf8_out` without the GIL, call `qdb_pystr_buf_copy`.
00578: """
+00579: if not PyUnicode_CheckExact(string):
__pyx_t_1 = (!PyUnicode_CheckExact(__pyx_v_string));
if (unlikely(__pyx_t_1)) {
/* … */
}
+00580: raise TypeError(
__pyx_t_3 = NULL;
+00581: 'Expected a str object, not an object of type ' +
__pyx_t_5 = __Pyx_PyUnicode_ConcatSafe(__pyx_mstate_global->__pyx_kp_u_Expected_a_str_object_not_an_obj, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 581, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 580, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 580, __pyx_L1_error)
+00582: _fqn(type(<str><object>string)))
__pyx_t_4 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_string))))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 582, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4);
+00583: PyUnicode_READY(string)
__pyx_t_7 = PyUnicode_READY(__pyx_v_string); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 583, __pyx_L1_error)
00584:
00585: # We optimize the common case of ASCII strings.
00586: # This avoid memory allocations and copies altogether.
00587: # We get away with this because ASCII is a subset of UTF-8.
+00588: if PyUnicode_IS_COMPACT_ASCII(string):
__pyx_t_1 = PyUnicode_IS_COMPACT_ASCII(__pyx_v_string);
if (__pyx_t_1) {
/* … */
}
+00589: utf8_out.len = <size_t>(PyUnicode_GET_LENGTH(string))
__pyx_v_utf8_out->len = ((size_t)PyUnicode_GET_LENGTH(__pyx_v_string));
+00590: utf8_out.buf = <const char*>(PyUnicode_1BYTE_DATA(string))
__pyx_v_utf8_out->buf = ((char const *)PyUnicode_1BYTE_DATA(__pyx_v_string));
+00591: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
00592:
+00593: _encode_utf8(b, string, utf8_out)
__pyx_t_8 = __pyx_f_7questdb_7_client__encode_utf8(__pyx_v_b, __pyx_v_string, __pyx_v_utf8_out); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 593, __pyx_L1_error)
00594:
00595:
00596:
+00597: cdef void_int str_to_utf8_copy(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_str_to_utf8_copy(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_string, struct line_sender_utf8 *__pyx_v_utf8_out) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client.str_to_utf8_copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00598: qdb_pystr_buf* b,
00599: PyObject* string,
00600: line_sender_utf8* utf8_out) except -1:
00601: """
00602: Variant of `str_to_utf8` that always copies the string to a new buffer.
00603:
00604: The resulting `utf8_out` can be used when not holding the GIL:
00605: The pointed-to memory is owned by `b`.
00606: """
+00607: if not PyUnicode_CheckExact(string):
__pyx_t_1 = (!PyUnicode_CheckExact(__pyx_v_string));
if (unlikely(__pyx_t_1)) {
/* … */
}
+00608: raise TypeError(
__pyx_t_3 = NULL;
+00609: 'Expected a str object, not an object of type ' +
__pyx_t_5 = __Pyx_PyUnicode_ConcatSafe(__pyx_mstate_global->__pyx_kp_u_Expected_a_str_object_not_an_obj, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 609, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 608, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 608, __pyx_L1_error)
+00610: _fqn(type(<str><object>string)))
__pyx_t_4 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_string))))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 610, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4);
00611:
+00612: PyUnicode_READY(string)
__pyx_t_7 = PyUnicode_READY(__pyx_v_string); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 612, __pyx_L1_error)
+00613: _encode_utf8(b, string, utf8_out)
__pyx_t_8 = __pyx_f_7questdb_7_client__encode_utf8(__pyx_v_b, __pyx_v_string, __pyx_v_utf8_out); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 613, __pyx_L1_error)
00614:
00615:
+00616: cdef void_int str_to_table_name(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_str_to_table_name(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_string, struct line_sender_table_name *__pyx_v_name_out) {
struct line_sender_error *__pyx_v_err;
struct line_sender_utf8 __pyx_v_utf8;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.str_to_table_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00617: qdb_pystr_buf* b,
00618: PyObject* string,
00619: line_sender_table_name* name_out) except -1:
00620: """
00621: Python string to borrowed C table name.
00622: Also see `str_to_utf8`.
00623: """
+00624: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
00625: cdef line_sender_utf8 utf8
+00626: str_to_utf8(b, string, &utf8)
__pyx_t_1 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, __pyx_v_string, (&__pyx_v_utf8)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 626, __pyx_L1_error)
+00627: if not line_sender_table_name_init(name_out, utf8.len, utf8.buf, &err):
__pyx_t_2 = (!line_sender_table_name_init(__pyx_v_name_out, __pyx_v_utf8.len, __pyx_v_utf8.buf, (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
+00628: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 628, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 628, __pyx_L1_error)
00629:
00630:
+00631: cdef void_int str_to_table_name_copy(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_str_to_table_name_copy(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_string, struct line_sender_table_name *__pyx_v_name_out) {
struct line_sender_error *__pyx_v_err;
struct line_sender_utf8 __pyx_v_utf8;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.str_to_table_name_copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00632: qdb_pystr_buf* b,
00633: PyObject* string,
00634: line_sender_table_name* name_out) except -1:
00635: """
00636: Python string to copied C table name.
00637: Also see `str_to_utf8_copy`.
00638: """
+00639: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
00640: cdef line_sender_utf8 utf8
+00641: str_to_utf8_copy(b, string, &utf8)
__pyx_t_1 = __pyx_f_7questdb_7_client_str_to_utf8_copy(__pyx_v_b, __pyx_v_string, (&__pyx_v_utf8)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 641, __pyx_L1_error)
+00642: if not line_sender_table_name_init(name_out, utf8.len, utf8.buf, &err):
__pyx_t_2 = (!line_sender_table_name_init(__pyx_v_name_out, __pyx_v_utf8.len, __pyx_v_utf8.buf, (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
+00643: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 643, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 643, __pyx_L1_error)
00644:
00645:
+00646: cdef void_int str_to_column_name(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_str_to_column_name(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_string, struct line_sender_column_name *__pyx_v_name_out) {
struct line_sender_error *__pyx_v_err;
struct line_sender_utf8 __pyx_v_utf8;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.str_to_column_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00647: qdb_pystr_buf* b,
00648: str string,
00649: line_sender_column_name* name_out) except -1:
00650: """
00651: Python string to borrowed C column name.
00652: Also see `str_to_utf8`.
00653: """
+00654: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
00655: cdef line_sender_utf8 utf8
+00656: str_to_utf8(b, <PyObject*>string, &utf8)
__pyx_t_1 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_string), (&__pyx_v_utf8)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 656, __pyx_L1_error)
+00657: if not line_sender_column_name_init(name_out, utf8.len, utf8.buf, &err):
__pyx_t_2 = (!line_sender_column_name_init(__pyx_v_name_out, __pyx_v_utf8.len, __pyx_v_utf8.buf, (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
+00658: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 658, __pyx_L1_error)
00659:
00660:
+00661: cdef void_int str_to_column_name_copy(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_str_to_column_name_copy(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_string, struct line_sender_column_name *__pyx_v_name_out) {
struct line_sender_error *__pyx_v_err;
struct line_sender_utf8 __pyx_v_utf8;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.str_to_column_name_copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00662: qdb_pystr_buf* b,
00663: str string,
00664: line_sender_column_name* name_out) except -1:
00665: """
00666: Python string to copied C column name.
00667: Also see `str_to_utf8_copy`.
00668: """
+00669: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
00670: cdef line_sender_utf8 utf8
+00671: str_to_utf8_copy(b, <PyObject*>string, &utf8)
__pyx_t_1 = __pyx_f_7questdb_7_client_str_to_utf8_copy(__pyx_v_b, ((PyObject *)__pyx_v_string), (&__pyx_v_utf8)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 671, __pyx_L1_error)
+00672: if not line_sender_column_name_init(name_out, utf8.len, utf8.buf, &err):
__pyx_t_2 = (!line_sender_column_name_init(__pyx_v_name_out, __pyx_v_utf8.len, __pyx_v_utf8.buf, (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
+00673: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 673, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 673, __pyx_L1_error)
00674:
00675:
+00676: cdef object _UTC = datetime.timezone.utc
__Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 676, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_timezone); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 676, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_utc); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 676, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_XGOTREF(__pyx_v_7questdb_7_client__UTC); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__UTC, __pyx_t_19); __Pyx_GIVEREF(__pyx_t_19); __pyx_t_19 = 0;
+00677: cdef object _UTC_EPOCH = datetime.datetime(1970, 1, 1, tzinfo=_UTC)
__Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __pyx_t_19 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_tzinfo, __pyx_v_7questdb_7_client__UTC) < (0)) __PYX_ERR(0, 677, __pyx_L1_error) __pyx_t_20 = __Pyx_PyObject_Call(__pyx_t_16, __pyx_mstate_global->__pyx_tuple[3], __pyx_t_19); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_XGOTREF(__pyx_v_7questdb_7_client__UTC_EPOCH); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__UTC_EPOCH, __pyx_t_20); __Pyx_GIVEREF(__pyx_t_20); __pyx_t_20 = 0;
00678:
00679:
+00680: _NAIVE_DATETIME_WARNED = False
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_NAIVE_DATETIME_WARNED, Py_False) < (0)) __PYX_ERR(0, 680, __pyx_L1_error)
00681:
00682:
+00683: cdef object _as_utc_aware(cp_datetime dt):
static PyObject *__pyx_f_7questdb_7_client__as_utc_aware(PyDateTime_DateTime *__pyx_v_dt) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client._as_utc_aware", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00684: global _NAIVE_DATETIME_WARNED
+00685: if dt.tzinfo is not None:
__pyx_t_1 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo___get__(__pyx_v_dt); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 685, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = (__pyx_t_1 != Py_None); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ }
+00686: return dt
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_dt);
__pyx_r = ((PyObject *)__pyx_v_dt);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+00687: if dt != dt:
__pyx_t_2 = __Pyx_PyObject_RichCompareBool(((PyObject *)__pyx_v_dt), ((PyObject *)__pyx_v_dt), Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 687, __pyx_L1_error) if (unlikely(__pyx_t_2)) { /* … */ }
+00688: raise ValueError('NaT is not a valid timestamp.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_NaT_is_not_a_valid_timestamp};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 688, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 688, __pyx_L1_error)
+00689: if not _NAIVE_DATETIME_WARNED:
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_NAIVE_DATETIME_WARNED); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 689, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = (!__pyx_t_2); if (__pyx_t_5) { /* … */ }
+00690: _NAIVE_DATETIME_WARNED = True
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_NAIVE_DATETIME_WARNED, Py_True) < (0)) __PYX_ERR(0, 690, __pyx_L1_error)
00691: # cdef frames and this module's def entry points are invisible to
00692: # the warnings stack walker, so level 1 is already the user's call.
+00693: warnings.warn(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_warnings); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 693, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_warn); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 693, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
__pyx_t_4 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_7))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
__pyx_t_4 = 0;
}
#endif
{
PyObject *__pyx_callargs[4] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Naive_datetime_interpreted_as_UT, ((PyObject *)(((PyTypeObject*)PyExc_UserWarning))), __pyx_mstate_global->__pyx_int_1};
#if CYTHON_VECTORCALL
__pyx_t_6 = __pyx_mstate_global->__pyx_tuple[20];
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 693, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_6);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_stacklevel};
__pyx_t_6 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+3, 1);
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 693, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
}
#endif
__pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6);
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 693, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
00694: 'Naive datetime interpreted as UTC (questdb 4.x used local '
00695: 'time). If you meant "now", use TimestampNanos.now() or '
00696: 'datetime.now(timezone.utc); pass timezone-aware datetimes '
00697: 'to silence this warning.',
00698: UserWarning,
00699: stacklevel=1)
+00700: return dt.replace(tzinfo=datetime.timezone.utc)
__pyx_t_7 = ((PyObject *)__pyx_v_dt); __Pyx_INCREF(__pyx_t_7); __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 700, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_timezone); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 700, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_utc); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 700, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_4 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_6}; #if CYTHON_VECTORCALL __pyx_t_3 = __pyx_mstate_global->__pyx_tuple[24]; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 700, __pyx_L1_error) __Pyx_INCREF(__pyx_t_3); #else { PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_tzinfo}; __pyx_t_3 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 700, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } #endif __pyx_t_1 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_replace, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 700, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0; /* … */ { PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_tzinfo}; __pyx_mstate_global->__pyx_tuple[24] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[24])) __PYX_ERR(0, 700, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[24]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[24]);
00701:
00702:
+00703: cdef int64_t datetime_to_micros(cp_datetime dt):
static int64_t __pyx_f_7questdb_7_client_datetime_to_micros(PyDateTime_DateTime *__pyx_v_dt) {
PyObject *__pyx_v_aware = 0;
PyObject *__pyx_v_delta = 0;
int64_t __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.datetime_to_micros", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1L;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_aware);
__Pyx_XDECREF(__pyx_v_delta);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00704: """
00705: Convert a :class:`datetime.datetime` to microseconds since the epoch.
00706:
00707: Naive datetimes are interpreted as UTC.
00708: """
+00709: cdef object aware = _as_utc_aware(dt)
__pyx_t_1 = __pyx_f_7questdb_7_client__as_utc_aware(__pyx_v_dt); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 709, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_aware = __pyx_t_1; __pyx_t_1 = 0;
+00710: cdef object delta = aware - _UTC_EPOCH
__pyx_t_1 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_aware, __pyx_v_7questdb_7_client__UTC_EPOCH); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 710, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_delta = __pyx_t_1; __pyx_t_1 = 0;
00711: return (
+00712: <int64_t>delta.days * <int64_t>86_400_000_000 +
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_delta, __pyx_mstate_global->__pyx_n_u_days); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 712, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyLong_As_int64_t(__pyx_t_1); if (unlikely((__pyx_t_2 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 712, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+00713: <int64_t>delta.seconds * <int64_t>1_000_000 +
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_delta, __pyx_mstate_global->__pyx_n_u_seconds); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyLong_As_int64_t(__pyx_t_1); if (unlikely((__pyx_t_3 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 713, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* … */ { __pyx_r = (((((int64_t)__pyx_t_2) * ((int64_t)0x141DD76000)) + (((int64_t)__pyx_t_3) * ((int64_t)0xF4240))) + ((int64_t)__pyx_t_4)); } goto __pyx_L0;
+00714: <int64_t>delta.microseconds)
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_delta, __pyx_mstate_global->__pyx_n_u_microseconds); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 714, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyLong_As_int64_t(__pyx_t_1); if (unlikely((__pyx_t_4 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 714, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
00715:
00716:
+00717: cdef int64_t datetime_to_nanos(cp_datetime dt):
static int64_t __pyx_f_7questdb_7_client_datetime_to_nanos(PyDateTime_DateTime *__pyx_v_dt) {
int64_t __pyx_v_micros;
int64_t __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client.datetime_to_nanos", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1L;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00718: """
00719: Convert a `datetime.datetime` to nanoseconds since the epoch.
00720: """
+00721: cdef int64_t micros = datetime_to_micros(dt)
__pyx_t_1 = __pyx_f_7questdb_7_client_datetime_to_micros(__pyx_v_dt); if (unlikely(__pyx_t_1 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 721, __pyx_L1_error) __pyx_v_micros = __pyx_t_1;
00722: # INT64_MAX // 1000 == 9_223_372_036_854_775 is the largest microsecond
00723: # value whose nanosecond product still fits in an int64.
+00724: if (micros > <int64_t>9_223_372_036_854_775 or
__pyx_t_3 = (__pyx_v_micros > ((int64_t)0x20C49BA5E353F7));
if (!__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L4_bool_binop_done;
}
/* … */
if (unlikely(__pyx_t_2)) {
/* … */
}
+00725: micros < <int64_t>-9_223_372_036_854_775):
__pyx_t_3 = (__pyx_v_micros < ((int64_t)-9223372036854775L)); __pyx_t_2 = __pyx_t_3; __pyx_L4_bool_binop_done:;
+00726: raise ValueError(
__pyx_t_5 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_datetime_is_out_of_range_for_a_n};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 726, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 726, __pyx_L1_error)
00727: 'datetime is out of range for a nanosecond timestamp: '
00728: 'must be between 1677-09-21T00:12:43.145225Z and '
00729: '2262-04-11T23:47:16.854775Z.')
+00730: return micros * 1000
{
__pyx_r = (__pyx_v_micros * 0x3E8);
}
goto __pyx_L0;
00731:
00732:
+00733: class ServerTimestampType:
__pyx_t_20 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_mstate_global->__pyx_empty_tuple, __pyx_mstate_global->__pyx_n_u_ServerTimestampType, __pyx_mstate_global->__pyx_n_u_ServerTimestampType, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_A_placeholder_value_to_indicate); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 733, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __pyx_t_19 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_mstate_global->__pyx_n_u_ServerTimestampType, __pyx_mstate_global->__pyx_empty_tuple, __pyx_t_20, NULL, 0, 0); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 733, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ServerTimestampType, __pyx_t_19) < (0)) __PYX_ERR(0, 733, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
00734: """
00735: A placeholder value to indicate that the data should be inserted
00736: using a server-generated-timestamp.
00737:
00738: Don't instantiate this class directly, use the singleton
00739: :data:`ServerTimestamp` instead.
00740:
00741: This feature is mostly provided for legacy compatibility.
00742: We recommend always specifying an explicit timestamp.
00743:
00744: Using ``ServerTimestamp`` will prevent QuestDB's deduplication
00745: feature from working as it would generate unique rows on resubmission.
00746: """
00747: pass
00748:
00749:
00750: #: Singleton instance used to request server-side timestamping.
00751: #: See :class:`ServerTimestampType` for more details.
+00752: ServerTimestamp = ServerTimestampType()
__pyx_t_19 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_ServerTimestampType); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 752, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_19, NULL}; __pyx_t_20 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_16, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 752, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); } if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ServerTimestamp, __pyx_t_20) < (0)) __PYX_ERR(0, 752, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
00753:
00754:
+00755: cdef class TimestampMicros:
struct __pyx_obj_7questdb_7_client_TimestampMicros {
PyObject_HEAD
int64_t _value;
};
00756: """
00757: A timestamp in microseconds since the UNIX epoch (UTC).
00758:
00759: You may construct a ``TimestampMicros`` from an integer or a
00760: ``datetime.datetime``, or simply call the :func:`TimestampMicros.now`
00761: method.
00762:
00763: .. code-block:: python
00764:
00765: # Recommended way to get the current timestamp.
00766: TimestampMicros.now()
00767:
00768: # The above is equivalent to:
00769: TimestampMicros(time.time_ns() // 1000)
00770:
00771: # You can provide a numeric timestamp too. It can't be negative.
00772: TimestampMicros(1657888365426838)
00773:
00774: ``TimestampMicros`` can also be constructed from a ``datetime.datetime``
00775: object.
00776:
00777: .. code-block:: python
00778:
00779: TimestampMicros.from_datetime(
00780: datetime.datetime.now(tz=datetime.timezone.utc))
00781:
00782: We recommend that when using ``datetime`` objects, you explicitly pass in
00783: the timezone to use. A ``datetime`` object without an associated timezone
00784: is interpreted as UTC (a ``UserWarning`` is emitted once per process).
00785: Note that ``datetime.datetime.now()`` is your local wall clock: use
00786: ``datetime.datetime.now(datetime.timezone.utc)`` or ``now()`` on this
00787: class for the current instant.
00788: """
00789: cdef int64_t _value
00790:
+00791: def __cinit__(self, value):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_15TimestampMicros_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_15TimestampMicros_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_value = 0;
#if !CYTHON_VECTORCALL_TPNEW
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
#if !CYTHON_VECTORCALL_TPNEW
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_value,0};
PyObject* values[1] = {0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL_TPNEW(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 791, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 791, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(0, 791, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, i); __PYX_ERR(0, 791, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 791, __pyx_L3_error)
}
__pyx_v_value = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 791, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.TimestampMicros.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_15TimestampMicros___cinit__(((struct __pyx_obj_7questdb_7_client_TimestampMicros *)__pyx_v_self), __pyx_v_value);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_15TimestampMicros___cinit__(struct __pyx_obj_7questdb_7_client_TimestampMicros *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.TimestampMicros.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+00792: if value < 0:
__pyx_t_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_value, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 792, __pyx_L1_error) if (unlikely(__pyx_t_1)) { /* … */ }
+00793: raise ValueError('value must be a non-negative integer.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_value_must_be_a_non_negative_int};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 793, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 793, __pyx_L1_error)
+00794: self._value = value
__pyx_t_5 = __Pyx_PyLong_As_int64_t(__pyx_v_value); if (unlikely((__pyx_t_5 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 794, __pyx_L1_error) __pyx_v_self->_value = __pyx_t_5;
00795:
+00796: @classmethod
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_3from_datetime(PyObject *__pyx_v_cls, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_15TimestampMicros_2from_datetime, "\n Construct a ``TimestampMicros`` from a :class:`datetime.datetime` object.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_15TimestampMicros_3from_datetime = {"from_datetime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_15TimestampMicros_3from_datetime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_15TimestampMicros_2from_datetime}; static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_3from_datetime(PyObject *__pyx_v_cls, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_dt = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("from_datetime (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_dt,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 796, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 796, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "from_datetime", 0) < (0)) __PYX_ERR(0, 796, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("from_datetime", 1, 1, 1, i); __PYX_ERR(0, 796, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 796, __pyx_L3_error) } __pyx_v_dt = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("from_datetime", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 796, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.TimestampMicros.from_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_15TimestampMicros_2from_datetime(((PyTypeObject*)__pyx_v_cls), __pyx_v_dt); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_15TimestampMicros_2from_datetime(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_dt) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("questdb._client.TimestampMicros.from_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 796, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_dt, __pyx_mstate_global->__pyx_kp_u_datetime_datetime) < (0)) __PYX_ERR(0, 796, __pyx_L1_error) __pyx_t_16 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_15TimestampMicros_3from_datetime, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_TimestampMicros_from_datetime, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[71])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 796, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16); #endif __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_16, __pyx_t_20); __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros, __pyx_mstate_global->__pyx_n_u_from_datetime, __pyx_t_16) < (0)) __PYX_ERR(0, 796, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_GetNameInClass(__pyx_t_16, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros, __pyx_mstate_global->__pyx_n_u_from_datetime); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 796, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_20 = __Pyx_Method_ClassMethod(__pyx_t_16); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 796, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros, __pyx_mstate_global->__pyx_n_u_from_datetime, __pyx_t_20) < (0)) __PYX_ERR(0, 796, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
00797: def from_datetime(cls, dt: datetime.datetime):
00798: """
00799: Construct a ``TimestampMicros`` from a :class:`datetime.datetime` object.
00800: """
+00801: if not isinstance(dt, cp_datetime):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_dt, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime);
__pyx_t_2 = (!__pyx_t_1);
if (unlikely(__pyx_t_2)) {
/* … */
}
+00802: raise TypeError('dt must be a datetime object.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_dt_must_be_a_datetime_object};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 802, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 802, __pyx_L1_error)
+00803: return cls(datetime_to_micros(dt))
__pyx_t_4 = NULL; if (!(likely(((__pyx_v_dt) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dt, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 803, __pyx_L1_error) __pyx_t_6 = __pyx_f_7questdb_7_client_datetime_to_micros(((PyDateTime_DateTime *)__pyx_v_dt)); if (unlikely(__pyx_t_6 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 803, __pyx_L1_error) __pyx_t_7 = __Pyx_PyLong_From_int64_t(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 803, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 803, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
00804:
+00805: @classmethod
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_5now(PyObject *__pyx_v_cls, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_15TimestampMicros_4now, "\n Construct a ``TimestampMicros`` from the current time as UTC.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_15TimestampMicros_5now = {"now", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_15TimestampMicros_5now, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_15TimestampMicros_4now}; static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_5now(PyObject *__pyx_v_cls, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("now (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("now", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("now", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_15TimestampMicros_4now(((PyTypeObject*)__pyx_v_cls)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_15TimestampMicros_4now(PyTypeObject *__pyx_v_cls) { int64_t __pyx_v_value; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client.TimestampMicros.now", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_15TimestampMicros_5now, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_TimestampMicros_now, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[72])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 805, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros, __pyx_mstate_global->__pyx_n_u_now, __pyx_t_20) < (0)) __PYX_ERR(0, 805, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_GetNameInClass(__pyx_t_20, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros, __pyx_mstate_global->__pyx_n_u_now); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 805, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __pyx_t_16 = __Pyx_Method_ClassMethod(__pyx_t_20); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 805, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros, __pyx_mstate_global->__pyx_n_u_now, __pyx_t_16) < (0)) __PYX_ERR(0, 805, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
00806: def now(cls):
00807: """
00808: Construct a ``TimestampMicros`` from the current time as UTC.
00809: """
+00810: cdef int64_t value = line_sender_now_micros()
__pyx_v_value = line_sender_now_micros();
+00811: return cls(value)
__pyx_t_2 = NULL; __pyx_t_3 = __Pyx_PyLong_From_int64_t(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 811, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 811, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00812:
+00813: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_5value_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_5value_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_15TimestampMicros_5value___get__(((struct __pyx_obj_7questdb_7_client_TimestampMicros *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_15TimestampMicros_5value___get__(struct __pyx_obj_7questdb_7_client_TimestampMicros *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.TimestampMicros.value.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00814: def value(self) -> int:
00815: """Number of microseconds (Unix epoch timestamp, UTC)."""
+00816: return self._value
__pyx_t_1 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 816, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00817:
+00818: def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_7__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_7__repr__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_15TimestampMicros_6__repr__(((struct __pyx_obj_7questdb_7_client_TimestampMicros *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_15TimestampMicros_6__repr__(struct __pyx_obj_7questdb_7_client_TimestampMicros *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client.TimestampMicros.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+00819: return f'TimestampMicros({self._value})'
__pyx_t_1 = __Pyx_PyUnicode_From_int64_t(__pyx_v_self->_value, 0, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 819, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2[0] = __pyx_mstate_global->__pyx_kp_u_TimestampMicros; __pyx_t_2[1] = __pyx_t_1; __pyx_t_2[2] = __pyx_mstate_global->__pyx_kp_u__11; __pyx_t_3 = 17; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2[1]); #endif __pyx_t_4 = 0; __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 819, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_5; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_5 = 0; goto __pyx_L0;
00820:
00821:
+00822: cdef class TimestampNanos:
struct __pyx_obj_7questdb_7_client_TimestampNanos {
PyObject_HEAD
int64_t _value;
};
00823: """
00824: A timestamp in nanoseconds since the UNIX epoch (UTC).
00825:
00826: You may construct a ``TimestampNanos`` from an integer or a
00827: ``datetime.datetime``, or simply call the :func:`TimestampNanos.now`
00828: method.
00829:
00830: .. code-block:: python
00831:
00832: # Recommended way to get the current timestamp.
00833: TimestampNanos.now()
00834:
00835: # The above is equivalent to:
00836: TimestampNanos(time.time_ns())
00837:
00838: # You can provide a numeric timestamp too. It can't be negative.
00839: TimestampNanos(1657888365426838016)
00840:
00841: ``TimestampNanos`` can also be constructed from a ``datetime`` object.
00842:
00843: .. code-block:: python
00844:
00845: TimestampNanos.from_datetime(
00846: datetime.datetime.now(tz=datetime.timezone.utc))
00847:
00848: We recommend that when using ``datetime`` objects, you explicitly pass in
00849: the timezone to use. A ``datetime`` object without an associated timezone
00850: is interpreted as UTC (a ``UserWarning`` is emitted once per process).
00851: Note that ``datetime.datetime.now()`` is your local wall clock: use
00852: ``datetime.datetime.now(datetime.timezone.utc)`` or ``now()`` on this
00853: class for the current instant.
00854: """
00855: cdef int64_t _value
00856:
+00857: def __cinit__(self, value):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_14TimestampNanos_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_14TimestampNanos_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_value = 0;
#if !CYTHON_VECTORCALL_TPNEW
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
#if !CYTHON_VECTORCALL_TPNEW
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_value,0};
PyObject* values[1] = {0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL_TPNEW(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 857, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 857, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(0, 857, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, i); __PYX_ERR(0, 857, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 857, __pyx_L3_error)
}
__pyx_v_value = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 857, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.TimestampNanos.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_14TimestampNanos___cinit__(((struct __pyx_obj_7questdb_7_client_TimestampNanos *)__pyx_v_self), __pyx_v_value);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_14TimestampNanos___cinit__(struct __pyx_obj_7questdb_7_client_TimestampNanos *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.TimestampNanos.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+00858: if value < 0:
__pyx_t_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_value, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 858, __pyx_L1_error) if (unlikely(__pyx_t_1)) { /* … */ }
+00859: raise ValueError('value must be a non-negative integer.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_value_must_be_a_non_negative_int};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 859, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 859, __pyx_L1_error)
+00860: self._value = value
__pyx_t_5 = __Pyx_PyLong_As_int64_t(__pyx_v_value); if (unlikely((__pyx_t_5 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 860, __pyx_L1_error) __pyx_v_self->_value = __pyx_t_5;
00861:
+00862: @classmethod
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_3from_datetime(PyObject *__pyx_v_cls, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14TimestampNanos_2from_datetime, "\n Construct a ``TimestampNanos`` from a ``datetime.datetime`` object.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_14TimestampNanos_3from_datetime = {"from_datetime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14TimestampNanos_3from_datetime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14TimestampNanos_2from_datetime}; static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_3from_datetime(PyObject *__pyx_v_cls, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_dt = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("from_datetime (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_dt,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 862, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 862, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "from_datetime", 0) < (0)) __PYX_ERR(0, 862, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("from_datetime", 1, 1, 1, i); __PYX_ERR(0, 862, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 862, __pyx_L3_error) } __pyx_v_dt = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("from_datetime", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 862, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.TimestampNanos.from_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_14TimestampNanos_2from_datetime(((PyTypeObject*)__pyx_v_cls), __pyx_v_dt); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_14TimestampNanos_2from_datetime(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_dt) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("questdb._client.TimestampNanos.from_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_16 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 862, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_dt, __pyx_mstate_global->__pyx_kp_u_datetime_datetime) < (0)) __PYX_ERR(0, 862, __pyx_L1_error) __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14TimestampNanos_3from_datetime, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_TimestampNanos_from_datetime, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[75])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 862, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20); #endif __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_20, __pyx_t_16); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos, __pyx_mstate_global->__pyx_n_u_from_datetime, __pyx_t_20) < (0)) __PYX_ERR(0, 862, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_GetNameInClass(__pyx_t_20, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos, __pyx_mstate_global->__pyx_n_u_from_datetime); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 862, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __pyx_t_16 = __Pyx_Method_ClassMethod(__pyx_t_20); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 862, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos, __pyx_mstate_global->__pyx_n_u_from_datetime, __pyx_t_16) < (0)) __PYX_ERR(0, 862, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
00863: def from_datetime(cls, dt: datetime.datetime):
00864: """
00865: Construct a ``TimestampNanos`` from a ``datetime.datetime`` object.
00866: """
+00867: if not isinstance(dt, cp_datetime):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_dt, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime);
__pyx_t_2 = (!__pyx_t_1);
if (unlikely(__pyx_t_2)) {
/* … */
}
+00868: raise TypeError('dt must be a datetime object.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_dt_must_be_a_datetime_object};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 868, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 868, __pyx_L1_error)
+00869: return cls(datetime_to_nanos(dt))
__pyx_t_4 = NULL; if (!(likely(((__pyx_v_dt) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dt, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 869, __pyx_L1_error) __pyx_t_6 = __pyx_f_7questdb_7_client_datetime_to_nanos(((PyDateTime_DateTime *)__pyx_v_dt)); if (unlikely(__pyx_t_6 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 869, __pyx_L1_error) __pyx_t_7 = __Pyx_PyLong_From_int64_t(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 869, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 869, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
00870:
+00871: @classmethod
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_5now(PyObject *__pyx_v_cls, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14TimestampNanos_4now, "\n Construct a ``TimestampNanos`` from the current time as UTC.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_14TimestampNanos_5now = {"now", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14TimestampNanos_5now, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14TimestampNanos_4now}; static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_5now(PyObject *__pyx_v_cls, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("now (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("now", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("now", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_14TimestampNanos_4now(((PyTypeObject*)__pyx_v_cls)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_14TimestampNanos_4now(PyTypeObject *__pyx_v_cls) { int64_t __pyx_v_value; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client.TimestampNanos.now", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_16 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14TimestampNanos_5now, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_TimestampNanos_now, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[76])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 871, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos, __pyx_mstate_global->__pyx_n_u_now, __pyx_t_16) < (0)) __PYX_ERR(0, 871, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_GetNameInClass(__pyx_t_16, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos, __pyx_mstate_global->__pyx_n_u_now); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 871, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_20 = __Pyx_Method_ClassMethod(__pyx_t_16); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 871, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos, __pyx_mstate_global->__pyx_n_u_now, __pyx_t_20) < (0)) __PYX_ERR(0, 871, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
00872: def now(cls):
00873: """
00874: Construct a ``TimestampNanos`` from the current time as UTC.
00875: """
+00876: cdef int64_t value = line_sender_now_nanos()
__pyx_v_value = line_sender_now_nanos();
+00877: return cls(value)
__pyx_t_2 = NULL; __pyx_t_3 = __Pyx_PyLong_From_int64_t(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 877, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 877, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00878:
+00879: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_5value_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_5value_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_14TimestampNanos_5value___get__(((struct __pyx_obj_7questdb_7_client_TimestampNanos *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_14TimestampNanos_5value___get__(struct __pyx_obj_7questdb_7_client_TimestampNanos *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.TimestampNanos.value.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00880: def value(self) -> int:
00881: """Number of nanoseconds (Unix epoch timestamp, UTC)."""
+00882: return self._value
__pyx_t_1 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 882, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00883:
+00884: def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_7__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_7__repr__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_14TimestampNanos_6__repr__(((struct __pyx_obj_7questdb_7_client_TimestampNanos *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_14TimestampNanos_6__repr__(struct __pyx_obj_7questdb_7_client_TimestampNanos *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.TimestampNanos.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+00885: return f'TimestampNanos({self.value})'
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 885, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 885, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3[0] = __pyx_mstate_global->__pyx_kp_u_TimestampNanos; __pyx_t_3[1] = __pyx_t_2; __pyx_t_3[2] = __pyx_mstate_global->__pyx_kp_u__11; __pyx_t_4 = 16; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3[1]); #endif __pyx_t_5 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_5 |= __Pyx_PyUnicode_KIND_04(__pyx_t_3[1]); #endif __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 885, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00886:
00887:
+00888: cdef class Char:
struct __pyx_obj_7questdb_7_client_Char {
PyObject_HEAD
uint16_t _value;
};
00889: """A QuestDB CHAR value stored as one UTF-16 code unit.
00890:
00891: ``'\\x00'`` is stored as code unit 0. CHAR has no physical ``NULL``
00892: representation: QWP/Arrow egress returns it as 0, while text output
00893: renders it as empty. Some QuestDB SQL operations treat code unit 0 as
00894: CHAR's null/absent marker.
00895: """
00896: cdef uint16_t _value
00897:
+00898: def __cinit__(self, value):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_4Char_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_4Char_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_value = 0;
#if !CYTHON_VECTORCALL_TPNEW
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
#if !CYTHON_VECTORCALL_TPNEW
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_value,0};
PyObject* values[1] = {0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL_TPNEW(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 898, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 898, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(0, 898, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, i); __PYX_ERR(0, 898, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 898, __pyx_L3_error)
}
__pyx_v_value = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 898, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.Char.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_4Char___cinit__(((struct __pyx_obj_7questdb_7_client_Char *)__pyx_v_self), __pyx_v_value);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_4Char___cinit__(struct __pyx_obj_7questdb_7_client_Char *__pyx_v_self, PyObject *__pyx_v_value) {
long __pyx_v_code_point;
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Char.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+00899: if not isinstance(value, str):
__pyx_t_1 = PyUnicode_Check(__pyx_v_value);
__pyx_t_2 = (!__pyx_t_1);
if (unlikely(__pyx_t_2)) {
/* … */
}
+00900: raise TypeError('value must be a str.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_value_must_be_a_str};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 900, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 900, __pyx_L1_error)
+00901: if len(value) != 1:
__pyx_t_6 = PyObject_Length(__pyx_v_value); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 901, __pyx_L1_error) __pyx_t_2 = (__pyx_t_6 != 1); if (unlikely(__pyx_t_2)) { /* … */ }
+00902: raise ValueError('value must contain exactly one code point.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_value_must_contain_exactly_one_c};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 902, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 902, __pyx_L1_error)
+00903: code_point = ord(value)
__pyx_t_7 = __Pyx_PyObject_Ord(__pyx_v_value); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 903, __pyx_L1_error) __pyx_v_code_point = __pyx_t_7;
+00904: if code_point > 0xFFFF:
__pyx_t_2 = (__pyx_v_code_point > 0xFFFF);
if (unlikely(__pyx_t_2)) {
/* … */
}
+00905: raise ValueError(
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_a_supplementary_character_needs};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 905, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 905, __pyx_L1_error)
00906: 'a supplementary character needs a surrogate pair and '
00907: 'cannot fit CHAR; use str/VARCHAR instead.')
+00908: self._value = <uint16_t>code_point
__pyx_v_self->_value = ((uint16_t)__pyx_v_code_point);
00909:
+00910: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_4Char_5value_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_4Char_5value_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_4Char_5value___get__(((struct __pyx_obj_7questdb_7_client_Char *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_4Char_5value___get__(struct __pyx_obj_7questdb_7_client_Char *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.Char.value.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00911: def value(self) -> str:
00912: """The single Python code point represented by this CHAR."""
+00913: return chr(self._value)
__pyx_t_1 = PyUnicode_FromOrdinal(__pyx_v_self->_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 913, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00914:
+00915: def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_4Char_3__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_4Char_3__repr__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_4Char_2__repr__(((struct __pyx_obj_7questdb_7_client_Char *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_4Char_2__repr__(struct __pyx_obj_7questdb_7_client_Char *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Char.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+00916: return f'Char({self.value!r})'
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 916, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_1), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 916, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3[0] = __pyx_mstate_global->__pyx_kp_u_Char; __pyx_t_3[1] = __pyx_t_2; __pyx_t_3[2] = __pyx_mstate_global->__pyx_kp_u__11; __pyx_t_4 = 6; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3[1]); #endif __pyx_t_5 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_5 |= __Pyx_PyUnicode_KIND_04(__pyx_t_3[1]); #endif __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 916, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00917:
00918:
+00919: cdef class DateMillis:
struct __pyx_obj_7questdb_7_client_DateMillis {
PyObject_HEAD
int64_t _value;
};
00920: """A QuestDB DATE value in milliseconds since the Unix epoch (UTC).
00921:
00922: QuestDB DATE is a millisecond timestamp, not a civil date. The full signed
00923: 64-bit range is accepted, including pre-epoch values. ``INT64_MIN`` is
00924: accepted but reads back from QuestDB as ``NULL``.
00925:
00926: This is how :func:`Buffer.row <questdb.ingress.Buffer.row>` writes a
00927: DATE column. DataFrames claim DATE from the column's Arrow type
00928: instead — ``pa.timestamp('ms')`` (naive or tz-aware),
00929: ``pa.date32()``, or ``pa.date64()`` — so there is no DATE cell type
00930: and no ``'date'`` kind for ``schema_overrides``. A NumPy
00931: ``datetime64[ms]`` dtype has no route of its own to DATE and widens
00932: to a microsecond TIMESTAMP, unless the frame carries a
00933: ``df.attrs['questdb']`` claim naming the column DATE, which puts the
00934: Arrow type back on it first. That claim is written as
00935: ``{'kind': 'date'}`` under the column's entry in the version-1 claim
00936: mapping. Like the other QWP-only types, DATE needs a QWP sender; ILP
00937: senders have no DATE type, so the datetime columns they accept all
00938: land as TIMESTAMP.
00939: """
00940: cdef int64_t _value
00941:
+00942: def __cinit__(self, millis):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_10DateMillis_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_10DateMillis_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_millis = 0;
#if !CYTHON_VECTORCALL_TPNEW
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
#if !CYTHON_VECTORCALL_TPNEW
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_millis,0};
PyObject* values[1] = {0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL_TPNEW(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 942, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 942, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(0, 942, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, i); __PYX_ERR(0, 942, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 942, __pyx_L3_error)
}
__pyx_v_millis = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 942, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.DateMillis.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_10DateMillis___cinit__(((struct __pyx_obj_7questdb_7_client_DateMillis *)__pyx_v_self), __pyx_v_millis);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_10DateMillis___cinit__(struct __pyx_obj_7questdb_7_client_DateMillis *__pyx_v_self, PyObject *__pyx_v_millis) {
int __pyx_r;
__Pyx_INCREF(__pyx_v_millis);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.DateMillis.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_millis);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+00943: if not _is_integral_not_bool(millis):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_millis); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 943, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (unlikely(__pyx_t_2)) { /* … */ }
+00944: raise TypeError('millis must be a whole number.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_millis_must_be_a_whole_number};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 944, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 944, __pyx_L1_error)
+00945: millis = int(millis)
__pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_millis); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 945, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF_SET(__pyx_v_millis, __pyx_t_3); __pyx_t_3 = 0;
+00946: if millis < INT64_MIN or millis > INT64_MAX:
__pyx_t_3 = __Pyx_PyLong_From_int64_t(INT64_MIN); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 946, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_millis, __pyx_t_3, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 946, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!__pyx_t_1) { } else { __pyx_t_2 = __pyx_t_1; goto __pyx_L5_bool_binop_done; } __pyx_t_3 = __Pyx_PyLong_From_int64_t(INT64_MAX); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 946, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_millis, __pyx_t_3, Py_GT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 946, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_2 = __pyx_t_1; __pyx_L5_bool_binop_done:; if (unlikely(__pyx_t_2)) { /* … */ }
+00947: raise ValueError('millis must fit in a signed 64-bit integer.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_millis_must_fit_in_a_signed_64_b};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 947, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 947, __pyx_L1_error)
+00948: self._value = <int64_t>millis
__pyx_t_6 = __Pyx_PyLong_As_int64_t(__pyx_v_millis); if (unlikely((__pyx_t_6 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 948, __pyx_L1_error) __pyx_v_self->_value = ((int64_t)__pyx_t_6);
00949:
+00950: @classmethod
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_3from_datetime(PyObject *__pyx_v_cls, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_10DateMillis_2from_datetime, "Construct a ``DateMillis`` by flooring a datetime to milliseconds."); static PyMethodDef __pyx_mdef_7questdb_7_client_10DateMillis_3from_datetime = {"from_datetime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_10DateMillis_3from_datetime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_10DateMillis_2from_datetime}; static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_3from_datetime(PyObject *__pyx_v_cls, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_dt = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("from_datetime (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_dt,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 950, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 950, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "from_datetime", 0) < (0)) __PYX_ERR(0, 950, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("from_datetime", 1, 1, 1, i); __PYX_ERR(0, 950, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 950, __pyx_L3_error) } __pyx_v_dt = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("from_datetime", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 950, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.DateMillis.from_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_10DateMillis_2from_datetime(((PyTypeObject*)__pyx_v_cls), __pyx_v_dt); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_10DateMillis_2from_datetime(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_dt) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("questdb._client.DateMillis.from_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 950, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_dt, __pyx_mstate_global->__pyx_kp_u_datetime_datetime) < (0)) __PYX_ERR(0, 950, __pyx_L1_error) __pyx_t_16 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_10DateMillis_3from_datetime, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DateMillis_from_datetime, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[81])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 950, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16); #endif __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_16, __pyx_t_20); __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis, __pyx_mstate_global->__pyx_n_u_from_datetime, __pyx_t_16) < (0)) __PYX_ERR(0, 950, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_GetNameInClass(__pyx_t_16, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis, __pyx_mstate_global->__pyx_n_u_from_datetime); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 950, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_20 = __Pyx_Method_ClassMethod(__pyx_t_16); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 950, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis, __pyx_mstate_global->__pyx_n_u_from_datetime, __pyx_t_20) < (0)) __PYX_ERR(0, 950, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
00951: def from_datetime(cls, dt: datetime.datetime):
00952: """Construct a ``DateMillis`` by flooring a datetime to milliseconds."""
+00953: if not isinstance(dt, cp_datetime):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_dt, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime);
__pyx_t_2 = (!__pyx_t_1);
if (unlikely(__pyx_t_2)) {
/* … */
}
+00954: raise TypeError('dt must be a datetime object.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_dt_must_be_a_datetime_object};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 954, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 954, __pyx_L1_error)
+00955: return cls(datetime_to_micros(dt) // 1000)
__pyx_t_4 = NULL; if (!(likely(((__pyx_v_dt) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dt, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 955, __pyx_L1_error) __pyx_t_6 = __pyx_f_7questdb_7_client_datetime_to_micros(((PyDateTime_DateTime *)__pyx_v_dt)); if (unlikely(__pyx_t_6 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 955, __pyx_L1_error) __pyx_t_7 = __Pyx_PyLong_From_int64_t(__Pyx_div_int64_t(__pyx_t_6, 0x3E8, 1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 955, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 955, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
00956:
+00957: @classmethod
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_5now(PyObject *__pyx_v_cls, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_10DateMillis_4now, "Construct a ``DateMillis`` from the current time as UTC."); static PyMethodDef __pyx_mdef_7questdb_7_client_10DateMillis_5now = {"now", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_10DateMillis_5now, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_10DateMillis_4now}; static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_5now(PyObject *__pyx_v_cls, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("now (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("now", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("now", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_10DateMillis_4now(((PyTypeObject*)__pyx_v_cls)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_10DateMillis_4now(PyTypeObject *__pyx_v_cls) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client.DateMillis.now", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_10DateMillis_5now, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DateMillis_now, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[82])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 957, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis, __pyx_mstate_global->__pyx_n_u_now, __pyx_t_20) < (0)) __PYX_ERR(0, 957, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_GetNameInClass(__pyx_t_20, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis, __pyx_mstate_global->__pyx_n_u_now); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 957, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __pyx_t_16 = __Pyx_Method_ClassMethod(__pyx_t_20); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 957, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis, __pyx_mstate_global->__pyx_n_u_now, __pyx_t_16) < (0)) __PYX_ERR(0, 957, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
00958: def now(cls):
00959: """Construct a ``DateMillis`` from the current time as UTC."""
+00960: return cls(line_sender_now_micros() // 1000)
__pyx_t_2 = NULL; __pyx_t_3 = __Pyx_PyLong_From_int64_t(__Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 960, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 960, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00961:
+00962: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_5value_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_5value_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_10DateMillis_5value___get__(((struct __pyx_obj_7questdb_7_client_DateMillis *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_10DateMillis_5value___get__(struct __pyx_obj_7questdb_7_client_DateMillis *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.DateMillis.value.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00963: def value(self) -> int:
00964: """Milliseconds since the Unix epoch (UTC)."""
+00965: return self._value
__pyx_t_1 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 965, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00966:
+00967: def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_7__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_7__repr__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_10DateMillis_6__repr__(((struct __pyx_obj_7questdb_7_client_DateMillis *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_10DateMillis_6__repr__(struct __pyx_obj_7questdb_7_client_DateMillis *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client.DateMillis.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+00968: return f'DateMillis({self._value})'
__pyx_t_1 = __Pyx_PyUnicode_From_int64_t(__pyx_v_self->_value, 0, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 968, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2[0] = __pyx_mstate_global->__pyx_kp_u_DateMillis; __pyx_t_2[1] = __pyx_t_1; __pyx_t_2[2] = __pyx_mstate_global->__pyx_kp_u__11; __pyx_t_3 = 12; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2[1]); #endif __pyx_t_4 = 0; __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 968, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_5; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_5 = 0; goto __pyx_L0;
00969:
00970:
+00971: cdef class Long256:
struct __pyx_obj_7questdb_7_client_Long256 {
PyObject_HEAD
PyObject *_bytes;
};
00972: """An unsigned 256-bit integer for a QuestDB LONG256 column.
00973:
00974: The value whose four 64-bit limbs are all ``0x8000000000000000`` is
00975: accepted but reads back from QuestDB as ``NULL``.
00976: """
00977: cdef bytes _bytes
00978:
+00979: def __cinit__(self, value):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_7Long256_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_7Long256_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_value = 0;
#if !CYTHON_VECTORCALL_TPNEW
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
#if !CYTHON_VECTORCALL_TPNEW
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_value,0};
PyObject* values[1] = {0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL_TPNEW(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 979, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 979, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(0, 979, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, i); __PYX_ERR(0, 979, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 979, __pyx_L3_error)
}
__pyx_v_value = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 979, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.Long256.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_7Long256___cinit__(((struct __pyx_obj_7questdb_7_client_Long256 *)__pyx_v_self), __pyx_v_value);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_7Long256___cinit__(struct __pyx_obj_7questdb_7_client_Long256 *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_INCREF(__pyx_v_value);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Long256.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_value);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+00980: if not _is_integral_not_bool(value):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_value); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 980, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (unlikely(__pyx_t_2)) { /* … */ }
+00981: raise TypeError('value must be a whole number.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_value_must_be_a_whole_number};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 981, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 981, __pyx_L1_error)
+00982: value = int(value)
__pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 982, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_3); __pyx_t_3 = 0;
+00983: if value < 0 or value >= (1 << 256):
__pyx_t_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_value, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 983, __pyx_L1_error) if (!__pyx_t_1) { } else { __pyx_t_2 = __pyx_t_1; goto __pyx_L5_bool_binop_done; } __pyx_t_1 = __Pyx_PyObject_CompareBoolGe_object_object(__pyx_v_value, __pyx_mstate_global->__pyx_int_large_0x1000000000000000_xxx_000000000000000000, Py_GE); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 983, __pyx_L1_error) __pyx_t_2 = __pyx_t_1; __pyx_L5_bool_binop_done:; if (unlikely(__pyx_t_2)) { /* … */ }
+00984: raise ValueError('value must be in the range 0 <= value < 2**256.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_value_must_be_in_the_range_0_val};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 984, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 984, __pyx_L1_error)
00985: # The column write reads exactly 32 bytes from the pointer. The
00986: # unbound `int.to_bytes` keeps a subclass override out of the way,
00987: # so the result is always a `bytes` of exactly that width.
+00988: self._bytes = int.to_bytes(value, 32, 'little')
__pyx_t_4 = ((PyObject *)(&PyLong_Type)); __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; { PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_v_value, __pyx_mstate_global->__pyx_int_32, __pyx_mstate_global->__pyx_n_u_little}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_to_bytes, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 988, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } if (!(likely(PyBytes_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_3))) __PYX_ERR(0, 988, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_3); __Pyx_GOTREF(__pyx_v_self->_bytes); __Pyx_DECREF(__pyx_v_self->_bytes); __pyx_v_self->_bytes = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
00989:
+00990: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7Long256_5value_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7Long256_5value_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_7Long256_5value___get__(((struct __pyx_obj_7questdb_7_client_Long256 *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_7Long256_5value___get__(struct __pyx_obj_7questdb_7_client_Long256 *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Long256.value.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
00991: def value(self) -> int:
00992: """The unsigned integer value."""
+00993: return int.from_bytes(self._bytes, 'little')
__pyx_t_2 = ((PyObject *)(&PyLong_Type)); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_self->_bytes, __pyx_mstate_global->__pyx_n_u_little}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_bytes, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 993, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00994:
+00995: def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7Long256_3__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7Long256_3__repr__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_7Long256_2__repr__(((struct __pyx_obj_7questdb_7_client_Long256 *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_7Long256_2__repr__(struct __pyx_obj_7questdb_7_client_Long256 *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Long256.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+00996: return f'Long256({self.value})'
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 996, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 996, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3[0] = __pyx_mstate_global->__pyx_kp_u_Long256; __pyx_t_3[1] = __pyx_t_2; __pyx_t_3[2] = __pyx_mstate_global->__pyx_kp_u__11; __pyx_t_4 = 9; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3[1]); #endif __pyx_t_5 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_5 |= __Pyx_PyUnicode_KIND_04(__pyx_t_3[1]); #endif __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 996, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
00997:
00998:
+00999: cdef class Geohash:
struct __pyx_obj_7questdb_7_client_Geohash {
PyObject_HEAD
uint64_t _bits;
uint8_t _precision;
};
01000: """A QuestDB GEOHASH value represented by bits and precision.
01001:
01002: This scalar wrapper is strict: ``precision`` must be in ``1..=60``
01003: and ``bits`` must satisfy ``0 <= bits < 2**precision``. Bulk
01004: GEOHASH columns, whether NumPy, Arrow or object, deliberately have
01005: a different, unchecked value contract; see
01006: :meth:`QuestDB.dataframe <questdb.QuestDB.dataframe>`.
01007:
01008: Precision is pinned per column within one buffer's worth of rows.
01009: The first GEOHASH cell written to a column fixes the precision for
01010: the rest of that batch, and a later cell at a different precision
01011: is rejected by :func:`Buffer.row <questdb.ingress.Buffer.row>`
01012: itself, with the buffer rewound to what it held before that row --
01013: the bad row is not left waiting for a flush.
01014:
01015: The pin goes with the buffer: a flush clears it and the next batch
01016: starts over. A precision the server's column does not have is
01017: therefore the server's to reject, at flush time.
01018: """
01019: cdef uint64_t _bits
01020: cdef uint8_t _precision
01021:
+01022: def __cinit__(self, bits, precision):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_7Geohash_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_7Geohash_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_bits = 0;
PyObject *__pyx_v_precision = 0;
#if !CYTHON_VECTORCALL_TPNEW
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
#if !CYTHON_VECTORCALL_TPNEW
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_bits_3,&__pyx_mstate_global->__pyx_n_u_precision,0};
PyObject* values[2] = {0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL_TPNEW(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 1022, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 2:
values[1] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1022, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1022, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(0, 1022, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, i); __PYX_ERR(0, 1022, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 2)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1022, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1022, __pyx_L3_error)
}
__pyx_v_bits = values[0];
__pyx_v_precision = values[1];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1022, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.Geohash.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_7Geohash___cinit__(((struct __pyx_obj_7questdb_7_client_Geohash *)__pyx_v_self), __pyx_v_bits, __pyx_v_precision);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_7Geohash___cinit__(struct __pyx_obj_7questdb_7_client_Geohash *__pyx_v_self, PyObject *__pyx_v_bits, PyObject *__pyx_v_precision) {
int __pyx_r;
__Pyx_INCREF(__pyx_v_bits);
__Pyx_INCREF(__pyx_v_precision);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Geohash.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_bits);
__Pyx_XDECREF(__pyx_v_precision);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01023: if not _is_integral_not_bool(bits):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_bits); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1023, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (unlikely(__pyx_t_2)) { /* … */ }
+01024: raise TypeError('bits must be a whole number.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_bits_must_be_a_whole_number};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1024, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 1024, __pyx_L1_error)
+01025: if not _is_integral_not_bool(precision):
__pyx_t_2 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_precision); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1025, __pyx_L1_error) __pyx_t_1 = (!__pyx_t_2); if (unlikely(__pyx_t_1)) { /* … */ }
+01026: raise TypeError('precision must be a whole number.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_precision_must_be_a_whole_number};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1026, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 1026, __pyx_L1_error)
+01027: bits = int(bits)
__pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_bits); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1027, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF_SET(__pyx_v_bits, __pyx_t_3); __pyx_t_3 = 0;
+01028: precision = int(precision)
__pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_precision); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1028, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF_SET(__pyx_v_precision, __pyx_t_3); __pyx_t_3 = 0;
+01029: if precision < 1 or precision > 60:
__pyx_t_2 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_precision, __pyx_mstate_global->__pyx_int_1, Py_LT); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1029, __pyx_L1_error) if (!__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L6_bool_binop_done; } __pyx_t_2 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_precision, __pyx_mstate_global->__pyx_int_60, Py_GT); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1029, __pyx_L1_error) __pyx_t_1 = __pyx_t_2; __pyx_L6_bool_binop_done:; if (unlikely(__pyx_t_1)) { /* … */ }
+01030: raise ValueError('precision must be in the range 1..60.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_precision_must_be_in_the_range_1};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1030, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 1030, __pyx_L1_error)
+01031: if bits < 0 or bits >= (1 << precision):
__pyx_t_2 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_bits, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1031, __pyx_L1_error) if (!__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L9_bool_binop_done; } __pyx_t_3 = PyNumber_Lshift(__pyx_mstate_global->__pyx_int_1, __pyx_v_precision); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1031, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_CompareBoolGe_object_object(__pyx_v_bits, __pyx_t_3, Py_GE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1031, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_1 = __pyx_t_2; __pyx_L9_bool_binop_done:; if (unlikely(__pyx_t_1)) { /* … */ }
+01032: raise ValueError('bits must be in the range 0 <= bits < 2**precision.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_bits_must_be_in_the_range_0_bits};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1032, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 1032, __pyx_L1_error)
+01033: self._bits = <uint64_t>bits
__pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_v_bits); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1033, __pyx_L1_error) __pyx_v_self->_bits = ((uint64_t)__pyx_t_6);
+01034: self._precision = <uint8_t>precision
__pyx_t_7 = __Pyx_PyLong_As_uint8_t(__pyx_v_precision); if (unlikely((__pyx_t_7 == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1034, __pyx_L1_error) __pyx_v_self->_precision = ((uint8_t)__pyx_t_7);
01035:
+01036: @classmethod
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_7Geohash_3from_string(PyObject *__pyx_v_cls, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_7Geohash_2from_string, "Construct a GEOHASH from one to twelve base32 characters."); static PyMethodDef __pyx_mdef_7questdb_7_client_7Geohash_3from_string = {"from_string", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7Geohash_3from_string, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7Geohash_2from_string}; static PyObject *__pyx_pw_7questdb_7_client_7Geohash_3from_string(PyObject *__pyx_v_cls, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_value = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("from_string (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_value,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 1036, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1036, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "from_string", 0) < (0)) __PYX_ERR(0, 1036, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("from_string", 1, 1, 1, i); __PYX_ERR(0, 1036, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1036, __pyx_L3_error) } __pyx_v_value = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("from_string", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1036, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Geohash.from_string", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_7Geohash_2from_string(((PyTypeObject*)__pyx_v_cls), __pyx_v_value); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_7Geohash_2from_string(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_value) { PyObject *__pyx_v_bits = NULL; PyObject *__pyx_v_char = NULL; PyObject *__pyx_v_digit = NULL; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_13); __Pyx_AddTraceback("questdb._client.Geohash.from_string", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_bits); __Pyx_XDECREF(__pyx_v_char); __Pyx_XDECREF(__pyx_v_digit); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_16 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7Geohash_3from_string, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Geohash_from_string, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[87])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1036, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Geohash, __pyx_mstate_global->__pyx_n_u_from_string, __pyx_t_16) < (0)) __PYX_ERR(0, 1036, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_GetNameInClass(__pyx_t_16, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Geohash, __pyx_mstate_global->__pyx_n_u_from_string); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1036, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_20 = __Pyx_Method_ClassMethod(__pyx_t_16); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1036, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Geohash, __pyx_mstate_global->__pyx_n_u_from_string, __pyx_t_20) < (0)) __PYX_ERR(0, 1036, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
01037: def from_string(cls, value):
01038: """Construct a GEOHASH from one to twelve base32 characters."""
+01039: if not isinstance(value, str):
__pyx_t_1 = PyUnicode_Check(__pyx_v_value);
__pyx_t_2 = (!__pyx_t_1);
if (unlikely(__pyx_t_2)) {
/* … */
}
+01040: raise TypeError('value must be a str.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_value_must_be_a_str};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1040, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 1040, __pyx_L1_error)
+01041: if len(value) < 1 or len(value) > 12:
__pyx_t_6 = PyObject_Length(__pyx_v_value); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1041, __pyx_L1_error) __pyx_t_1 = (__pyx_t_6 < 1); if (!__pyx_t_1) { } else { __pyx_t_2 = __pyx_t_1; goto __pyx_L5_bool_binop_done; } __pyx_t_6 = PyObject_Length(__pyx_v_value); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1041, __pyx_L1_error) __pyx_t_1 = (__pyx_t_6 > 12); __pyx_t_2 = __pyx_t_1; __pyx_L5_bool_binop_done:; if (unlikely(__pyx_t_2)) { /* … */ }
+01042: raise ValueError('geohash string must contain 1 to 12 characters.')
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_geohash_string_must_contain_1_to};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1042, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 1042, __pyx_L1_error)
+01043: bits = 0
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
__pyx_v_bits = __pyx_mstate_global->__pyx_int_0;
+01044: for char in value:
if (likely(PyList_CheckExact(__pyx_v_value)) || PyTuple_CheckExact(__pyx_v_value)) { __pyx_t_3 = __pyx_v_value; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0; __pyx_t_7 = NULL; } else { __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1044, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1044, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_7)) { if (likely(PyList_CheckExact(__pyx_t_3))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1044, __pyx_L1_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } __pyx_t_4 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_3, __pyx_t_6, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_6; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1044, __pyx_L1_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_6)); #else __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_6); #endif ++__pyx_t_6; } if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1044, __pyx_L1_error) } else { __pyx_t_4 = __pyx_t_7(__pyx_t_3); if (unlikely(!__pyx_t_4)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 1044, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_4); __Pyx_XDECREF_SET(__pyx_v_char, __pyx_t_4); __pyx_t_4 = 0; /* … */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
01045: digit = (
+01046: '0123456789bcdefghjkmnpqrstuvwxyz'.find(char.lower())
__pyx_t_9 = __pyx_v_char;
__Pyx_INCREF(__pyx_t_9);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL};
__pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_lower, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1046, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
}
__pyx_t_10 = PyUnicode_Find(__pyx_mstate_global->__pyx_kp_u_0123456789bcdefghjkmnpqrstuvwxyz, __pyx_t_8, 0, PY_SSIZE_T_MAX, 1); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-2))) __PYX_ERR(0, 1046, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_8 = PyLong_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1046, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
if (__Pyx_PyInt_FromNumber(&__pyx_t_8, NULL, 0) < (0)) __PYX_ERR(0, 1046, __pyx_L1_error)
__pyx_t_4 = __pyx_t_8;
__pyx_t_8 = 0;
} else {
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_neg_1);
__pyx_t_4 = __pyx_mstate_global->__pyx_int_neg_1;
}
__Pyx_XDECREF_SET(__pyx_v_digit, ((PyObject*)__pyx_t_4));
__pyx_t_4 = 0;
+01047: if char.isascii() else -1)
__pyx_t_9 = __pyx_v_char;
__Pyx_INCREF(__pyx_t_9);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL};
__pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_isascii, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1047, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
}
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1047, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (__pyx_t_2) {
+01048: if digit < 0:
__pyx_t_2 = __Pyx_PyObject_CompareBoolLt_int_int(__pyx_v_digit, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1048, __pyx_L1_error) if (unlikely(__pyx_t_2)) { /* … */ }
+01049: raise ValueError(
__pyx_t_8 = NULL;
+01050: f'invalid geohash character {char!r}; expected the base32 '
__pyx_t_9 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_char), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1050, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_11[0] = __pyx_mstate_global->__pyx_kp_u_invalid_geohash_character; __pyx_t_11[1] = __pyx_t_9; __pyx_t_11[2] = __pyx_mstate_global->__pyx_kp_u_expected_the_base32_alphabet_01; __pyx_t_10 = 90; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11[1]); #endif __pyx_t_12 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_12 |= __Pyx_PyUnicode_KIND_04(__pyx_t_11[1]); #endif __pyx_t_13 = __Pyx_PyUnicode_Join(__pyx_t_11, 3, __pyx_t_10, __pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1050, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_5 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_13}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1049, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 1049, __pyx_L1_error)
01051: 'alphabet 0123456789bcdefghjkmnpqrstuvwxyz.')
+01052: bits = bits * 32 + digit
__pyx_t_4 = __Pyx_PyLong_MultiplyObjC(__pyx_v_bits, __pyx_mstate_global->__pyx_int_32, 32, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1052, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_13 = __Pyx_PyNumber_Add_int_int(__pyx_t_4, __pyx_v_digit); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1052, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF_SET(__pyx_v_bits, ((PyObject*)__pyx_t_13)); __pyx_t_13 = 0;
+01053: return cls(bits, 5 * len(value))
__pyx_t_13 = NULL; __pyx_t_6 = PyObject_Length(__pyx_v_value); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1053, __pyx_L1_error) __pyx_t_4 = PyLong_FromSsize_t((5 * __pyx_t_6)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1053, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = 1; { PyObject *__pyx_callargs[3] = {__pyx_t_13, __pyx_v_bits, __pyx_t_4}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1053, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
01054:
+01055: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7Geohash_4bits_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7Geohash_4bits_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_7Geohash_4bits___get__(((struct __pyx_obj_7questdb_7_client_Geohash *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_7Geohash_4bits___get__(struct __pyx_obj_7questdb_7_client_Geohash *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.Geohash.bits.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01056: def bits(self) -> int:
01057: """The packed geohash bits."""
+01058: return self._bits
__pyx_t_1 = __Pyx_PyLong_From_uint64_t(__pyx_v_self->_bits); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1058, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
01059:
+01060: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7Geohash_9precision_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7Geohash_9precision_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_7Geohash_9precision___get__(((struct __pyx_obj_7questdb_7_client_Geohash *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_7Geohash_9precision___get__(struct __pyx_obj_7questdb_7_client_Geohash *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.Geohash.precision.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01061: def precision(self) -> int:
01062: """The precision in bits."""
+01063: return self._precision
__pyx_t_1 = __Pyx_PyLong_From_uint8_t(__pyx_v_self->_precision); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1063, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
01064:
+01065: def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7Geohash_5__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7Geohash_5__repr__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_7Geohash_4__repr__(((struct __pyx_obj_7questdb_7_client_Geohash *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_7Geohash_4__repr__(struct __pyx_obj_7questdb_7_client_Geohash *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_AddTraceback("questdb._client.Geohash.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01066: return f'Geohash({self._bits}, {self._precision})'
__pyx_t_1 = __Pyx_PyUnicode_From_uint64_t(__pyx_v_self->_bits, 0, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1066, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyUnicode_From_uint8_t(__pyx_v_self->_precision, 0, ' ', 'd'); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1066, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3[0] = __pyx_mstate_global->__pyx_kp_u_Geohash; __pyx_t_3[1] = __pyx_t_1; __pyx_t_3[2] = __pyx_mstate_global->__pyx_kp_u__26; __pyx_t_3[3] = __pyx_t_2; __pyx_t_3[4] = __pyx_mstate_global->__pyx_kp_u__11; __pyx_t_4 = 11; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3[3]); #endif __pyx_t_5 = 0; __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_3, 5, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1066, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_6; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_6 = 0; goto __pyx_L0;
01067:
01068:
01069: # The two value unions the `row()` family accepts, defined here as well
01070: # as in the stub. A name carried only by `_client.pyi` type-checks and
01071: # then `ImportError`s at runtime, so the definition lives in both.
01072: # Not exported: they name a parameter type, they are not part of the
01073: # ingestion surface.
+01074: TransactionColumnValue = Union[
__Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_Union); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1074, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); /* … */ { PyObject* __pyx_temp[10] = {Py_None, ((PyObject *)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool), ((PyObject *)(&PyLong_Type)), ((PyObject *)(&PyFloat_Type)), ((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros), ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos), __pyx_t_19, ((PyObject *)__pyx_mstate_global->__pyx_ptype_5numpy_ndarray), __pyx_t_16}; __pyx_t_17 = __Pyx_PyTuple_FromArray(__pyx_temp, 10); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1074, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); } __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = __Pyx_PyObject_GetItem(__pyx_t_20, __pyx_t_17); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1074, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_TransactionColumnValue, __pyx_t_16) < (0)) __PYX_ERR(0, 1074, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
01075: None, bool, int, float, str, TimestampMicros, TimestampNanos,
+01076: datetime.datetime, cnp.ndarray, Decimal]
__Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1076, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 1076, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Decimal); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1076, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16);
+01077: RowColumnValue = Union[
__Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Union); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1077, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); /* … */ { PyObject* __pyx_temp[19] = {Py_None, ((PyObject *)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool), ((PyObject *)(&PyLong_Type)), ((PyObject *)(&PyFloat_Type)), ((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros), ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos), __pyx_t_20, ((PyObject *)__pyx_mstate_global->__pyx_ptype_5numpy_ndarray), __pyx_t_17, __pyx_t_4, __pyx_t_25, ((PyObject *)(&PyBytes_Type)), ((PyObject *)(&PyByteArray_Type)), ((PyObject *)(&PyMemoryView_Type)), ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Char), ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis), ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Long256), ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Geohash)}; __pyx_t_19 = __Pyx_PyTuple_FromArray(__pyx_temp, 19); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 1077, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); } __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __pyx_t_25 = __Pyx_PyObject_GetItem(__pyx_t_16, __pyx_t_19); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1077, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_RowColumnValue, __pyx_t_25) < (0)) __PYX_ERR(0, 1077, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
01078: None, bool, int, float, str, TimestampMicros, TimestampNanos,
+01079: datetime.datetime, cnp.ndarray, Decimal, uuid.UUID,
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1079, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1079, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_Decimal); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1079, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_uuid); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 1079, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_UUID); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1079, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+01080: ipaddress.IPv4Address, bytes, bytearray, memoryview, Char, DateMillis,
__Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_ipaddress); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 1080, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_25 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_IPv4Address); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1080, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
01081: Long256, Geohash]
01082: # What `schema_overrides` accepts: a kind on its own, or a kind and its
01083: # argument. Only 'geohash' takes one, the precision in bits.
+01084: SchemaOverrides = Dict[str, Union[str, Tuple[str, SupportsIndex]]]
__Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_Dict); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1084, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_Union); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 1084, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Tuple); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1084, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_SupportsIndex); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1084, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); { PyObject* __pyx_temp[2] = {((PyObject *)(&PyUnicode_Type)), __pyx_t_4}; __pyx_t_17 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1084, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_16, __pyx_t_17); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1084, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; { PyObject* __pyx_temp[2] = {((PyObject *)(&PyUnicode_Type)), __pyx_t_4}; __pyx_t_17 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1084, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_19, __pyx_t_17); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1084, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; { PyObject* __pyx_temp[2] = {((PyObject *)(&PyUnicode_Type)), __pyx_t_4}; __pyx_t_17 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1084, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_25, __pyx_t_17); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1084, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_SchemaOverrides, __pyx_t_4) < (0)) __PYX_ERR(0, 1084, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
01085:
01086:
+01087: cdef class QuestDB
struct __pyx_obj_7questdb_7_client_QuestDB {
PyObject_HEAD
struct __pyx_vtabstruct_7questdb_7_client_QuestDB *__pyx_vtab;
struct questdb_db *_db;
PyObject *_conf_str;
PyObject *_state_cond;
size_t _lease_uses;
size_t _call_uses;
int _closing;
int _close_running;
PyObject *_close_deadline;
PyObject *_thread_owner_token;
PyObject *_dispatch_context;
PyObject *_connection_listener;
PyObject *_error_handler;
size_t _cb_refs_key;
struct __pyx_t_7questdb_7_client_auto_flush_mode_t _auto_flush_mode;
int _auto_flush_bytes_dynamic;
};
+01088: cdef class Sender
struct __pyx_obj_7questdb_7_client_Sender {
PyObject_HEAD
struct __pyx_vtabstruct_7questdb_7_client_Sender *__pyx_vtab;
PyObject *__weakref__;
enum line_sender_protocol _c_protocol;
struct line_sender_opts *_opts;
struct line_sender *_impl;
struct __pyx_obj_7questdb_7_client_Buffer *_buffer;
PyObject *_thread_owner_token;
PyObject *_dispatch_context;
PyObject *_error_handler;
PyObject *_connection_listener;
struct __pyx_t_7questdb_7_client_auto_flush_mode_t _auto_flush_mode;
int _auto_flush_bytes_dynamic;
int64_t *_last_flush_ms;
size_t _init_buf_size;
int _in_txn;
int64_t _slot_id;
struct line_sender_opts *_qwp_ws_opts;
size_t _cb_refs_key;
};
+01089: cdef class PooledSender
struct __pyx_obj_7questdb_7_client_PooledSender {
PyObject_HEAD
struct __pyx_vtabstruct_7questdb_7_client_PooledSender *__pyx_vtab;
struct qwp_sender *_qwp;
struct questdb_db *_db;
struct __pyx_obj_7questdb_7_client_QuestDB *_handle;
struct __pyx_obj_7questdb_7_client_Buffer *_buffer;
PyObject *_lock;
int64_t _batch_started_ms;
int64_t _call_depth;
};
+01090: cdef class Buffer
struct __pyx_obj_7questdb_7_client_Buffer {
PyObject_HEAD
struct __pyx_vtabstruct_7questdb_7_client_Buffer *__pyx_vtab;
struct line_sender_buffer *_impl;
struct qdb_pystr_buf *_b;
size_t _init_buf_size;
size_t _max_name_len;
int _qwp;
int _marker_set;
int _row_depth;
PyObject *_row_complete_sender;
};
01091:
01092:
+01093: cdef void_int may_flush_on_row_complete(Buffer buffer, Sender sender) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_may_flush_on_row_complete(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer, struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.may_flush_on_row_complete", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01094: if should_auto_flush(
__pyx_t_1 = __pyx_f_7questdb_7_client_should_auto_flush((&__pyx_v_sender->_auto_flush_mode), __pyx_v_buffer->_impl, (__pyx_v_sender->_last_flush_ms[0])); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1094, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
01095: &sender._auto_flush_mode,
01096: buffer._impl,
01097: sender._last_flush_ms[0]):
+01098: sender.flush(buffer)
__pyx_t_3.__pyx_n = 1;
__pyx_t_3.buffer = __pyx_v_buffer;
__pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_sender->__pyx_vtab)->flush(__pyx_v_sender, 0, &__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1098, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
01099:
01100:
+01101: cdef bint _is_tcp_protocol(line_sender_protocol protocol):
static int __pyx_f_7questdb_7_client__is_tcp_protocol(enum line_sender_protocol __pyx_v_protocol) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
01102: return (
+01103: (protocol == line_sender_protocol_tcp) or
switch (__pyx_v_protocol) {
case line_sender_protocol_tcp:
case line_sender_protocol_tcps:
/* … */
__pyx_t_1 = 1;
/* … */
break;
default:
__pyx_t_1 = 0;
break;
}
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
01104: (protocol == line_sender_protocol_tcps))
01105:
01106:
+01107: cdef bint _is_http_protocol(line_sender_protocol protocol):
static int __pyx_f_7questdb_7_client__is_http_protocol(enum line_sender_protocol __pyx_v_protocol) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
01108: return (
+01109: (protocol == line_sender_protocol_http) or
switch (__pyx_v_protocol) {
case line_sender_protocol_http:
case line_sender_protocol_https:
/* … */
__pyx_t_1 = 1;
/* … */
break;
default:
__pyx_t_1 = 0;
break;
}
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
01110: (protocol == line_sender_protocol_https))
01111:
01112:
+01113: cdef bint _is_qwp_udp_protocol(line_sender_protocol protocol):
static int __pyx_f_7questdb_7_client__is_qwp_udp_protocol(enum line_sender_protocol __pyx_v_protocol) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
+01114: return protocol == line_sender_protocol_udp
{
__pyx_r = (__pyx_v_protocol == line_sender_protocol_udp);
}
goto __pyx_L0;
01115:
01116:
+01117: cdef bint _is_qwp_ws_protocol(line_sender_protocol protocol):
static int __pyx_f_7questdb_7_client__is_qwp_ws_protocol(enum line_sender_protocol __pyx_v_protocol) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
01118: return (
+01119: (protocol == line_sender_protocol_ws) or
switch (__pyx_v_protocol) {
case line_sender_protocol_ws:
case line_sender_protocol_wss:
/* … */
__pyx_t_1 = 1;
/* … */
break;
default:
__pyx_t_1 = 0;
break;
}
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
01120: (protocol == line_sender_protocol_wss))
01121:
01122:
+01123: cdef class SenderTransaction:
struct __pyx_obj_7questdb_7_client_SenderTransaction {
PyObject_HEAD
struct __pyx_vtabstruct_7questdb_7_client_SenderTransaction *__pyx_vtab;
struct __pyx_obj_7questdb_7_client_Sender *_sender;
PyObject *_table_name;
int _complete;
int _committing;
};
/* … */
struct __pyx_vtabstruct_7questdb_7_client_SenderTransaction {
__pyx_t_7questdb_7_client_void_int (*_check_usable)(struct __pyx_obj_7questdb_7_client_SenderTransaction *, PyObject *);
};
static struct __pyx_vtabstruct_7questdb_7_client_SenderTransaction *__pyx_vtabptr_7questdb_7_client_SenderTransaction;
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_17SenderTransaction__check_usable(struct __pyx_obj_7questdb_7_client_SenderTransaction *, PyObject *);
01124: """
01125: A transaction for a specific table.
01126:
01127: Transactions are only supported with ILP/HTTP.
01128:
01129: The sender API can only operate on one transaction at a time.
01130:
01131: To create a transaction:
01132:
01133: .. code-block:: python
01134:
01135: with sender.transaction('table_name') as txn:
01136: txn.row(..)
01137: txn.dataframe(..)
01138: """
01139: cdef Sender _sender
01140: cdef str _table_name
01141: cdef bint _complete
01142: cdef bint _committing
01143:
+01144: def __cinit__(self, Sender sender, str table_name):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_17SenderTransaction_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_17SenderTransaction_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender = 0;
PyObject *__pyx_v_table_name = 0;
#if !CYTHON_VECTORCALL_TPNEW
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
#if !CYTHON_VECTORCALL_TPNEW
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_sender,&__pyx_mstate_global->__pyx_n_u_table_name,0};
PyObject* values[2] = {0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL_TPNEW(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 1144, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 2:
values[1] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1144, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1144, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(0, 1144, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, i); __PYX_ERR(0, 1144, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 2)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1144, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1144, __pyx_L3_error)
}
__pyx_v_sender = ((struct __pyx_obj_7questdb_7_client_Sender *)values[0]);
__pyx_v_table_name = ((PyObject*)values[1]);
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1144, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.SenderTransaction.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sender), __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, 1, "sender", 0))) __PYX_ERR(0, 1144, __pyx_L1_error)
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 1, "table_name", 1))) __PYX_ERR(0, 1144, __pyx_L1_error)
__pyx_r = __pyx_pf_7questdb_7_client_17SenderTransaction___cinit__(((struct __pyx_obj_7questdb_7_client_SenderTransaction *)__pyx_v_self), __pyx_v_sender, __pyx_v_table_name);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = -1;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
goto __pyx_L7_cleaned_up;
__pyx_L0:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__pyx_L7_cleaned_up:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_17SenderTransaction___cinit__(struct __pyx_obj_7questdb_7_client_SenderTransaction *__pyx_v_self, struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender, PyObject *__pyx_v_table_name) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.SenderTransaction.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01145: if not _is_http_protocol(sender._c_protocol):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_http_protocol(__pyx_v_sender->_c_protocol); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1145, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (unlikely(__pyx_t_2)) { /* … */ }
+01146: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1146, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+01147: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1147, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1147, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Transactions_are_only_supported}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1146, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 1146, __pyx_L1_error)
01148: 'Transactions are only supported for ILP/HTTP.')
+01149: self._sender = sender
__Pyx_INCREF((PyObject *)__pyx_v_sender); __Pyx_GIVEREF((PyObject *)__pyx_v_sender); __Pyx_GOTREF((PyObject *)__pyx_v_self->_sender); __Pyx_DECREF((PyObject *)__pyx_v_self->_sender); __pyx_v_self->_sender = __pyx_v_sender;
+01150: self._table_name = table_name
__Pyx_INCREF(__pyx_v_table_name); __Pyx_GIVEREF(__pyx_v_table_name); __Pyx_GOTREF(__pyx_v_self->_table_name); __Pyx_DECREF(__pyx_v_self->_table_name); __pyx_v_self->_table_name = __pyx_v_table_name;
+01151: self._complete = False
__pyx_v_self->_complete = 0;
+01152: self._committing = False
__pyx_v_self->_committing = 0;
01153:
+01154: cdef inline void_int _check_usable(self, str method) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_17SenderTransaction__check_usable(struct __pyx_obj_7questdb_7_client_SenderTransaction *__pyx_v_self, PyObject *__pyx_v_method) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("questdb._client.SenderTransaction._check_usable", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01155: """Keep completion an absorbing state for the whole object."""
+01156: if self._complete:
if (unlikely(__pyx_v_self->_complete)) {
/* … */
}
+01157: raise QuestDBError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1157, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
+01158: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1158, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1158, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+01159: f"Transaction already completed, can't call {method}().")
__pyx_t_4 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1159, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6[0] = __pyx_mstate_global->__pyx_kp_u_Transaction_already_completed_ca; __pyx_t_6[1] = __pyx_t_4; __pyx_t_6[2] = __pyx_mstate_global->__pyx_kp_u__27; __pyx_t_7 = 45; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6[1]); #endif __pyx_t_8 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_8 |= __Pyx_PyUnicode_KIND_04(__pyx_t_6[1]); #endif __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_6, 3, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1159, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_5, __pyx_t_9}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1157, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 1157, __pyx_L1_error)
+01160: if self._committing:
if (unlikely(__pyx_v_self->_committing)) {
/* … */
}
+01161: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1161, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
+01162: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1162, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1162, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+01163: f"Transaction commit is already in progress, can't call "
__pyx_t_7 = 57;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6[1]);
#endif
__pyx_t_8 = 0;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_8 |= __Pyx_PyUnicode_KIND_04(__pyx_t_6[1]);
#endif
__pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_6, 3, __pyx_t_7, __pyx_t_8);
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1163, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_t_10 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_9))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_9);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
__pyx_t_10 = 0;
}
#endif
{
PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_2, __pyx_t_4};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1161, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 1161, __pyx_L1_error)
+01164: f"{method}().")
__pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1164, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6[0] = __pyx_mstate_global->__pyx_kp_u_Transaction_commit_is_already_in; __pyx_t_6[1] = __pyx_t_5; __pyx_t_6[2] = __pyx_mstate_global->__pyx_kp_u__27;
01165:
+01166: def __enter__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_3__enter__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_17SenderTransaction_3__enter__ = {"__enter__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_17SenderTransaction_3__enter__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_3__enter__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
#if !CYTHON_VECTORCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__enter__ (wrapper)", 0);
#if !CYTHON_VECTORCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__enter__", 1, 0, 0, __pyx_nargs); return NULL; }
const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) return NULL;
if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__enter__", __pyx_kwds); return NULL;}
__pyx_r = __pyx_pf_7questdb_7_client_17SenderTransaction_2__enter__(((struct __pyx_obj_7questdb_7_client_SenderTransaction *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_17SenderTransaction_2__enter__(struct __pyx_obj_7questdb_7_client_SenderTransaction *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_AddTraceback("questdb._client.SenderTransaction.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_17SenderTransaction_3__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SenderTransaction___enter, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[90])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1166, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
#endif
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_SenderTransaction, __pyx_mstate_global->__pyx_n_u_enter, __pyx_t_4) < (0)) __PYX_ERR(0, 1166, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+01167: self._check_usable('__enter__')
__pyx_t_1 = __pyx_f_7questdb_7_client_17SenderTransaction__check_usable(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1167, __pyx_L1_error)
+01168: if self._sender._in_txn:
if (unlikely(__pyx_v_self->_sender->_in_txn)) {
/* … */
}
+01169: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1169, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+01170: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1170, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1170, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Already_inside_a_transaction_can}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1169, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 1169, __pyx_L1_error)
01171: 'Already inside a transaction, can\'t start another.')
01172: # A transaction requires a clear buffer, which a `dataframe()`
01173: # part-way through its plan build still has -- it has written
01174: # nothing yet. A transaction opened there would take in rows the
01175: # caller wrote outside any transaction, and its rollback would
01176: # discard them.
+01177: if self._sender._buffer is not None:
__pyx_t_8 = (((PyObject *)__pyx_v_self->_sender->_buffer) != Py_None);
if (__pyx_t_8) {
/* … */
}
+01178: self._sender._buffer._check_not_in_row('__enter__')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_sender->_buffer, __pyx_mstate_global->__pyx_n_u_enter, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1178, __pyx_L1_error)
+01179: if self._sender._buffer is not None and len(self._sender._buffer):
__pyx_t_9 = (((PyObject *)__pyx_v_self->_sender->_buffer) != Py_None);
if (__pyx_t_9) {
} else {
__pyx_t_8 = __pyx_t_9;
goto __pyx_L6_bool_binop_done;
}
__pyx_t_2 = ((PyObject *)__pyx_v_self->_sender->_buffer);
__Pyx_INCREF(__pyx_t_2);
__pyx_t_10 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1179, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_9 = (__pyx_t_10 != 0);
__pyx_t_8 = __pyx_t_9;
__pyx_L6_bool_binop_done:;
if (__pyx_t_8) {
/* … */
}
+01180: if self._sender._auto_flush_mode.enabled:
if (likely(__pyx_v_self->_sender->_auto_flush_mode.enabled)) {
/* … */
goto __pyx_L8;
}
+01181: self._sender.flush()
__pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->_sender->__pyx_vtab)->flush(__pyx_v_self->_sender, 0, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1181, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
01182: else:
+01183: raise QuestDBError(
/*else*/ {
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1183, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
+01184: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Sender_buffer_must_be_clear_when}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1183, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 1183, __pyx_L1_error) } __pyx_L8:;
01185: 'Sender buffer must be clear when starting a ' +
01186: 'transaction. You must call `.flush()` before this call.')
+01187: self._sender._in_txn = True
__pyx_v_self->_sender->_in_txn = 1;
+01188: return self
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_self);
__pyx_r = ((PyObject *)__pyx_v_self);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
01189:
+01190: def __exit__(self, exc_type, exc_val, exc_tb):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_5__exit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_17SenderTransaction_5__exit__ = {"__exit__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_17SenderTransaction_5__exit__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_5__exit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_exc_type = 0;
CYTHON_UNUSED PyObject *__pyx_v_exc_val = 0;
CYTHON_UNUSED PyObject *__pyx_v_exc_tb = 0;
#if !CYTHON_VECTORCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__exit__ (wrapper)", 0);
#if !CYTHON_VECTORCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_exc_type,&__pyx_mstate_global->__pyx_n_u_exc_val,&__pyx_mstate_global->__pyx_n_u_exc_tb,0};
PyObject* values[3] = {0,0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 1190, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1190, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1190, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1190, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__exit__", 0) < (0)) __PYX_ERR(0, 1190, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, i); __PYX_ERR(0, 1190, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 3)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1190, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1190, __pyx_L3_error)
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1190, __pyx_L3_error)
}
__pyx_v_exc_type = values[0];
__pyx_v_exc_val = values[1];
__pyx_v_exc_tb = values[2];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 1190, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.SenderTransaction.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_17SenderTransaction_4__exit__(((struct __pyx_obj_7questdb_7_client_SenderTransaction *)__pyx_v_self), __pyx_v_exc_type, __pyx_v_exc_val, __pyx_v_exc_tb);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_17SenderTransaction_4__exit__(struct __pyx_obj_7questdb_7_client_SenderTransaction *__pyx_v_self, PyObject *__pyx_v_exc_type, CYTHON_UNUSED PyObject *__pyx_v_exc_val, CYTHON_UNUSED PyObject *__pyx_v_exc_tb) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.SenderTransaction.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_17SenderTransaction_5__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SenderTransaction___exit, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[91])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1190, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
#endif
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_SenderTransaction, __pyx_mstate_global->__pyx_n_u_exit, __pyx_t_4) < (0)) __PYX_ERR(0, 1190, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+01191: if exc_type is not None:
__pyx_t_1 = (__pyx_v_exc_type != Py_None);
if (__pyx_t_1) {
/* … */
}
+01192: if not self._complete:
__pyx_t_1 = (!__pyx_v_self->_complete);
if (__pyx_t_1) {
/* … */
}
+01193: self.rollback()
__pyx_t_3 = ((PyObject *)__pyx_v_self);
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_rollback, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1193, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+01194: return False
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(Py_False);
__pyx_r = Py_False;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
01195: else:
+01196: if not self._complete:
/*else*/ {
__pyx_t_1 = (!__pyx_v_self->_complete);
if (__pyx_t_1) {
/* … */
}
+01197: self.commit()
__pyx_t_3 = ((PyObject *)__pyx_v_self);
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_commit, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1197, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+01198: return True
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(Py_True);
__pyx_r = Py_True;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
}
01199:
+01200: def row(
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_7row(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_17SenderTransaction_6row, "\n Write a row for the table in the transaction.\n\n The table name is taken from the transaction.\n\n **Note**: Support for NumPy arrays (``numpy.array``) requires QuestDB server version 9.0.0 or higher.\n\n UUID, IPV4, BINARY, CHAR, DATE, LONG256, and GEOHASH columns are\n QWP-only and are not supported by ``SenderTransaction``, which is\n ILP/HTTP-only by construction.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_17SenderTransaction_7row = {"row", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_17SenderTransaction_7row, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_17SenderTransaction_6row}; static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_7row(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_symbols = 0; PyObject *__pyx_v_columns = 0; PyObject *__pyx_v_at = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("row (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_at,&__pyx_mstate_global->__pyx_n_u_symbols,&__pyx_mstate_global->__pyx_n_u_columns,0}; PyObject* values[3] = {0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 1200, __pyx_L3_error) if (likely(__pyx_kwds_len > 0)) { switch (__pyx_nargs) { case 0: break; default: goto __pyx_L5_argtuple_error; } if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, 0, __pyx_kwds_len, "row", 0) < (0)) __PYX_ERR(0, 1200, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_17SenderTransaction_6row(struct __pyx_obj_7questdb_7_client_SenderTransaction *__pyx_v_self, PyObject *__pyx_v_symbols, PyObject *__pyx_v_columns, PyObject *__pyx_v_at) { struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("questdb._client.SenderTransaction.row", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_buf); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1200, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); /* … */ __pyx_t_17 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1200, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Optional_str) < (0)) __PYX_ERR(0, 1200, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_columns, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Union_None_boo) < (0)) __PYX_ERR(0, 1200, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_Timest) < (0)) __PYX_ERR(0, 1200, __pyx_L1_error) __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_17SenderTransaction_7row, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SenderTransaction_row, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[92])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1200, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25); #endif __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_25, __pyx_t_4); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_25, __pyx_t_17); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_SenderTransaction, __pyx_mstate_global->__pyx_n_u_row_2, __pyx_t_25) < (0)) __PYX_ERR(0, 1200, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
01201: self,
01202: *,
+01203: symbols: Optional[Dict[str, Optional[str]]]=None,
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_symbols, Py_None) < (0)) __PYX_ERR(0, 1200, __pyx_L1_error)
01204: columns: Optional[Dict[
01205: str,
01206: Union[None, bool, int, float, str, TimestampMicros, TimestampNanos, datetime.datetime, numpy.ndarray, Decimal]]
+01207: ]=None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); for (Py_ssize_t i = 0; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("row", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 1200, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 0)) { goto __pyx_L5_argtuple_error; } else { __Pyx_RaiseKeywordRequired("row", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 1200, __pyx_L3_error) } __pyx_v_at = values[0]; __pyx_v_symbols = ((PyObject*)values[1]); __pyx_v_columns = ((PyObject*)values[2]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("row", 1, 0, 0, __pyx_nargs); __PYX_ERR(0, 1200, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.SenderTransaction.row", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_symbols), (&PyDict_Type), 1, "symbols", 2))) __PYX_ERR(0, 1203, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_columns), (&PyDict_Type), 1, "columns", 2))) __PYX_ERR(0, 1204, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_17SenderTransaction_6row(((struct __pyx_obj_7questdb_7_client_SenderTransaction *)__pyx_v_self), __pyx_v_symbols, __pyx_v_columns, __pyx_v_at); /* … */ if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_columns, Py_None) < (0)) __PYX_ERR(0, 1200, __pyx_L1_error)
01208: at: Union[ServerTimestampType, TimestampNanos, datetime.datetime]):
01209: """
01210: Write a row for the table in the transaction.
01211:
01212: The table name is taken from the transaction.
01213:
01214: **Note**: Support for NumPy arrays (``numpy.array``) requires QuestDB server version 9.0.0 or higher.
01215:
01216: UUID, IPV4, BINARY, CHAR, DATE, LONG256, and GEOHASH columns are
01217: QWP-only and are not supported by ``SenderTransaction``, which is
01218: ILP/HTTP-only by construction.
01219: """
01220: cdef Buffer buf
+01221: self._check_usable('row')
__pyx_t_1 = __pyx_f_7questdb_7_client_17SenderTransaction__check_usable(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_row_2); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1221, __pyx_L1_error)
+01222: if at is None:
__pyx_t_2 = (__pyx_v_at == Py_None);
if (unlikely(__pyx_t_2)) {
/* … */
}
+01223: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1223, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+01224: QuestDBErrorCode.InvalidTimestamp,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1224, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1224, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_at_must_be_of_type_TimestampNan}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1223, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 1223, __pyx_L1_error)
01225: "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
01226: )
01227:
+01228: if self._sender._buffer is None:
__pyx_t_2 = (((PyObject *)__pyx_v_self->_sender->_buffer) == Py_None);
if (unlikely(__pyx_t_2)) {
/* … */
}
+01229: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1229, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
+01230: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_row_can_t_be_called_Sender_is_cl}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 1229, __pyx_L1_error)
01231: "row() can\'t be called: Sender is closed."
01232: )
01233:
01234: # The sender holds the only reference to the buffer, and a column
01235: # value whose conversion runs Python code can reach back in here.
01236: # A strong local reference keeps the buffer alive for the whole
01237: # row, including its cleanup.
+01238: buf = self._sender._buffer
__pyx_t_3 = ((PyObject *)__pyx_v_self->_sender->_buffer);
__Pyx_INCREF(__pyx_t_3);
__pyx_v_buf = ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_3);
__pyx_t_3 = 0;
+01239: buf._row(
__pyx_t_9.__pyx_n = 3; __pyx_t_9.symbols = ((PyObject*)__pyx_v_symbols); __pyx_t_9.columns = __pyx_v_columns; __pyx_t_9.at = __pyx_v_at; __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_Buffer *)__pyx_v_buf->__pyx_vtab)->_row(__pyx_v_buf, 0, ((PyObject*)__pyx_t_3), &__pyx_t_9); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1239, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
01240: False, # allow_auto_flush
+01241: self._table_name,
__pyx_t_3 = __pyx_v_self->_table_name;
__Pyx_INCREF(__pyx_t_3);
01242: symbols=symbols,
01243: columns=columns,
01244: at=at)
+01245: return self
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_self);
__pyx_r = ((PyObject *)__pyx_v_self);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
01246:
+01247: def dataframe(
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_9dataframe(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_17SenderTransaction_8dataframe, "\n Write a dataframe for the table in the transaction.\n\n The table name is taken from the transaction.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_17SenderTransaction_9dataframe = {"dataframe", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_17SenderTransaction_9dataframe, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_17SenderTransaction_8dataframe}; static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_9dataframe(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_df = 0; PyObject *__pyx_v_symbols = 0; PyObject *__pyx_v_at = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("dataframe (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_df_2,&__pyx_mstate_global->__pyx_n_u_at,&__pyx_mstate_global->__pyx_n_u_symbols,0}; PyObject* values[3] = {0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 1247, __pyx_L3_error) if (likely(__pyx_kwds_len > 0)) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1247, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "dataframe", 0) < (0)) __PYX_ERR(0, 1247, __pyx_L3_error) if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_n_u_auto)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, i); __PYX_ERR(0, 1247, __pyx_L3_error) } } for (Py_ssize_t i = 1; i < 2; i++) { if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("dataframe", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 1247, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { __Pyx_RaiseKeywordRequired("dataframe", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 1247, __pyx_L3_error) } __pyx_v_df = values[0]; __pyx_v_at = values[1]; __pyx_v_symbols = values[2]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1247, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.SenderTransaction.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_17SenderTransaction_8dataframe(((struct __pyx_obj_7questdb_7_client_SenderTransaction *)__pyx_v_self), __pyx_v_df, __pyx_v_symbols, __pyx_v_at); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_17SenderTransaction_8dataframe(struct __pyx_obj_7questdb_7_client_SenderTransaction *__pyx_v_self, PyObject *__pyx_v_df, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("questdb._client.SenderTransaction.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1247, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_n_u_auto) < (0)) __PYX_ERR(0, 1247, __pyx_L1_error) __pyx_t_17 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1247, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Union_str_bool_List_int_List_str) < (0)) __PYX_ERR(0, 1247, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_int_st) < (0)) __PYX_ERR(0, 1247, __pyx_L1_error) __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_17SenderTransaction_9dataframe, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SenderTransaction_dataframe, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[93])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1247, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4); #endif __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_4, __pyx_t_25); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_17); __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_SenderTransaction, __pyx_mstate_global->__pyx_n_u_dataframe, __pyx_t_4) < (0)) __PYX_ERR(0, 1247, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
01248: self,
01249: df, # : pd.DataFrame
01250: *,
01251: symbols: Union[str, bool, List[int], List[str]] = 'auto',
01252: at: Union[ServerTimestampType, int, str, TimestampNanos, datetime.datetime]):
01253: """
01254: Write a dataframe for the table in the transaction.
01255:
01256: The table name is taken from the transaction.
01257: """
+01258: self._check_usable('dataframe')
__pyx_t_1 = __pyx_f_7questdb_7_client_17SenderTransaction__check_usable(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_dataframe); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1258, __pyx_L1_error)
+01259: if at is None:
__pyx_t_2 = (__pyx_v_at == Py_None);
if (unlikely(__pyx_t_2)) {
/* … */
}
+01260: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1260, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+01261: QuestDBErrorCode.InvalidTimestamp,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1261, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1261, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_at_must_be_of_type_TimestampNan}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1260, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 1260, __pyx_L1_error)
01262: "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
01263: )
+01264: if self._sender._buffer is None:
__pyx_t_2 = (((PyObject *)__pyx_v_self->_sender->_buffer) == Py_None);
if (unlikely(__pyx_t_2)) {
/* … */
}
+01265: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1265, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
+01266: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1266, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1266, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_dataframe_can_t_be_called_Sender}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1265, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 1265, __pyx_L1_error)
01267: "dataframe() can\'t be called: Sender is closed."
01268: )
+01269: _dataframe(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_3), __pyx_f_7questdb_7_client_auto_flush_blank(), __pyx_v_self->_sender->_buffer->_impl, __pyx_v_df, __pyx_t_7, Py_None, __pyx_v_symbols, __pyx_v_at); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1269, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+01270: self._sender._buffer,
__pyx_t_3 = ((PyObject *)__pyx_v_self->_sender->_buffer);
__Pyx_INCREF(__pyx_t_3);
01271: auto_flush_blank(),
01272: self._sender._buffer._impl,
01273: df,
+01274: self._table_name,
__pyx_t_7 = __pyx_v_self->_table_name;
__Pyx_INCREF(__pyx_t_7);
01275: None, # table_name_col,
01276: symbols,
01277: at)
+01278: return self
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_self);
__pyx_r = ((PyObject *)__pyx_v_self);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
01279:
+01280: def commit(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_11commit(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_17SenderTransaction_10commit, "\n Commit the transaction.\n \n A commit is also automatic at the end of a successful `with` block.\n\n This will flush the buffer.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_17SenderTransaction_11commit = {"commit", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_17SenderTransaction_11commit, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_17SenderTransaction_10commit}; static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_11commit(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("commit (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("commit", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("commit", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_17SenderTransaction_10commit(((struct __pyx_obj_7questdb_7_client_SenderTransaction *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_17SenderTransaction_10commit(struct __pyx_obj_7questdb_7_client_SenderTransaction *__pyx_v_self) { PyObject *__pyx_v_rows_left = NULL; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_16); __Pyx_XDECREF(__pyx_t_17); __Pyx_AddTraceback("questdb._client.SenderTransaction.commit", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_rows_left); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_17SenderTransaction_11commit, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SenderTransaction_commit, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[94])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1280, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_SenderTransaction, __pyx_mstate_global->__pyx_n_u_commit, __pyx_t_4) < (0)) __PYX_ERR(0, 1280, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
01281: """
01282: Commit the transaction.
01283:
01284: A commit is also automatic at the end of a successful `with` block.
01285:
01286: This will flush the buffer.
01287: """
+01288: if self._complete:
if (unlikely(__pyx_v_self->_complete)) {
/* … */
}
+01289: raise QuestDBError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1289, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
+01290: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1290, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1290, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Transaction_already_completed_ca_2}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1289, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 1289, __pyx_L1_error)
01291: 'Transaction already completed, can\'t commit')
+01292: if self._committing:
if (unlikely(__pyx_v_self->_committing)) {
/* … */
}
+01293: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1293, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+01294: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Transaction_commit_is_already_in_2}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1293, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 1293, __pyx_L1_error)
01295: "Transaction commit is already in progress, can't commit.")
+01296: if self._sender._buffer is None:
__pyx_t_7 = (((PyObject *)__pyx_v_self->_sender->_buffer) == Py_None);
if (unlikely(__pyx_t_7)) {
/* … */
}
+01297: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1297, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+01298: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1298, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1298, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_2, __pyx_mstate_global->__pyx_kp_u_commit_can_t_be_called_Sender_is}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1297, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 1297, __pyx_L1_error)
01299: "commit() can't be called: Sender is closed.")
01300: # Checked here rather than left to the flush below, which is
01301: # skipped when the buffer is empty. `dataframe()` counts into
01302: # `_row_depth` before it writes anything, so a commit re-entered
01303: # from the plan build would find nothing to flush, end the
01304: # transaction, and leave the frame's rows to go out afterwards
01305: # outside it.
+01306: self._sender._buffer._check_not_in_row('commit')
__pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_sender->_buffer, __pyx_mstate_global->__pyx_n_u_commit, NULL); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1306, __pyx_L1_error)
01307: # `_in_txn` has to come down first, because an explicit flush
01308: # inside a transaction is refused.
+01309: self._committing = True
__pyx_v_self->_committing = 1;
+01310: self._sender._in_txn = False
__pyx_v_self->_sender->_in_txn = 0;
+01311: try:
/*try:*/ {
+01312: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
goto __pyx_L14_try_end;
__pyx_L9_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
__pyx_L11_except_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
goto __pyx_L7_error;
__pyx_L14_try_end:;
}
+01313: if len(self._sender._buffer):
__pyx_t_1 = ((PyObject *)__pyx_v_self->_sender->_buffer);
__Pyx_INCREF(__pyx_t_1);
__pyx_t_12 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1313, __pyx_L9_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_7 = (__pyx_t_12 != 0);
if (__pyx_t_7) {
/* … */
}
+01314: self._sender.flush(transactional=True)
__pyx_t_4 = ((PyObject *)__pyx_v_self->_sender);
__Pyx_INCREF(__pyx_t_4);
__pyx_t_6 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, Py_True};
#if CYTHON_VECTORCALL
__pyx_t_2 = __pyx_mstate_global->__pyx_tuple[25];
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1314, __pyx_L9_error)
__Pyx_INCREF(__pyx_t_2);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_transactional};
__pyx_t_2 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1314, __pyx_L9_error)
__Pyx_GOTREF(__pyx_t_2);
}
#endif
__pyx_t_1 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_flush, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_2);
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1314, __pyx_L9_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
{
PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_transactional};
__pyx_mstate_global->__pyx_tuple[25] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[25])) __PYX_ERR(0, 1314, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[25]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[25]);
+01315: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client.SenderTransaction.commit", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_4) < 0) __PYX_ERR(0, 1315, __pyx_L11_except_error)
__Pyx_XGOTREF(__pyx_t_1);
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_4);
01316: # A flush that reached the wire clears the buffer whether it
01317: # succeeded or not, so there is nothing left to commit and
01318: # the transaction is over -- saying otherwise would strand
01319: # the sender inside it and make the next `close(flush=True)`
01320: # raise over the caller's own error.
01321: #
01322: # Rows are still in the buffer only when `Sender.flush`
01323: # refused before making the native call, which is a short
01324: # and closed list: a row part-way through being written, a
01325: # call from inside the sender's own callback, and a sender
01326: # already closed. In those three the transaction is still
01327: # the caller's to finish or roll back.
01328: #
01329: # The buffer is therefore the discriminator, and it is
01330: # `Sender.flush` that maintains it, not this method.
01331: # `test_flush_clears_the_buffer_on_a_wire_failure` pins that
01332: # behaviour by name for exactly this reason.
01333: #
01334: # Asking it cannot be allowed to raise: `len()` goes through
01335: # `Buffer.__len__`, which refuses on a closed buffer, and a
01336: # sender closed during the flush would put that error over
01337: # the caller's own. A closed buffer holds no rows, which is
01338: # the same answer an empty one gives.
+01339: rows_left = False
__Pyx_INCREF(Py_False);
__pyx_v_rows_left = Py_False;
+01340: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
goto __pyx_L25_try_end;
__pyx_L18_error:;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
__pyx_L20_except_error:;
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15);
goto __pyx_L11_except_error;
__pyx_L19_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15);
__pyx_L25_try_end:;
}
+01341: rows_left = (self._sender._buffer is not None
__pyx_t_7 = (((PyObject *)__pyx_v_self->_sender->_buffer) != Py_None);
if (__pyx_t_7) {
} else {
__pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1341, __pyx_L18_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_5 = __pyx_t_3;
__pyx_t_3 = 0;
goto __pyx_L26_bool_binop_done;
}
+01342: and len(self._sender._buffer) > 0)
__pyx_t_3 = ((PyObject *)__pyx_v_self->_sender->_buffer);
__Pyx_INCREF(__pyx_t_3);
__pyx_t_12 = PyObject_Length(__pyx_t_3); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1342, __pyx_L18_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_7 = (__pyx_t_12 > 0);
__pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1342, __pyx_L18_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_5 = __pyx_t_3;
__pyx_t_3 = 0;
__pyx_L26_bool_binop_done:;
__Pyx_DECREF_SET(__pyx_v_rows_left, __pyx_t_5);
__pyx_t_5 = 0;
+01343: except QuestDBError:
__Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_3, &__pyx_t_16); __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1343, __pyx_L20_except_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_18 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_5, __pyx_t_17); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_ErrRestore(__pyx_t_5, __pyx_t_3, __pyx_t_16); __pyx_t_5 = 0; __pyx_t_3 = 0; __pyx_t_16 = 0; if (__pyx_t_18) { __Pyx_ErrRestore(0,0,0);
+01344: rows_left = False
__Pyx_INCREF(Py_False); __Pyx_DECREF_SET(__pyx_v_rows_left, Py_False); goto __pyx_L19_exception_handled; } goto __pyx_L20_except_error;
+01345: if rows_left:
__pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_rows_left); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1345, __pyx_L11_except_error) if (__pyx_t_7) { /* … */ goto __pyx_L30; }
+01346: self._sender._in_txn = True
__pyx_v_self->_sender->_in_txn = 1;
01347: else:
+01348: self._complete = True
/*else*/ {
__pyx_v_self->_complete = 1;
}
__pyx_L30:;
+01349: raise
__Pyx_GIVEREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_4); __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_2, __pyx_t_4); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_4 = 0; __PYX_ERR(0, 1349, __pyx_L11_except_error) }
+01350: self._complete = True
__pyx_v_self->_complete = 1; }
01351: finally:
01352: # A commit releases the GIL in `flush()`. Refuse another
01353: # terminal operation while that transition owns the buffer,
01354: # then make the transition available again only after every
01355: # success/failure state above has been published.
+01356: self._committing = False
/*finally:*/ {
/*normal exit:*/{
__pyx_v_self->_committing = 0;
goto __pyx_L8;
}
__pyx_L7_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_14, &__pyx_t_13);
if ( unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_13);
__pyx_t_18 = __pyx_lineno; __pyx_t_19 = __pyx_clineno; __pyx_t_20 = __pyx_filename;
{
__pyx_v_self->_committing = 0;
}
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_15, __pyx_t_14, __pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ErrRestore(__pyx_t_11, __pyx_t_10, __pyx_t_9);
__pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0;
__pyx_lineno = __pyx_t_18; __pyx_clineno = __pyx_t_19; __pyx_filename = __pyx_t_20;
goto __pyx_L1_error;
}
__pyx_L8:;
}
01357:
+01358: def rollback(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_13rollback(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_17SenderTransaction_12rollback, "\n Roll back the transaction.\n\n A rollback is also automatic at the end of a failed `with` block.\n\n This will clear the buffer. When ``rollback()`` is called from\n code that a ``row()`` or ``dataframe()`` on this sender runs\n while it writes, such as a column value\047s conversion, it raises\n :class:`QuestDBError <questdb.QuestDBError>` (``InvalidApiCall``)\n and leaves the transaction as it was.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_17SenderTransaction_13rollback = {"rollback", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_17SenderTransaction_13rollback, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_17SenderTransaction_12rollback}; static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_13rollback(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("rollback (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("rollback", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("rollback", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_17SenderTransaction_12rollback(((struct __pyx_obj_7questdb_7_client_SenderTransaction *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_17SenderTransaction_12rollback(struct __pyx_obj_7questdb_7_client_SenderTransaction *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("questdb._client.SenderTransaction.rollback", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_17SenderTransaction_13rollback, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SenderTransaction_rollback, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[95])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_SenderTransaction, __pyx_mstate_global->__pyx_n_u_rollback, __pyx_t_4) < (0)) __PYX_ERR(0, 1358, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
01359: """
01360: Roll back the transaction.
01361:
01362: A rollback is also automatic at the end of a failed `with` block.
01363:
01364: This will clear the buffer. When ``rollback()`` is called from
01365: code that a ``row()`` or ``dataframe()`` on this sender runs
01366: while it writes, such as a column value's conversion, it raises
01367: :class:`QuestDBError <questdb.QuestDBError>` (``InvalidApiCall``)
01368: and leaves the transaction as it was.
01369: """
+01370: if self._complete:
if (unlikely(__pyx_v_self->_complete)) {
/* … */
}
+01371: raise QuestDBError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1371, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
+01372: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1372, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1372, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Transaction_already_completed_ca_3}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1371, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 1371, __pyx_L1_error)
01373: 'Transaction already completed, can\'t rollback.')
+01374: if self._committing:
if (unlikely(__pyx_v_self->_committing)) {
/* … */
}
+01375: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1375, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+01376: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Transaction_commit_is_already_in_3}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1375, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 1375, __pyx_L1_error)
01377: "Transaction commit is already in progress, can't rollback.")
01378: # A rollback from code running inside a `row()` or `dataframe()` on
01379: # this buffer is refused before anything changes: clearing there
01380: # would discard what that call is writing. Every call that would
01381: # change what an in-progress call writes is refused the same way.
+01382: if self._sender._buffer is not None:
__pyx_t_7 = (((PyObject *)__pyx_v_self->_sender->_buffer) != Py_None);
if (__pyx_t_7) {
/* … */
}
+01383: self._sender._buffer._check_not_in_row('rollback')
__pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_sender->_buffer, __pyx_mstate_global->__pyx_n_u_rollback, NULL); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1383, __pyx_L1_error)
+01384: self._sender._in_txn = False
__pyx_v_self->_sender->_in_txn = 0;
+01385: self._complete = True
__pyx_v_self->_complete = 1;
+01386: if self._sender._buffer is not None:
__pyx_t_7 = (((PyObject *)__pyx_v_self->_sender->_buffer) != Py_None);
if (__pyx_t_7) {
/* … */
}
+01387: self._sender._buffer._clear_now()
__pyx_f_7questdb_7_client_6Buffer__clear_now(__pyx_v_self->_sender->_buffer);
01388:
+01389: cdef class Buffer:
struct __pyx_vtabstruct_7questdb_7_client_Buffer {
PyObject *(*_init_ilp_impl)(struct __pyx_obj_7questdb_7_client_Buffer *, enum line_sender_protocol_version, size_t, size_t);
PyObject *(*_init_qwp_impl)(struct __pyx_obj_7questdb_7_client_Buffer *, size_t, size_t);
__pyx_t_7questdb_7_client_void_int (*_check_impl)(struct __pyx_obj_7questdb_7_client_Buffer *);
void (*_clear_now)(struct __pyx_obj_7questdb_7_client_Buffer *);
void (*_leave_row)(struct __pyx_obj_7questdb_7_client_Buffer *);
PyObject *(*_to_bytes)(struct __pyx_obj_7questdb_7_client_Buffer *);
__pyx_t_7questdb_7_client_void_int (*_check_not_in_row)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_opt_args_7questdb_7_client_6Buffer__check_not_in_row *__pyx_optional_args);
__pyx_t_7questdb_7_client_void_int (*_set_marker)(struct __pyx_obj_7questdb_7_client_Buffer *);
__pyx_t_7questdb_7_client_void_int (*_rewind_to_marker)(struct __pyx_obj_7questdb_7_client_Buffer *);
PyObject *(*_clear_marker)(struct __pyx_obj_7questdb_7_client_Buffer *);
PyObject *(*_rewind_after_failure)(struct __pyx_obj_7questdb_7_client_Buffer *);
__pyx_t_7questdb_7_client_void_int (*_table)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *);
struct qdb_pystr_buf *(*_cleared_b)(struct __pyx_obj_7questdb_7_client_Buffer *);
__pyx_t_7questdb_7_client_void_int (*_symbol)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_column_bool)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, int);
__pyx_t_7questdb_7_client_void_int (*_column_decimal)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_require_qwp_column)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_column_binary)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_column_uuid)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_column_ipv4)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_column_char)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_Char *);
__pyx_t_7questdb_7_client_void_int (*_column_date_millis)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_DateMillis *);
__pyx_t_7questdb_7_client_void_int (*_column_long256)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_Long256 *);
__pyx_t_7questdb_7_client_void_int (*_column_geohash)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_Geohash *);
__pyx_t_7questdb_7_client_void_int (*_column_int)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_column_i64)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, int64_t);
__pyx_t_7questdb_7_client_void_int (*_column_f64)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, double);
__pyx_t_7questdb_7_client_void_int (*_column_str)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_column_ts_micros)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_TimestampMicros *);
__pyx_t_7questdb_7_client_void_int (*_column_ts_nanos)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_TimestampNanos *);
__pyx_t_7questdb_7_client_void_int (*_column_numpy)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyArrayObject *);
__pyx_t_7questdb_7_client_void_int (*_column_dt)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyDateTime_DateTime *);
__pyx_t_7questdb_7_client_void_int (*_column)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_column_qwp_only)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_may_trigger_row_complete)(struct __pyx_obj_7questdb_7_client_Buffer *);
__pyx_t_7questdb_7_client_void_int (*_at_ts_us)(struct __pyx_obj_7questdb_7_client_Buffer *, struct __pyx_obj_7questdb_7_client_TimestampMicros *);
__pyx_t_7questdb_7_client_void_int (*_at_ts_ns)(struct __pyx_obj_7questdb_7_client_Buffer *, struct __pyx_obj_7questdb_7_client_TimestampNanos *);
__pyx_t_7questdb_7_client_void_int (*_at_dt)(struct __pyx_obj_7questdb_7_client_Buffer *, PyDateTime_DateTime *);
__pyx_t_7questdb_7_client_void_int (*_at_now)(struct __pyx_obj_7questdb_7_client_Buffer *);
__pyx_t_7questdb_7_client_void_int (*_at)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_row)(struct __pyx_obj_7questdb_7_client_Buffer *, int, PyObject *, struct __pyx_opt_args_7questdb_7_client_6Buffer__row *__pyx_optional_args);
};
static struct __pyx_vtabstruct_7questdb_7_client_Buffer *__pyx_vtabptr_7questdb_7_client_Buffer;
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__init_ilp_impl(struct __pyx_obj_7questdb_7_client_Buffer *, enum line_sender_protocol_version, size_t, size_t);
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__init_qwp_impl(struct __pyx_obj_7questdb_7_client_Buffer *, size_t, size_t);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__check_impl(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__clear_now(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__leave_row(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__to_bytes(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_opt_args_7questdb_7_client_6Buffer__check_not_in_row *__pyx_optional_args);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__set_marker(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__rewind_to_marker(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__clear_marker(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__rewind_after_failure(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__table(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *);
static CYTHON_INLINE struct qdb_pystr_buf *__pyx_f_7questdb_7_client_6Buffer__cleared_b(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__symbol(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_bool(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, int);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_decimal(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_binary(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_uuid(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_ipv4(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_char(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_Char *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_date_millis(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_DateMillis *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_long256(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_Long256 *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_geohash(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_Geohash *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_int(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_i64(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, int64_t);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_f64(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, double);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_str(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_ts_micros(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_TimestampMicros *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_ts_nanos(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_TimestampNanos *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_numpy(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyArrayObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_dt(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyDateTime_DateTime *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__may_trigger_row_complete(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_ts_us(struct __pyx_obj_7questdb_7_client_Buffer *, struct __pyx_obj_7questdb_7_client_TimestampMicros *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_ts_ns(struct __pyx_obj_7questdb_7_client_Buffer *, struct __pyx_obj_7questdb_7_client_TimestampNanos *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_dt(struct __pyx_obj_7questdb_7_client_Buffer *, PyDateTime_DateTime *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_now(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *);
01390: """
01391: Internal row-serialization buffer, managed by :class:`Sender <questdb.Sender>`.
01392:
01393: Kept importable as ``questdb.ingress.Buffer`` for legacy ILP/HTTP and
01394: ILP/TCP code that constructs buffers explicitly and flushes them via
01395: ``sender.flush(buffer)``.
01396: """
01397: cdef line_sender_buffer* _impl
01398: cdef qdb_pystr_buf* _b
01399: cdef size_t _init_buf_size
01400: cdef size_t _max_name_len
01401: cdef bint _qwp
01402: cdef bint _marker_set
01403: cdef int _row_depth
01404: cdef object _row_complete_sender
01405:
+01406: def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_6Buffer_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_6Buffer_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
#if !CYTHON_VECTORCALL_TPNEW
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
#if !CYTHON_VECTORCALL_TPNEW
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__pyx_args, __pyx_nargs);
if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL_TPNEW(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) return -1;
if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
__pyx_r = __pyx_pf_7questdb_7_client_6Buffer___cinit__(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_6Buffer___cinit__(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01407: self._impl = NULL
__pyx_v_self->_impl = NULL;
+01408: self._b = NULL
__pyx_v_self->_b = NULL;
+01409: self._init_buf_size = 0
__pyx_v_self->_init_buf_size = 0;
+01410: self._max_name_len = 0
__pyx_v_self->_max_name_len = 0;
+01411: self._qwp = False
__pyx_v_self->_qwp = 0;
+01412: self._marker_set = False
__pyx_v_self->_marker_set = 0;
+01413: self._row_depth = 0
__pyx_v_self->_row_depth = 0;
+01414: self._row_complete_sender = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_row_complete_sender); __Pyx_DECREF(__pyx_v_self->_row_complete_sender); __pyx_v_self->_row_complete_sender = Py_None;
01415:
+01416: def __init__(
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_6Buffer_3__init__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_6Buffer_3__init__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_protocol_version = 0;
PyObject *__pyx_v_init_buf_size = 0;
PyObject *__pyx_v_max_name_len = 0;
#if !CYTHON_VECTORCALL_TPNEW
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
#if !CYTHON_VECTORCALL_TPNEW
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_protocol_version,&__pyx_mstate_global->__pyx_n_u_init_buf_size,&__pyx_mstate_global->__pyx_n_u_max_name_len,0};
PyObject* values[3] = {0,0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL_TPNEW(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 1416, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 3:
values[2] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1416, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1416, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1416, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__init__", 0) < (0)) __PYX_ERR(0, 1416, __pyx_L3_error)
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_65536));
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_127));
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 3, i); __PYX_ERR(0, 1416, __pyx_L3_error) }
}
} else {
switch (__pyx_nargs) {
case 3:
values[2] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1416, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1416, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1416, __pyx_L3_error)
break;
default: goto __pyx_L5_argtuple_error;
}
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_65536));
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_127));
}
if (__Pyx_PyInt_FromNumber(&values[0], "protocol_version", 0) < (0)) __PYX_ERR(0, 1418, __pyx_L3_error)
__pyx_v_protocol_version = ((PyObject*)values[0]);
if (__Pyx_PyInt_FromNumber(&values[1], "init_buf_size", 0) < (0)) __PYX_ERR(0, 1419, __pyx_L3_error)
__pyx_v_init_buf_size = ((PyObject*)values[1]);
if (__Pyx_PyInt_FromNumber(&values[2], "max_name_len", 0) < (0)) __PYX_ERR(0, 1420, __pyx_L3_error)
__pyx_v_max_name_len = ((PyObject*)values[2]);
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 3, __pyx_nargs); __PYX_ERR(0, 1416, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.Buffer.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_protocol_version), (&PyLong_Type), 0, "protocol_version", 2))) __PYX_ERR(0, 1418, __pyx_L1_error)
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_init_buf_size), (&PyLong_Type), 0, "init_buf_size", 2))) __PYX_ERR(0, 1419, __pyx_L1_error)
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_max_name_len), (&PyLong_Type), 0, "max_name_len", 2))) __PYX_ERR(0, 1420, __pyx_L1_error)
__pyx_r = __pyx_pf_7questdb_7_client_6Buffer_2__init__(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self), __pyx_v_protocol_version, __pyx_v_init_buf_size, __pyx_v_max_name_len);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = -1;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
goto __pyx_L7_cleaned_up;
__pyx_L0:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__pyx_L7_cleaned_up:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_6Buffer_2__init__(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_protocol_version, PyObject *__pyx_v_init_buf_size, PyObject *__pyx_v_max_name_len) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_AddTraceback("questdb._client.Buffer.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01417: self,
01418: protocol_version: int,
01419: init_buf_size: int=65536,
01420: max_name_len: int=127):
+01421: if self._impl != NULL:
__pyx_t_1 = (__pyx_v_self->_impl != NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+01422: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1422, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+01423: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1423, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1423, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Buffer_is_already_initialized}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1422, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 1422, __pyx_L1_error)
01424: 'Buffer is already initialized.')
+01425: if protocol_version not in range(1, 4):
__pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyRange_Type)), __pyx_mstate_global->__pyx_tuple[26], NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1425, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_protocol_version, __pyx_t_2, Py_NE)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1425, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(__pyx_t_1)) { /* … */ } /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_int_1, __pyx_mstate_global->__pyx_int_4}; __pyx_mstate_global->__pyx_tuple[26] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[26])) __PYX_ERR(0, 1425, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[26]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[26]);
+01426: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1426, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
+01427: QuestDBErrorCode.ProtocolVersionError,
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1427, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ProtocolVersionError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1427, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Invalid_protocol_version_Support}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1426, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 1426, __pyx_L1_error)
01428: 'Invalid protocol version. Supported versions are 1-3.')
+01429: self._init_ilp_impl(protocol_version, init_buf_size, max_name_len)
__pyx_t_8 = ((enum line_sender_protocol_version)__Pyx_PyLong_As_enum__line_sender_protocol_version(__pyx_v_protocol_version)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1429, __pyx_L1_error) __pyx_t_7 = __Pyx_PyLong_As_size_t(__pyx_v_init_buf_size); if (unlikely((__pyx_t_7 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1429, __pyx_L1_error) __pyx_t_9 = __Pyx_PyLong_As_size_t(__pyx_v_max_name_len); if (unlikely((__pyx_t_9 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1429, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__init_ilp_impl(__pyx_v_self, __pyx_t_8, __pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1429, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
01430:
+01431: @staticmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_5_new_qwp(CYTHON_UNUSED PyObject *__pyx_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_6Buffer_5_new_qwp = {"_new_qwp", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Buffer_5_new_qwp, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_5_new_qwp(CYTHON_UNUSED PyObject *__pyx_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_init_buf_size = 0;
PyObject *__pyx_v_max_name_len = 0;
#if !CYTHON_VECTORCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_new_qwp (wrapper)", 0);
#if !CYTHON_VECTORCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_init_buf_size,&__pyx_mstate_global->__pyx_n_u_max_name_len,0};
PyObject* values[2] = {0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 1431, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1431, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1431, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_new_qwp", 0) < (0)) __PYX_ERR(0, 1431, __pyx_L3_error)
if (!values[0]) values[0] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_65536));
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_127));
} else {
switch (__pyx_nargs) {
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1431, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1431, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
if (!values[0]) values[0] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_65536));
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_127));
}
if (__Pyx_PyInt_FromNumber(&values[0], "init_buf_size", 0) < (0)) __PYX_ERR(0, 1433, __pyx_L3_error)
__pyx_v_init_buf_size = ((PyObject*)values[0]);
if (__Pyx_PyInt_FromNumber(&values[1], "max_name_len", 0) < (0)) __PYX_ERR(0, 1434, __pyx_L3_error)
__pyx_v_max_name_len = ((PyObject*)values[1]);
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("_new_qwp", 0, 0, 2, __pyx_nargs); __PYX_ERR(0, 1431, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.Buffer._new_qwp", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_init_buf_size), (&PyLong_Type), 0, "init_buf_size", 2))) __PYX_ERR(0, 1433, __pyx_L1_error)
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_max_name_len), (&PyLong_Type), 0, "max_name_len", 2))) __PYX_ERR(0, 1434, __pyx_L1_error)
__pyx_r = __pyx_pf_7questdb_7_client_6Buffer_4_new_qwp(__pyx_v_init_buf_size, __pyx_v_max_name_len);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = NULL;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
goto __pyx_L7_cleaned_up;
__pyx_L0:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__pyx_L7_cleaned_up:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Buffer_4_new_qwp(PyObject *__pyx_v_init_buf_size, PyObject *__pyx_v_max_name_len) {
struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.Buffer._new_qwp", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_buf);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1431, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_init_buf_size, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 1431, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_max_name_len, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 1431, __pyx_L1_error)
__pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Buffer_5_new_qwp, __Pyx_CYFUNCTION_STATICMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer__new_qwp, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[98])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1431, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
#endif
__Pyx_CyFunction_SetDefaultsTuple(__pyx_t_17, __pyx_mstate_global->__pyx_tuple[50]);
__Pyx_CyFunction_SetAnnotationsDict(__pyx_t_17, __pyx_t_4);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_new_qwp, __pyx_t_17) < (0)) __PYX_ERR(0, 1431, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
__pyx_t_4 = NULL;
__Pyx_GetNameInClass(__pyx_t_25, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_new_qwp); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1431, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_25);
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_25};
__pyx_t_17 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_staticmethod, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1431, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
}
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_new_qwp, __pyx_t_17) < (0)) __PYX_ERR(0, 1431, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
/* … */
{
PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_int_65536, __pyx_mstate_global->__pyx_int_127};
__pyx_mstate_global->__pyx_tuple[50] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[50])) __PYX_ERR(0, 1431, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[50]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[50]);
01432: def _new_qwp(
01433: init_buf_size: int=65536,
01434: max_name_len: int=127):
+01435: cdef Buffer buf = Buffer.__new__(Buffer)
__pyx_t_1 = ((PyObject *)__pyx_tp_new_7questdb_7_client_Buffer(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1435, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_buf = ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_1); __pyx_t_1 = 0;
+01436: buf._init_qwp_impl(init_buf_size, max_name_len)
__pyx_t_2 = __Pyx_PyLong_As_size_t(__pyx_v_init_buf_size); if (unlikely((__pyx_t_2 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1436, __pyx_L1_error) __pyx_t_3 = __Pyx_PyLong_As_size_t(__pyx_v_max_name_len); if (unlikely((__pyx_t_3 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1436, __pyx_L1_error) __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__init_qwp_impl(__pyx_v_buf, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+01437: return buf
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_buf);
__pyx_r = ((PyObject *)__pyx_v_buf);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
01438:
+01439: cdef inline _init_ilp_impl(self, line_sender_protocol_version version, size_t init_buf_size, size_t max_name_len):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__init_ilp_impl(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, enum line_sender_protocol_version __pyx_v_version, size_t __pyx_v_init_buf_size, size_t __pyx_v_max_name_len) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client.Buffer._init_ilp_impl", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01440: self._impl = line_sender_buffer_with_max_name_len(version, max_name_len)
__pyx_v_self->_impl = line_sender_buffer_with_max_name_len(__pyx_v_version, __pyx_v_max_name_len);
+01441: self._b = qdb_pystr_buf_new()
__pyx_v_self->_b = qdb_pystr_buf_new();
+01442: reserve_buffer(self._impl, init_buf_size)
__pyx_t_1 = __pyx_f_7questdb_7_client_reserve_buffer(__pyx_v_self->_impl, __pyx_v_init_buf_size); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1442, __pyx_L1_error)
+01443: self._init_buf_size = init_buf_size
__pyx_v_self->_init_buf_size = __pyx_v_init_buf_size;
+01444: self._max_name_len = max_name_len
__pyx_v_self->_max_name_len = __pyx_v_max_name_len;
+01445: self._qwp = False
__pyx_v_self->_qwp = 0;
+01446: self._row_complete_sender = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_row_complete_sender); __Pyx_DECREF(__pyx_v_self->_row_complete_sender); __pyx_v_self->_row_complete_sender = Py_None;
01447:
+01448: cdef inline _init_qwp_impl(self, size_t init_buf_size, size_t max_name_len):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__init_qwp_impl(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, size_t __pyx_v_init_buf_size, size_t __pyx_v_max_name_len) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client.Buffer._init_qwp_impl", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01449: self._impl = line_sender_buffer_new_qwp_with_max_name_len(max_name_len)
__pyx_v_self->_impl = line_sender_buffer_new_qwp_with_max_name_len(__pyx_v_max_name_len);
+01450: self._b = qdb_pystr_buf_new()
__pyx_v_self->_b = qdb_pystr_buf_new();
+01451: reserve_buffer(self._impl, init_buf_size)
__pyx_t_1 = __pyx_f_7questdb_7_client_reserve_buffer(__pyx_v_self->_impl, __pyx_v_init_buf_size); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1451, __pyx_L1_error)
+01452: self._init_buf_size = init_buf_size
__pyx_v_self->_init_buf_size = __pyx_v_init_buf_size;
+01453: self._max_name_len = max_name_len
__pyx_v_self->_max_name_len = __pyx_v_max_name_len;
+01454: self._qwp = True
__pyx_v_self->_qwp = 1;
+01455: self._row_complete_sender = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_row_complete_sender); __Pyx_DECREF(__pyx_v_self->_row_complete_sender); __pyx_v_self->_row_complete_sender = Py_None;
01456:
01457:
+01458: def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_6Buffer_7__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_6Buffer_7__dealloc__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_pf_7questdb_7_client_6Buffer_6__dealloc__(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
}
static void __pyx_pf_7questdb_7_client_6Buffer_6__dealloc__(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
/* … */
/* function exit code */
__Pyx_RefNannyFinishContext();
}
+01459: self._row_complete_sender = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_row_complete_sender); __Pyx_DECREF(__pyx_v_self->_row_complete_sender); __pyx_v_self->_row_complete_sender = Py_None;
+01460: qdb_pystr_buf_free(self._b)
qdb_pystr_buf_free(__pyx_v_self->_b);
+01461: line_sender_buffer_free(self._impl)
line_sender_buffer_free(__pyx_v_self->_impl);
01462:
+01463: cdef inline void_int _check_impl(self) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__check_impl(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_AddTraceback("questdb._client.Buffer._check_impl", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01464: if self._impl == NULL:
__pyx_t_1 = (__pyx_v_self->_impl == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+01465: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1465, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+01466: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1466, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1466, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Buffer_is_not_initialized}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1465, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 1465, __pyx_L1_error)
01467: 'Buffer is not initialized.')
01468:
+01469: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_13init_buf_size_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_13init_buf_size_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_6Buffer_13init_buf_size___get__(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Buffer_13init_buf_size___get__(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.Buffer.init_buf_size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01470: def init_buf_size(self) -> int:
01471: """
01472: The initial capacity of the buffer when first created.
01473:
01474: This may grow over time, see ``capacity()``.
01475: """
+01476: return self._init_buf_size
__pyx_t_1 = __Pyx_PyLong_FromSize_t(__pyx_v_self->_init_buf_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1476, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
01477:
+01478: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_12max_name_len_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_12max_name_len_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_6Buffer_12max_name_len___get__(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Buffer_12max_name_len___get__(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.Buffer.max_name_len.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01479: def max_name_len(self) -> int:
01480: """Maximum length of a table or column name."""
+01481: return self._max_name_len
__pyx_t_1 = __Pyx_PyLong_FromSize_t(__pyx_v_self->_max_name_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1481, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
01482:
+01483: def reserve(self, additional):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Buffer_9reserve(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Buffer_8reserve, "\n Ensure the buffer has at least `additional` bytes of future capacity.\n\n :param int additional: Additional bytes to reserve.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Buffer_9reserve = {"reserve", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Buffer_9reserve, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Buffer_8reserve}; static PyObject *__pyx_pw_7questdb_7_client_6Buffer_9reserve(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_additional = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("reserve (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_additional,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 1483, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1483, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "reserve", 0) < (0)) __PYX_ERR(0, 1483, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("reserve", 1, 1, 1, i); __PYX_ERR(0, 1483, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1483, __pyx_L3_error) } __pyx_v_additional = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("reserve", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1483, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Buffer.reserve", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_6Buffer_8reserve(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self), __pyx_v_additional); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Buffer_8reserve(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_additional) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client.Buffer.reserve", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Buffer_9reserve, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_reserve, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[99])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1483, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_reserve, __pyx_t_17) < (0)) __PYX_ERR(0, 1483, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
01484: """
01485: Ensure the buffer has at least `additional` bytes of future capacity.
01486:
01487: :param int additional: Additional bytes to reserve.
01488: """
+01489: if additional < 0:
__pyx_t_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_additional, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1489, __pyx_L1_error) if (unlikely(__pyx_t_1)) { /* … */ }
+01490: raise ValueError('additional must be non-negative.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_additional_must_be_non_negative};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1490, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 1490, __pyx_L1_error)
+01491: self._check_impl()
__pyx_t_5 = __pyx_f_7questdb_7_client_6Buffer__check_impl(__pyx_v_self); if (unlikely(__pyx_t_5 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1491, __pyx_L1_error)
+01492: reserve_buffer(self._impl, additional)
__pyx_t_4 = __Pyx_PyLong_As_size_t(__pyx_v_additional); if (unlikely((__pyx_t_4 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1492, __pyx_L1_error) __pyx_t_5 = __pyx_f_7questdb_7_client_reserve_buffer(__pyx_v_self->_impl, __pyx_t_4); if (unlikely(__pyx_t_5 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1492, __pyx_L1_error)
01493:
+01494: def capacity(self) -> int:
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Buffer_11capacity(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Buffer_10capacity, "The current buffer capacity."); static PyMethodDef __pyx_mdef_7questdb_7_client_6Buffer_11capacity = {"capacity", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Buffer_11capacity, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Buffer_10capacity}; static PyObject *__pyx_pw_7questdb_7_client_6Buffer_11capacity(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("capacity (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("capacity", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("capacity", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_6Buffer_10capacity(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Buffer_10capacity(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("questdb._client.Buffer.capacity", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 1494, __pyx_L1_error) __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Buffer_11capacity, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_capacity, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[100])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25); #endif __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_25, __pyx_t_17); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_capacity, __pyx_t_25) < (0)) __PYX_ERR(0, 1494, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
01495: """The current buffer capacity."""
+01496: self._check_impl()
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_impl(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1496, __pyx_L1_error)
+01497: return line_sender_buffer_capacity(self._impl)
__pyx_t_2 = __Pyx_PyLong_FromSize_t(line_sender_buffer_capacity(__pyx_v_self->_impl)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1497, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__Pyx_PyInt_FromNumber(&__pyx_t_2, NULL, 0) < (0)) __PYX_ERR(0, 1497, __pyx_L1_error) { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = ((PyObject*)__pyx_t_2); } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
01498:
+01499: def clear(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Buffer_13clear(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Buffer_12clear, "\n Reset the buffer.\n\n Note that flushing a buffer will (unless otherwise specified)\n also automatically clear it.\n\n This method is designed to be called only in conjunction with\n ``sender.flush(buffer, clear=False)``.\n\n Raises :class:`QuestDBError <questdb.QuestDBError>`\n (``InvalidApiCall``) if a\n :func:`Buffer.row <questdb.ingress.Buffer.row>` or\n :func:`Buffer.dataframe <questdb.ingress.Buffer.dataframe>` call\n on this buffer is still in progress.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Buffer_13clear = {"clear", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Buffer_13clear, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Buffer_12clear}; static PyObject *__pyx_pw_7questdb_7_client_6Buffer_13clear(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("clear (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("clear", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("clear", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_6Buffer_12clear(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Buffer_12clear(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("questdb._client.Buffer.clear", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Buffer_13clear, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_clear, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[101])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1499, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_clear, __pyx_t_25) < (0)) __PYX_ERR(0, 1499, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
01500: """
01501: Reset the buffer.
01502:
01503: Note that flushing a buffer will (unless otherwise specified)
01504: also automatically clear it.
01505:
01506: This method is designed to be called only in conjunction with
01507: ``sender.flush(buffer, clear=False)``.
01508:
01509: Raises :class:`QuestDBError <questdb.QuestDBError>`
01510: (``InvalidApiCall``) if a
01511: :func:`Buffer.row <questdb.ingress.Buffer.row>` or
01512: :func:`Buffer.dataframe <questdb.ingress.Buffer.dataframe>` call
01513: on this buffer is still in progress.
01514: """
+01515: self._check_impl()
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_impl(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1515, __pyx_L1_error)
+01516: self._check_not_in_row('clear')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_clear, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1516, __pyx_L1_error)
+01517: self._clear_now()
__pyx_f_7questdb_7_client_6Buffer__clear_now(__pyx_v_self);
01518:
+01519: cdef inline void _clear_now(self) noexcept:
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__clear_now(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
/* … */
/* function exit code */
}
+01520: line_sender_buffer_clear(self._impl)
line_sender_buffer_clear(__pyx_v_self->_impl);
+01521: qdb_pystr_buf_clear(self._b)
qdb_pystr_buf_clear(__pyx_v_self->_b);
01522:
+01523: cdef inline void _leave_row(self) noexcept:
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__leave_row(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
/* … */
/* function exit code */
}
+01524: self._row_depth -= 1
__pyx_v_self->_row_depth = (__pyx_v_self->_row_depth - 1);
01525:
+01526: def __len__(self) -> int:
/* Python wrapper */ static Py_ssize_t __pyx_pw_7questdb_7_client_6Buffer_15__len__(PyObject *__pyx_v_self); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Buffer_14__len__, "\n The current number of bytes currently in the buffer, read mid-row\n on the same terms as :func:`Buffer.__bytes__`.\n\n For ILP buffers this is exact, and equivalent (but cheaper) to\n ``len(bytes(buffer))``. For QWP buffers it is an estimate of the\n encoded size. Over QWP/WebSocket it is never below the size of the\n frame a flush encodes, unless store-and-forward has fallen back to\n sending full symbol dictionaries.\n "); #if CYTHON_UPDATE_DESCRIPTOR_DOC struct wrapperbase __pyx_wrapperbase_7questdb_7_client_6Buffer_14__len__; #endif static Py_ssize_t __pyx_pw_7questdb_7_client_6Buffer_15__len__(PyObject *__pyx_v_self) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; Py_ssize_t __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_7questdb_7_client_6Buffer_14__len__(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static Py_ssize_t __pyx_pf_7questdb_7_client_6Buffer_14__len__(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) { Py_ssize_t __pyx_r; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_AddTraceback("questdb._client.Buffer.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; return __pyx_r; }
01527: """
01528: The current number of bytes currently in the buffer, read mid-row
01529: on the same terms as :func:`Buffer.__bytes__`.
01530:
01531: For ILP buffers this is exact, and equivalent (but cheaper) to
01532: ``len(bytes(buffer))``. For QWP buffers it is an estimate of the
01533: encoded size. Over QWP/WebSocket it is never below the size of the
01534: frame a flush encodes, unless store-and-forward has fallen back to
01535: sending full symbol dictionaries.
01536: """
+01537: self._check_impl()
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_impl(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1537, __pyx_L1_error)
+01538: return line_sender_buffer_size(self._impl)
{
__pyx_r = line_sender_buffer_size(__pyx_v_self->_impl);
}
goto __pyx_L0;
01539:
+01540: def __bytes__(self) -> bytes:
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Buffer_17__bytes__(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Buffer_16__bytes__, "Return the constructed buffer as bytes. Use for debugging.\n\n Read from inside a part-written row -- from a column value whose\n conversion runs Python -- this returns the buffer as it stands,\n so the last line has no terminator yet. That is deliberate: a\n read changes nothing, and a snapshot of a buffer mid-row is an\n honest answer to what the buffer holds at that moment. Every\n call that would *act* on the buffer is refused there instead.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Buffer_17__bytes__ = {"__bytes__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Buffer_17__bytes__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Buffer_16__bytes__}; static PyObject *__pyx_pw_7questdb_7_client_6Buffer_17__bytes__(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__bytes__ (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__bytes__", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__bytes__", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_6Buffer_16__bytes__(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Buffer_16__bytes__(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("questdb._client.Buffer.__bytes__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1540, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bytes) < (0)) __PYX_ERR(0, 1540, __pyx_L1_error) __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Buffer_17__bytes__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer___bytes, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[102])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1540, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_17, __pyx_t_25); __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_bytes_2, __pyx_t_17) < (0)) __PYX_ERR(0, 1540, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
01541: """Return the constructed buffer as bytes. Use for debugging.
01542:
01543: Read from inside a part-written row -- from a column value whose
01544: conversion runs Python -- this returns the buffer as it stands,
01545: so the last line has no terminator yet. That is deliberate: a
01546: read changes nothing, and a snapshot of a buffer mid-row is an
01547: honest answer to what the buffer holds at that moment. Every
01548: call that would *act* on the buffer is refused there instead.
01549: """
+01550: return self._to_bytes()
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__to_bytes(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1550, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_1))) __PYX_ERR(0, 1550, __pyx_L1_error) { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = ((PyObject*)__pyx_t_1); } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
01551:
+01552: cdef inline object _to_bytes(self):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__to_bytes(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
struct line_sender_buffer_view __pyx_v_view;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Buffer._to_bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01553: self._check_impl()
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_impl(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1553, __pyx_L1_error)
+01554: cdef line_sender_buffer_view view = line_sender_buffer_peek(self._impl)
__pyx_v_view = line_sender_buffer_peek(__pyx_v_self->_impl);
+01555: return PyBytes_FromStringAndSize(<const char *> view.buf, <Py_ssize_t> view.len)
__pyx_t_2 = PyBytes_FromStringAndSize(((char const *)__pyx_v_view.buf), ((Py_ssize_t)__pyx_v_view.len)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1555, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
01556:
+01557: cdef inline void_int _check_not_in_row(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_method, struct __pyx_opt_args_7questdb_7_client_6Buffer__check_not_in_row *__pyx_optional_args) {
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client.Buffer._check_not_in_row", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
struct __pyx_opt_args_7questdb_7_client_6Buffer__check_not_in_row {
int __pyx_n;
PyObject *hint;
};
+01558: self, str method, str hint=None) except -1:
PyObject *__pyx_v_hint = ((PyObject*)Py_None);
__pyx_t_7questdb_7_client_void_int __pyx_r;
if (__pyx_optional_args) {
if (__pyx_optional_args->__pyx_n > 0) {
__pyx_v_hint = __pyx_optional_args->hint;
}
}
01559: """
01560: Refuse a call that arrives while a row is part-way through
01561: being written into this buffer.
01562:
01563: `row()` and the row-serializing `dataframe()` both hold a
01564: rewind point across values whose conversion runs Python code,
01565: and that code re-enters on the same thread, so nothing else
01566: stands between it and the buffer. The native buffer refuses a
01567: half-written row anyway; what it cannot do is stop the caller's
01568: own error handling from acting on the refusal.
01569:
01570: `hint` is a further sentence for the message, for a refused call
01571: with a remedy of its own.
01572: """
+01573: if self._row_depth != 0:
__pyx_t_1 = (__pyx_v_self->_row_depth != 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+01574: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1574, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+01575: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1575, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1575, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+01576: f"{method}() can't be called while a row is being "
__pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1576, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_while_a_row_is); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1576, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
01577: "written into this buffer. `row()` or `dataframe()` is "
01578: "part-way through and something it called has come "
01579: "back here, most likely a column value whose "
+01580: "conversion runs Python code." +
__pyx_t_8 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_t_7, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1580, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_8}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1574, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 1574, __pyx_L1_error)
+01581: ("" if hint is None else " " + hint))
__pyx_t_1 = (__pyx_v_hint == ((PyObject*)Py_None));
if (__pyx_t_1) {
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__6);
__pyx_t_5 = __pyx_mstate_global->__pyx_kp_u__6;
} else {
__pyx_t_8 = __Pyx_PyUnicode_ConcatSafe(__pyx_mstate_global->__pyx_kp_u__19, __pyx_v_hint); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1581, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_5 = __pyx_t_8;
__pyx_t_8 = 0;
}
01582:
+01583: cdef inline void_int _set_marker(self) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__set_marker(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
struct line_sender_error *__pyx_v_err;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Buffer._set_marker", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01584: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+01585: if not line_sender_buffer_set_marker(self._impl, &err):
__pyx_t_1 = (!line_sender_buffer_set_marker(__pyx_v_self->_impl, (&__pyx_v_err)));
if (unlikely(__pyx_t_1)) {
/* … */
}
+01586: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1586, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 1586, __pyx_L1_error)
+01587: self._marker_set = True
__pyx_v_self->_marker_set = 1;
01588:
+01589: cdef inline void_int _rewind_to_marker(self) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__rewind_to_marker(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
struct line_sender_error *__pyx_v_err;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Buffer._rewind_to_marker", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01590: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
01591: # The rewind point is spent either way: a successful rewind
01592: # consumes it, and a failed one leaves nothing worth keeping.
+01593: self._marker_set = False
__pyx_v_self->_marker_set = 0;
+01594: if not line_sender_buffer_rewind_to_marker(self._impl, &err):
__pyx_t_1 = (!line_sender_buffer_rewind_to_marker(__pyx_v_self->_impl, (&__pyx_v_err)));
if (unlikely(__pyx_t_1)) {
/* … */
}
+01595: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1595, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 1595, __pyx_L1_error)
01596:
+01597: cdef inline _clear_marker(self):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__clear_marker(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01598: line_sender_buffer_clear_marker(self._impl)
line_sender_buffer_clear_marker(__pyx_v_self->_impl);
+01599: self._marker_set = False
__pyx_v_self->_marker_set = 0;
01600:
+01601: cdef inline _rewind_after_failure(self):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__rewind_after_failure(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
struct line_sender_error *__pyx_v_err;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01602: """
01603: Drop the part-written row while an error is already on its way
01604: out to the caller.
01605:
01606: A flush the row itself triggered takes the rewind point with it,
01607: and so does anything that re-enters the buffer while the row is
01608: being assembled. Either way there is no rewind point left, the
01609: part-written row is gone with it, and the error already being
01610: raised is the one the caller needs to see.
01611: """
+01612: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+01613: if not self._marker_set:
__pyx_t_1 = (!__pyx_v_self->_marker_set);
if (__pyx_t_1) {
/* … */
}
+01614: return
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+01615: self._marker_set = False
__pyx_v_self->_marker_set = 0;
+01616: if not line_sender_buffer_rewind_to_marker(self._impl, &err):
__pyx_t_1 = (!line_sender_buffer_rewind_to_marker(__pyx_v_self->_impl, (&__pyx_v_err)));
if (__pyx_t_1) {
/* … */
}
+01617: line_sender_error_free(err)
line_sender_error_free(__pyx_v_err);
01618:
+01619: cdef inline void_int _table(self, str table_name) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__table(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_table_name) {
struct line_sender_error *__pyx_v_err;
struct line_sender_table_name __pyx_v_c_table_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._table", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01620: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
01621: cdef line_sender_table_name c_table_name
+01622: str_to_table_name(
__pyx_t_2 = __pyx_f_7questdb_7_client_str_to_table_name(__pyx_t_1, ((PyObject *)__pyx_v_table_name), (&__pyx_v_c_table_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1622, __pyx_L1_error)
+01623: self._cleared_b(), <PyObject*>table_name, &c_table_name)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1623, __pyx_L1_error)
+01624: if not line_sender_buffer_table(self._impl, c_table_name, &err):
__pyx_t_3 = (!line_sender_buffer_table(__pyx_v_self->_impl, __pyx_v_c_table_name, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
+01625: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1625, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 1625, __pyx_L1_error)
01626:
+01627: cdef inline qdb_pystr_buf* _cleared_b(self):
static CYTHON_INLINE struct qdb_pystr_buf *__pyx_f_7questdb_7_client_6Buffer__cleared_b(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
struct qdb_pystr_buf *__pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
+01628: qdb_pystr_buf_clear(self._b)
qdb_pystr_buf_clear(__pyx_v_self->_b);
+01629: return self._b
{
__pyx_r = __pyx_v_self->_b;
}
goto __pyx_L0;
01630:
+01631: cdef inline void_int _symbol(self, str name, str value) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__symbol(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
struct line_sender_utf8 __pyx_v_c_value;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._symbol", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01632: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
01633: cdef line_sender_column_name c_name
01634: cdef line_sender_utf8 c_value
+01635: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1635, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1635, __pyx_L1_error)
+01636: str_to_utf8(self._b, <PyObject*>value, &c_value)
__pyx_t_2 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_self->_b, ((PyObject *)__pyx_v_value), (&__pyx_v_c_value)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1636, __pyx_L1_error)
+01637: if not line_sender_buffer_symbol(self._impl, c_name, c_value, &err):
__pyx_t_3 = (!line_sender_buffer_symbol(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_c_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
+01638: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1638, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 1638, __pyx_L1_error)
01639:
+01640: cdef inline void_int _column_bool(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_bool(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, int __pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._column_bool", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01641: self, str name, bint value) except -1:
+01642: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
01643: cdef line_sender_column_name c_name
+01644: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1644, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1644, __pyx_L1_error)
+01645: if not line_sender_buffer_column_bool(self._impl, c_name, value, &err):
__pyx_t_3 = (!line_sender_buffer_column_bool(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
+01646: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1646, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 1646, __pyx_L1_error)
01647:
+01648: cdef inline void_int _column_decimal(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_decimal(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client.Buffer._column_decimal", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
return __pyx_r;
}
01649: self, str name, object value) except -1:
01650: cdef line_sender_column_name c_name
+01651: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1651, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1651, __pyx_L1_error)
+01652: return serialize_decimal_py_obj(self._impl, c_name, <PyObject*>value)
__pyx_t_2 = __pyx_f_7questdb_7_client_serialize_decimal_py_obj(__pyx_v_self->_impl, __pyx_v_c_name, ((PyObject *)__pyx_v_value)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1652, __pyx_L1_error)
{
__pyx_r = __pyx_t_2;
}
goto __pyx_L0;
01653:
+01654: cdef inline void_int _require_qwp_column(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_type_name) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.Buffer._require_qwp_column", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01655: self, str type_name) except -1:
+01656: if not self._qwp:
__pyx_t_1 = (!__pyx_v_self->_qwp);
if (unlikely(__pyx_t_1)) {
/* … */
}
+01657: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1657, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+01658: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+01659: f"{type_name} columns require a QWP sender "
__pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_type_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1659, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_columns_require_a_QWP_sender_pr); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1659, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_7}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1657, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 1657, __pyx_L1_error)
01660: "(protocol 'udp', 'ws' or 'wss'); this buffer uses "
01661: "the ILP protocol (tcp/tcps/http/https).")
01662:
+01663: cdef inline void_int _column_binary(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_binary(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
uint8_t const *__pyx_v_data;
size_t __pyx_v_data_len;
Py_buffer __pyx_v_view;
int __pyx_v_release_view;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.Buffer._column_binary", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01664: self, str name, object value) except -1:
+01665: self._require_qwp_column('BINARY')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_BINARY); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1665, __pyx_L1_error)
+01666: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
01667: cdef line_sender_column_name c_name
01668: cdef const uint8_t* data
01669: cdef size_t data_len
01670: cdef Py_buffer view
+01671: cdef bint release_view = False
__pyx_v_release_view = 0;
+01672: if isinstance(value, bytes):
__pyx_t_2 = PyBytes_Check(__pyx_v_value);
if (__pyx_t_2) {
/* … */
goto __pyx_L3;
}
+01673: data = <const uint8_t*>PyBytes_AsString(value)
__pyx_t_3 = PyBytes_AsString(__pyx_v_value); if (unlikely(__pyx_t_3 == ((void *)NULL))) __PYX_ERR(0, 1673, __pyx_L1_error) __pyx_v_data = ((uint8_t const *)__pyx_t_3);
+01674: data_len = <size_t>PyBytes_GET_SIZE(value)
__pyx_v_data_len = ((size_t)PyBytes_GET_SIZE(__pyx_v_value));
+01675: elif isinstance(value, bytearray):
__pyx_t_2 = PyByteArray_Check(__pyx_v_value);
if (__pyx_t_2) {
/* … */
goto __pyx_L3;
}
+01676: data = <const uint8_t*>PyByteArray_AsString(value)
__pyx_v_data = ((uint8_t const *)PyByteArray_AsString(__pyx_v_value));
+01677: data_len = <size_t>PyByteArray_Size(value)
__pyx_v_data_len = ((size_t)PyByteArray_Size(__pyx_v_value));
01678: else:
+01679: if value.itemsize != 1 or not value.c_contiguous:
/*else*/ {
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_mstate_global->__pyx_n_u_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1679, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = (__Pyx_PyLong_BoolNeObjC(__pyx_t_4, __pyx_mstate_global->__pyx_int_1, 1, 0)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 1679, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (!__pyx_t_5) {
} else {
__pyx_t_2 = __pyx_t_5;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_mstate_global->__pyx_n_u_c_contiguous); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1679, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 1679, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_6 = (!__pyx_t_5);
__pyx_t_2 = __pyx_t_6;
__pyx_L5_bool_binop_done:;
if (unlikely(__pyx_t_2)) {
/* … */
}
+01680: raise ValueError(
__pyx_t_7 = NULL;
__pyx_t_8 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_memoryview_BINARY_values_must_be};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1680, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 1680, __pyx_L1_error)
01681: 'memoryview BINARY values must be C-contiguous with '
01682: 'one-byte items.')
+01683: PyObject_GetBuffer(value, &view, PyBUF_SIMPLE)
__pyx_t_9 = PyObject_GetBuffer(__pyx_v_value, (&__pyx_v_view), PyBUF_SIMPLE); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 1683, __pyx_L1_error)
+01684: release_view = True
__pyx_v_release_view = 1;
+01685: data = <const uint8_t*>view.buf
__pyx_v_data = ((uint8_t const *)__pyx_v_view.buf);
+01686: data_len = <size_t>view.len
__pyx_v_data_len = ((size_t)__pyx_v_view.len); } __pyx_L3:;
+01687: try:
/*try:*/ {
+01688: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_10 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1688, __pyx_L8_error) __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_10, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1688, __pyx_L8_error)
+01689: if not line_sender_buffer_column_binary(
__pyx_t_2 = (!line_sender_buffer_column_binary(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_data, __pyx_v_data_len, (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
}
01690: self._impl, c_name, data, data_len, &err):
+01691: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1691, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 1691, __pyx_L8_error)
01692: finally:
+01693: if release_view:
/*finally:*/ {
/*normal exit:*/{
if (__pyx_v_release_view) {
/* … */
}
goto __pyx_L9;
}
__pyx_L8_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
if ( unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__pyx_t_9 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_12 = __pyx_filename;
{
if (__pyx_v_release_view) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ErrRestore(__pyx_t_13, __pyx_t_14, __pyx_t_15);
__pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
__pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_12;
goto __pyx_L1_error;
}
__pyx_L9:;
}
+01694: PyBuffer_Release(&view)
PyBuffer_Release((&__pyx_v_view)); /* … */ PyBuffer_Release((&__pyx_v_view));
01695:
+01696: cdef inline void_int _column_uuid(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_uuid(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
PyObject *__pyx_v_be_bytes = 0;
char *__pyx_v_be;
uint64_t __pyx_v_hi_raw;
uint64_t __pyx_v_lo_raw;
uint64_t __pyx_v_hi;
uint64_t __pyx_v_lo;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client.Buffer._column_uuid", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_be_bytes);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01697: self, str name, object value) except -1:
+01698: self._require_qwp_column('UUID')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_UUID); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1698, __pyx_L1_error)
+01699: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
01700: cdef line_sender_column_name c_name
01701: # Reading `value.int` runs Python code: `UUID` accepts subclasses and
01702: # a subclass may define `int` as a property. That code can recycle
01703: # the string arena an encoded column name borrows from, so the value
01704: # is reduced to C scalars first and the name is encoded after.
01705: #
01706: # `int.to_bytes` is called unbound, so a replaced `UUID.int`
01707: # cannot narrow the result: it is always the 16 bytes
01708: # `UUID.bytes` would give, in one C-implemented call rather than
01709: # the two Python integers a mask and a shift would allocate.
+01710: cdef bytes be_bytes = _INT_TO_BYTES(value.int, 16, 'big')
__pyx_t_3 = NULL; __Pyx_INCREF(__pyx_v_7questdb_7_client__INT_TO_BYTES); __pyx_t_4 = __pyx_v_7questdb_7_client__INT_TO_BYTES; __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_mstate_global->__pyx_n_u_int); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1710, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[4] = {__pyx_t_3, __pyx_t_5, __pyx_mstate_global->__pyx_int_16, __pyx_mstate_global->__pyx_n_u_big}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (4-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1710, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } if (!(likely(PyBytes_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_2))) __PYX_ERR(0, 1710, __pyx_L1_error) __pyx_v_be_bytes = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
+01711: cdef char* be = PyBytes_AsString(be_bytes)
__pyx_t_7 = PyBytes_AsString(__pyx_v_be_bytes); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(0, 1711, __pyx_L1_error) __pyx_v_be = __pyx_t_7;
01712: cdef uint64_t hi_raw
01713: cdef uint64_t lo_raw
+01714: memcpy(&hi_raw, be, 8)
(void)(memcpy((&__pyx_v_hi_raw), __pyx_v_be, 8));
+01715: memcpy(&lo_raw, be + 8, 8)
(void)(memcpy((&__pyx_v_lo_raw), (__pyx_v_be + 8), 8));
+01716: cdef uint64_t hi = bswap64(hi_raw)
__pyx_v_hi = __pyx_f_7questdb_7_client_bswap64(__pyx_v_hi_raw);
+01717: cdef uint64_t lo = bswap64(lo_raw)
__pyx_v_lo = __pyx_f_7questdb_7_client_bswap64(__pyx_v_lo_raw);
+01718: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1718, __pyx_L1_error) __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_8, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1718, __pyx_L1_error)
+01719: if not line_sender_buffer_column_uuid(
__pyx_t_9 = (!line_sender_buffer_column_uuid(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_lo, __pyx_v_hi, (&__pyx_v_err)));
if (unlikely(__pyx_t_9)) {
/* … */
}
01720: self._impl, c_name, lo, hi, &err):
+01721: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1721, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 1721, __pyx_L1_error)
01722:
+01723: cdef inline void_int _column_ipv4(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_ipv4(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
uint32_t __pyx_v_bits;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Buffer._column_ipv4", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01724: self, str name, object value) except -1:
+01725: self._require_qwp_column('IPV4')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_IPV4); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1725, __pyx_L1_error)
+01726: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
01727: cdef line_sender_column_name c_name
01728: # `IPv4Address.__int__` is pure Python and can recycle the string
01729: # arena an encoded column name borrows from, so the value is reduced
01730: # to a C scalar first and the name is encoded after.
+01731: cdef uint32_t bits = <uint32_t>int(value)
__pyx_t_2 = __Pyx_PyNumber_Int(__pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1731, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyLong_As_uint32_t(__pyx_t_2); if (unlikely((__pyx_t_3 == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1731, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_bits = ((uint32_t)__pyx_t_3);
+01732: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_4 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1732, __pyx_L1_error) __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_4, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1732, __pyx_L1_error)
+01733: if not line_sender_buffer_column_ipv4(
__pyx_t_5 = (!line_sender_buffer_column_ipv4(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_bits, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
01734: self._impl, c_name, bits, &err):
+01735: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1735, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 1735, __pyx_L1_error)
01736:
+01737: cdef inline void_int _column_char(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_char(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, struct __pyx_obj_7questdb_7_client_Char *__pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._column_char", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01738: self, str name, Char value) except -1:
+01739: self._require_qwp_column('CHAR')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_CHAR); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1739, __pyx_L1_error)
+01740: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
01741: cdef line_sender_column_name c_name
+01742: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1742, __pyx_L1_error) __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_2, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1742, __pyx_L1_error)
+01743: if not line_sender_buffer_column_char(
__pyx_t_3 = (!line_sender_buffer_column_char(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_value->_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
01744: self._impl, c_name, value._value, &err):
+01745: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1745, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 1745, __pyx_L1_error)
01746:
+01747: cdef inline void_int _column_date_millis(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_date_millis(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, struct __pyx_obj_7questdb_7_client_DateMillis *__pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._column_date_millis", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01748: self, str name, DateMillis value) except -1:
+01749: self._require_qwp_column('DATE')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_DATE); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1749, __pyx_L1_error)
+01750: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
01751: cdef line_sender_column_name c_name
+01752: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1752, __pyx_L1_error) __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_2, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1752, __pyx_L1_error)
+01753: if not line_sender_buffer_column_date(
__pyx_t_3 = (!line_sender_buffer_column_date(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_value->_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
01754: self._impl, c_name, value._value, &err):
+01755: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1755, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 1755, __pyx_L1_error)
01756:
+01757: cdef inline void_int _column_long256(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_long256(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, struct __pyx_obj_7questdb_7_client_Long256 *__pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.Buffer._column_long256", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01758: self, str name, Long256 value) except -1:
+01759: self._require_qwp_column('LONG256')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_LONG256); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1759, __pyx_L1_error)
+01760: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
01761: cdef line_sender_column_name c_name
+01762: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1762, __pyx_L1_error) __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_2, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1762, __pyx_L1_error)
+01763: if not line_sender_buffer_column_long256(
__pyx_t_5 = (!line_sender_buffer_column_long256(__pyx_v_self->_impl, __pyx_v_c_name, ((uint8_t const *)__pyx_t_4), (&__pyx_v_err)));
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(__pyx_t_5)) {
/* … */
}
01764: self._impl, c_name,
+01765: <const uint8_t*>PyBytes_AsString(value._bytes), &err):
__pyx_t_3 = __pyx_v_value->_bytes; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = PyBytes_AsString(__pyx_t_3); if (unlikely(__pyx_t_4 == ((void *)NULL))) __PYX_ERR(0, 1765, __pyx_L1_error)
+01766: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1766, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 1766, __pyx_L1_error)
01767:
+01768: cdef inline void_int _column_geohash(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_geohash(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, struct __pyx_obj_7questdb_7_client_Geohash *__pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._column_geohash", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01769: self, str name, Geohash value) except -1:
+01770: self._require_qwp_column('GEOHASH')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_GEOHASH); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1770, __pyx_L1_error)
+01771: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
01772: cdef line_sender_column_name c_name
+01773: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1773, __pyx_L1_error) __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_2, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1773, __pyx_L1_error)
+01774: if not line_sender_buffer_column_geohash(
__pyx_t_3 = (!line_sender_buffer_column_geohash(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_value->_bits, __pyx_v_value->_precision, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
01775: self._impl, c_name, value._bits, value._precision, &err):
+01776: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1776, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 1776, __pyx_L1_error)
01777:
+01778: cdef inline void_int _column_int(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_int(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
int __pyx_v_overflow;
int64_t __pyx_v_as_i64;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_AddTraceback("questdb._client.Buffer._column_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01779: self, str name, object value) except -1:
01780: # A plain `int` goes to a LONG column, which holds 64 bits. A
01781: # wider value fits only in a LONG256 column, and the `Long256`
01782: # wrapper is what puts it there, so the error names the wrapper.
01783: # `PyLong_AsLongLongAndOverflow` sets a flag instead of raising,
01784: # which is what lets the message be written here.
01785: #
01786: # Only QWP senders have a LONG256 column. On an ILP buffer there
01787: # is nothing to point the user at, so the value goes straight to
01788: # `_column_i64` and the coercion to `int64_t` raises.
+01789: cdef int overflow = 0
__pyx_v_overflow = 0;
01790: cdef int64_t as_i64
+01791: if not self._qwp:
__pyx_t_1 = (!__pyx_v_self->_qwp);
if (__pyx_t_1) {
/* … */
}
+01792: return self._column_i64(name, value)
__pyx_t_2 = __Pyx_PyLong_As_int64_t(__pyx_v_value); if (unlikely((__pyx_t_2 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1792, __pyx_L1_error) __pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_i64(__pyx_v_self, __pyx_v_name, __pyx_t_2); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1792, __pyx_L1_error) { __pyx_r = __pyx_t_3; } goto __pyx_L0;
+01793: as_i64 = <int64_t>PyLong_AsLongLongAndOverflow(value, &overflow)
__pyx_t_4 = PyLong_AsLongLongAndOverflow(__pyx_v_value, (&__pyx_v_overflow)); if (unlikely(__pyx_t_4 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 1793, __pyx_L1_error) __pyx_v_as_i64 = ((int64_t)__pyx_t_4);
+01794: if overflow < 0:
__pyx_t_1 = (__pyx_v_overflow < 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+01795: raise OverflowError(
__pyx_t_6 = NULL;
+01796: f'Bad column {name!r}: integer is below the minimum for a '
__pyx_t_7 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1796, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_8[1] = __pyx_t_7; __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_integer_is_below_the_minimum_fo; __pyx_t_9 = 123; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[1]); #endif __pyx_t_10 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_10 |= __Pyx_PyUnicode_KIND_04(__pyx_t_8[1]); #endif __pyx_t_11 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1796, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_12 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_11}; __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_OverflowError)), __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1795, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __PYX_ERR(0, 1795, __pyx_L1_error)
01797: f'LONG column (-2**63). LONG256 is unsigned and cannot '
01798: f'store negative values.')
+01799: if overflow > 0:
__pyx_t_1 = (__pyx_v_overflow > 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+01800: raise OverflowError(
__pyx_t_11 = NULL;
+01801: f'Bad column {name!r}: integer out of range for a LONG '
__pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1801, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_8[1] = __pyx_t_6; __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_integer_out_of_range_for_a_LONG; __pyx_t_9 = 131; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[1]); #endif __pyx_t_10 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_10 |= __Pyx_PyUnicode_KIND_04(__pyx_t_8[1]); #endif __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1801, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_12 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_7}; __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_OverflowError)), __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1800, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __PYX_ERR(0, 1800, __pyx_L1_error)
01802: f'column (-2**63 .. 2**63-1). Wrap it in `Long256(...)` '
01803: f'to store it in a LONG256 column.')
+01804: return self._column_i64(name, as_i64)
__pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_i64(__pyx_v_self, __pyx_v_name, __pyx_v_as_i64); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1804, __pyx_L1_error)
{
__pyx_r = __pyx_t_3;
}
goto __pyx_L0;
01805:
+01806: cdef inline void_int _column_i64(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_i64(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, int64_t __pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._column_i64", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01807: self, str name, int64_t value) except -1:
+01808: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
01809: cdef line_sender_column_name c_name
+01810: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1810, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1810, __pyx_L1_error)
+01811: if not line_sender_buffer_column_i64(self._impl, c_name, value, &err):
__pyx_t_3 = (!line_sender_buffer_column_i64(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
+01812: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1812, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 1812, __pyx_L1_error)
+01813: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
01814:
+01815: cdef inline void_int _column_f64(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_f64(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, double __pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._column_f64", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01816: self, str name, double value) except -1:
+01817: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
01818: cdef line_sender_column_name c_name
+01819: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1819, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1819, __pyx_L1_error)
+01820: if not line_sender_buffer_column_f64(self._impl, c_name, value, &err):
__pyx_t_3 = (!line_sender_buffer_column_f64(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
+01821: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1821, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 1821, __pyx_L1_error)
01822:
+01823: cdef inline void_int _column_str(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_str(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
struct line_sender_utf8 __pyx_v_c_value;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._column_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01824: self, str name, str value) except -1:
+01825: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
01826: cdef line_sender_column_name c_name
01827: cdef line_sender_utf8 c_value
01828: # The name is encoded first because `_cleared_b()` recycles the
01829: # arena; the value is appended after it, and an append leaves
01830: # every pointer already handed out where it is.
+01831: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1831, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1831, __pyx_L1_error)
+01832: str_to_utf8(self._b, <PyObject*>value, &c_value)
__pyx_t_2 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_self->_b, ((PyObject *)__pyx_v_value), (&__pyx_v_c_value)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1832, __pyx_L1_error)
+01833: if not line_sender_buffer_column_str(self._impl, c_name, c_value, &err):
__pyx_t_3 = (!line_sender_buffer_column_str(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_c_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
+01834: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1834, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 1834, __pyx_L1_error)
01835:
+01836: cdef inline void_int _column_ts_micros(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_ts_micros(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, struct __pyx_obj_7questdb_7_client_TimestampMicros *__pyx_v_ts) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._column_ts_micros", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01837: self, str name, TimestampMicros ts) except -1:
+01838: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
01839: cdef line_sender_column_name c_name
+01840: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1840, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1840, __pyx_L1_error)
+01841: if not line_sender_buffer_column_ts_micros(self._impl, c_name, ts._value, &err):
__pyx_t_3 = (!line_sender_buffer_column_ts_micros(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_ts->_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
+01842: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1842, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 1842, __pyx_L1_error)
01843:
+01844: cdef inline void_int _column_ts_nanos(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_ts_nanos(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, struct __pyx_obj_7questdb_7_client_TimestampNanos *__pyx_v_ts) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._column_ts_nanos", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01845: self, str name, TimestampNanos ts) except -1:
+01846: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
01847: cdef line_sender_column_name c_name
+01848: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1848, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1848, __pyx_L1_error)
+01849: if not line_sender_buffer_column_ts_nanos(self._impl, c_name, ts._value, &err):
__pyx_t_3 = (!line_sender_buffer_column_ts_nanos(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_ts->_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
+01850: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1850, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 1850, __pyx_L1_error)
01851:
+01852: cdef inline void_int _column_numpy(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_numpy(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyArrayObject *__pyx_v_arr) {
size_t __pyx_v_rank;
double const *__pyx_v_data_ptr;
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.Buffer._column_numpy", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01853: self, str name, cnp.ndarray arr) except -1:
+01854: if cnp.PyArray_TYPE(arr) != cnp.NPY_FLOAT64:
__pyx_t_1 = (PyArray_TYPE(__pyx_v_arr) != NPY_FLOAT64);
if (unlikely(__pyx_t_1)) {
/* … */
}
+01855: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1855, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+01856: QuestDBErrorCode.ArrayError,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1856, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ArrayError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1856, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+01857: f'Only float64 numpy arrays are supported, got dtype: {arr.dtype}')
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_arr), __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1857, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1857, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_Only_float64_numpy_arrays_are_su, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1857, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_5}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1855, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 1855, __pyx_L1_error)
01858: cdef:
+01859: size_t rank = cnp.PyArray_NDIM(arr)
__pyx_v_rank = PyArray_NDIM(__pyx_v_arr);
+01860: const double * data_ptr = <const double*> cnp.PyArray_DATA(arr)
__pyx_v_data_ptr = ((double const *)PyArray_DATA(__pyx_v_arr));
+01861: line_sender_error * err = NULL
__pyx_v_err = NULL;
01862: line_sender_column_name c_name
01863:
+01864: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_9 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1864, __pyx_L1_error) __pyx_t_10 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_9, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1864, __pyx_L1_error)
01865:
+01866: if cnp.PyArray_FLAGS(arr) & cnp.NPY_ARRAY_C_CONTIGUOUS != 0:
__pyx_t_1 = ((PyArray_FLAGS(__pyx_v_arr) & NPY_ARRAY_C_CONTIGUOUS) != 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L4;
}
+01867: if not line_sender_buffer_column_f64_arr_c_major(
__pyx_t_1 = (!line_sender_buffer_column_f64_arr_c_major(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_rank, ((size_t const *)PyArray_DIMS(__pyx_v_arr)), __pyx_v_data_ptr, PyArray_SIZE(__pyx_v_arr), (&__pyx_v_err))); if (unlikely(__pyx_t_1)) { /* … */ }
01868: self._impl,
01869: c_name,
01870: rank,
01871: <const size_t*> cnp.PyArray_DIMS(arr),
01872: data_ptr,
01873: cnp.PyArray_SIZE(arr),
01874: &err):
+01875: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1875, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 1875, __pyx_L1_error)
01876: else:
+01877: if not line_sender_buffer_column_f64_arr_byte_strides(
/*else*/ {
/* … */
__pyx_t_1 = (!line_sender_buffer_column_f64_arr_byte_strides(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_rank, ((size_t const *)PyArray_DIMS(__pyx_v_arr)), ((Py_ssize_t const *)PyArray_STRIDES(__pyx_v_arr)), __pyx_v_data_ptr, PyArray_SIZE(__pyx_v_arr), (&__pyx_v_err)));
/* … */
if (unlikely(__pyx_t_1)) {
/* … */
}
}
__pyx_L4:;
01878: self._impl,
01879: c_name,
01880: rank,
01881: <const size_t*> cnp.PyArray_DIMS(arr),
01882: <const ssize_t*> cnp.PyArray_STRIDES(arr), # N.B.: Strides expressed as byte jumps
01883: data_ptr,
01884: cnp.PyArray_SIZE(arr),
01885: &err):
+01886: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1886, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 1886, __pyx_L1_error)
01887:
+01888: cdef inline void_int _column_dt(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_dt(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyDateTime_DateTime *__pyx_v_dt) {
struct line_sender_error *__pyx_v_err;
struct line_sender_column_name __pyx_v_c_name;
int64_t __pyx_v_micros;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client.Buffer._column_dt", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01889: self, str name, cp_datetime dt) except -1:
+01890: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
01891: cdef line_sender_column_name c_name
01892: # We limit ourselves to micros, since this is the maxium precision
01893: # exposed by the datetime library in Python.
01894: #
01895: # `datetime_to_micros` runs Python: subtracting two aware datetimes
01896: # calls the caller's `tzinfo.utcoffset()`, and a naive one reaches
01897: # `warnings.warn`. That code can recycle the string arena an encoded
01898: # column name borrows from, so the value is reduced to a C scalar
01899: # first and the name is encoded after.
+01900: cdef int64_t micros = datetime_to_micros(dt)
__pyx_t_1 = __pyx_f_7questdb_7_client_datetime_to_micros(__pyx_v_dt); if (unlikely(__pyx_t_1 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 1900, __pyx_L1_error) __pyx_v_micros = __pyx_t_1;
+01901: str_to_column_name(self._cleared_b(), name, &c_name)
__pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1901, __pyx_L1_error) __pyx_t_3 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_2, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1901, __pyx_L1_error)
+01902: if not line_sender_buffer_column_ts_micros(
__pyx_t_4 = (!line_sender_buffer_column_ts_micros(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_micros, (&__pyx_v_err)));
if (unlikely(__pyx_t_4)) {
/* … */
}
01903: self._impl, c_name, micros, &err):
+01904: raise c_err_to_py(err)
__pyx_t_5 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1904, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __PYX_ERR(0, 1904, __pyx_L1_error)
01905:
+01906: cdef inline void_int _column(self, str name, object value) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Buffer._column", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01907: # An encoded column name borrows storage that `Buffer.clear()`
01908: # recycles, so it stays valid only while no Python code runs. Every
01909: # branch therefore takes the name as a `str` and encodes it itself,
01910: # immediately before its own native call and after any conversion
01911: # that runs the caller's Python. The property that keeps this true
01912: # is visible in the signatures: no `_column_*` helper accepts a
01913: # `line_sender_column_name`, and
01914: # `test_no_column_helper_takes_a_pre_encoded_name` holds it there.
+01915: if PyBool_Check(<PyObject*>value):
__pyx_t_1 = PyBool_Check(((PyObject *)__pyx_v_value));
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+01916: self._column_bool(name, value)
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1916, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_bool(__pyx_v_self, __pyx_v_name, __pyx_t_1); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1916, __pyx_L1_error)
+01917: elif PyLong_CheckExact(<PyObject*>value):
__pyx_t_1 = PyLong_CheckExact(((PyObject *)__pyx_v_value));
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+01918: self._column_int(name, value)
__pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_int(__pyx_v_self, __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1918, __pyx_L1_error)
+01919: elif PyFloat_CheckExact(<PyObject*>value):
__pyx_t_1 = PyFloat_CheckExact(((PyObject *)__pyx_v_value));
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+01920: self._column_f64(name, value)
__pyx_t_3 = __Pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_3 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1920, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_f64(__pyx_v_self, __pyx_v_name, __pyx_t_3); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1920, __pyx_L1_error)
+01921: elif PyUnicode_CheckExact(<PyObject*>value):
__pyx_t_1 = PyUnicode_CheckExact(((PyObject *)__pyx_v_value));
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+01922: self._column_str(name, value)
__pyx_t_4 = __pyx_v_value;
__Pyx_INCREF(__pyx_t_4);
if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_4))) __PYX_ERR(0, 1922, __pyx_L1_error)
__pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_str(__pyx_v_self, __pyx_v_name, ((PyObject*)__pyx_t_4)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1922, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+01923: elif isinstance(value, TimestampMicros):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+01924: self._column_ts_micros(name, value)
if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros))))) __PYX_ERR(0, 1924, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_ts_micros(__pyx_v_self, __pyx_v_name, ((struct __pyx_obj_7questdb_7_client_TimestampMicros *)__pyx_v_value)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1924, __pyx_L1_error)
+01925: elif isinstance(value, TimestampNanos):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+01926: self._column_ts_nanos(name, value)
if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos))))) __PYX_ERR(0, 1926, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_ts_nanos(__pyx_v_self, __pyx_v_name, ((struct __pyx_obj_7questdb_7_client_TimestampNanos *)__pyx_v_value)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1926, __pyx_L1_error)
+01927: elif PyArray_CheckExact(<PyObject *> value):
__pyx_t_1 = PyArray_CheckExact(((PyObject *)__pyx_v_value));
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+01928: self._column_numpy(name, value)
if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1928, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_numpy(__pyx_v_self, __pyx_v_name, ((PyArrayObject *)__pyx_v_value)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1928, __pyx_L1_error)
+01929: elif isinstance(value, cp_datetime):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+01930: self._column_dt(name, value)
if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 1930, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_dt(__pyx_v_self, __pyx_v_name, ((PyDateTime_DateTime *)__pyx_v_value)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1930, __pyx_L1_error)
+01931: elif _is_decimal(value):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_decimal(__pyx_v_value);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+01932: self._column_decimal(name, value)
__pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_decimal(__pyx_v_self, __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1932, __pyx_L1_error)
01933: else:
+01934: self._column_qwp_only(name, value)
/*else*/ {
__pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_Buffer *)__pyx_v_self->__pyx_vtab)->_column_qwp_only(__pyx_v_self, __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1934, __pyx_L1_error)
}
__pyx_L3:;
01935:
+01936: cdef void_int _column_qwp_only(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_qwp_only(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
PyObject *__pyx_v_valid = NULL;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_AddTraceback("questdb._client.Buffer._column_qwp_only", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_valid);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
01937: self, str name, object value) except -1:
01938: # The QWP-only cell types and the unsupported-type error live
01939: # out of line, and deliberately not `inline`. `_column` dispatches
01940: # every cell of every row, and with these branches out of it the
01941: # common bool / int / float / str / datetime cells run through a
01942: # short function.
01943: #
01944: # Within this function the four wrapper classes come before
01945: # `uuid.UUID` and the IPV4 test. They are the cheapest checks in
01946: # the chain -- an exact type test against a cdef class -- and
01947: # none of them can be a UUID or an address, so nothing becomes
01948: # reachable only through the more expensive pair.
+01949: if isinstance(value, (bytes, bytearray, memoryview)):
__pyx_t_2 = PyBytes_Check(__pyx_v_value);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = PyByteArray_Check(__pyx_v_value);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = PyMemoryView_Check(__pyx_v_value);
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+01950: self._column_binary(name, value)
__pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_binary(__pyx_v_self, __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1950, __pyx_L1_error)
+01951: elif isinstance(value, Char):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Char);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+01952: self._column_char(name, value)
if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Char))))) __PYX_ERR(0, 1952, __pyx_L1_error) __pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_char(__pyx_v_self, __pyx_v_name, ((struct __pyx_obj_7questdb_7_client_Char *)__pyx_v_value)); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1952, __pyx_L1_error)
+01953: elif isinstance(value, DateMillis):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+01954: self._column_date_millis(name, value)
if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis))))) __PYX_ERR(0, 1954, __pyx_L1_error) __pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_date_millis(__pyx_v_self, __pyx_v_name, ((struct __pyx_obj_7questdb_7_client_DateMillis *)__pyx_v_value)); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1954, __pyx_L1_error)
+01955: elif isinstance(value, Long256):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Long256);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+01956: self._column_long256(name, value)
if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Long256))))) __PYX_ERR(0, 1956, __pyx_L1_error) __pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_long256(__pyx_v_self, __pyx_v_name, ((struct __pyx_obj_7questdb_7_client_Long256 *)__pyx_v_value)); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1956, __pyx_L1_error)
+01957: elif isinstance(value, Geohash):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Geohash);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+01958: self._column_geohash(name, value)
if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Geohash))))) __PYX_ERR(0, 1958, __pyx_L1_error) __pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_geohash(__pyx_v_self, __pyx_v_name, ((struct __pyx_obj_7questdb_7_client_Geohash *)__pyx_v_value)); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1958, __pyx_L1_error)
+01959: elif type(value) is _UUID or isinstance(value, _UUID):
__pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_value)) == __pyx_v_7questdb_7_client__UUID);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L7_bool_binop_done;
}
__pyx_t_4 = __pyx_v_7questdb_7_client__UUID;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_2 = PyObject_IsInstance(__pyx_v_value, __pyx_t_4); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 1959, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_1 = __pyx_t_2;
__pyx_L7_bool_binop_done:;
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+01960: self._column_uuid(name, value)
__pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_uuid(__pyx_v_self, __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1960, __pyx_L1_error)
+01961: elif _is_ipv4_address(value):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_ipv4_address(__pyx_v_value); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1961, __pyx_L1_error) if (__pyx_t_1) { /* … */ goto __pyx_L3; }
+01962: self._column_ipv4(name, value)
__pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_ipv4(__pyx_v_self, __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1962, __pyx_L1_error)
01963: else:
+01964: if isinstance(value, _IPV6_ADDRESS):
/*else*/ {
__pyx_t_4 = __pyx_v_7questdb_7_client__IPV6_ADDRESS;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_1 = PyObject_IsInstance(__pyx_v_value, __pyx_t_4); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1964, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(__pyx_t_1)) {
/* … */
}
+01965: raise TypeError(
__pyx_t_5 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_IPv6_is_not_supported_QuestDB_ha};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1965, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 1965, __pyx_L1_error)
01966: 'IPv6 is not supported; QuestDB has no IPv6 column type.')
+01967: if isinstance(value, _IPV4_INTERFACE):
__pyx_t_4 = __pyx_v_7questdb_7_client__IPV4_INTERFACE;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_1 = PyObject_IsInstance(__pyx_v_value, __pyx_t_4); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1967, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(__pyx_t_1)) {
/* … */
}
01968: # It subclasses IPv4Address, so the list below would
01969: # otherwise appear to contain the thing just rejected.
+01970: raise TypeError(
__pyx_t_5 = NULL;
01971: _IPV4_INTERFACE_REASON
+01972: + ' Pass its address instead, as `value.ip`.')
__pyx_t_7 = __Pyx_PyUnicode_ConcatSafe(__pyx_v_7questdb_7_client__IPV4_INTERFACE_REASON, __pyx_mstate_global->__pyx_kp_u_Pass_its_address_instead_as_val); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1972, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_7}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1970, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 1970, __pyx_L1_error)
+01973: valid = ', '.join((
__pyx_t_4 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__26, __pyx_mstate_global->__pyx_tuple[27]); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1973, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_valid = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0;
+01974: 'bool',
{
PyObject* __pyx_temp[18] = {__pyx_mstate_global->__pyx_n_u_bool, __pyx_mstate_global->__pyx_n_u_int, __pyx_mstate_global->__pyx_n_u_float, __pyx_mstate_global->__pyx_n_u_str_2, __pyx_mstate_global->__pyx_n_u_TimestampMicros_2, __pyx_mstate_global->__pyx_n_u_TimestampNanos_2, __pyx_mstate_global->__pyx_kp_u_datetime_datetime, __pyx_mstate_global->__pyx_kp_u_numpy_ndarray, __pyx_mstate_global->__pyx_kp_u_decimal_Decimal, __pyx_mstate_global->__pyx_n_u_bytes, __pyx_mstate_global->__pyx_n_u_bytearray, __pyx_mstate_global->__pyx_n_u_memoryview, __pyx_mstate_global->__pyx_kp_u_uuid_UUID, __pyx_mstate_global->__pyx_kp_u_ipaddress_IPv4Address, __pyx_mstate_global->__pyx_n_u_Char_2, __pyx_mstate_global->__pyx_n_u_DateMillis_2, __pyx_mstate_global->__pyx_n_u_Long256_2, __pyx_mstate_global->__pyx_n_u_Geohash_2};
__pyx_mstate_global->__pyx_tuple[27] = __Pyx_PyTuple_FromArray(__pyx_temp, 18); if (unlikely(!__pyx_mstate_global->__pyx_tuple[27])) __PYX_ERR(0, 1974, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[27]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[27]);
01975: 'int',
01976: 'float',
01977: 'str',
01978: 'TimestampMicros',
01979: 'TimestampNanos',
01980: 'datetime.datetime',
01981: 'numpy.ndarray',
01982: 'decimal.Decimal',
01983: 'bytes',
01984: 'bytearray',
01985: 'memoryview',
01986: 'uuid.UUID',
01987: 'ipaddress.IPv4Address',
01988: 'Char',
01989: 'DateMillis',
01990: 'Long256',
01991: 'Geohash'))
+01992: raise TypeError(
__pyx_t_7 = NULL;
+01993: f'Unsupported type: {_fqn(type(value))}. Must be one of: {valid}')
__pyx_t_5 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_value)))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1993, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1993, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_valid); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1993, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_9[0] = __pyx_mstate_global->__pyx_kp_u_Unsupported_type; __pyx_t_9[1] = __pyx_t_8; __pyx_t_9[2] = __pyx_mstate_global->__pyx_kp_u_Must_be_one_of; __pyx_t_9[3] = __pyx_t_5; __pyx_t_10 = 36; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9[3]); #endif __pyx_t_11 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_11 |= __Pyx_PyUnicode_KIND_04(__pyx_t_9[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_9[3]); #endif __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_9, 4, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1993, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_12}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1992, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 1992, __pyx_L1_error) } __pyx_L3:;
01994:
+01995: cdef inline void_int _may_trigger_row_complete(self) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__may_trigger_row_complete(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
PyObject *__pyx_v_sender;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Buffer._may_trigger_row_complete", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+01996: cdef PyObject* sender = NULL
__pyx_v_sender = NULL;
+01997: if self._row_complete_sender != None:
__pyx_t_1 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_v_self->_row_complete_sender, Py_None, Py_NE); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1997, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+01998: if PyWeakref_GetRef(self._row_complete_sender, &sender):
__pyx_t_2 = __pyx_v_self->_row_complete_sender;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_1 = __Pyx_PyWeakref_GetRef(__pyx_t_2, (&__pyx_v_sender));
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_1) {
/* … */
}
+01999: try:
/*try:*/ {
+02000: may_flush_on_row_complete(
__pyx_t_3 = __pyx_f_7questdb_7_client_may_flush_on_row_complete(__pyx_v_self, ((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_sender)); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2000, __pyx_L6_error)
}
02001: self, <Sender><object>sender)
02002: finally:
+02003: Py_XDECREF(sender)
/*finally:*/ {
/*normal exit:*/{
Py_XDECREF(__pyx_v_sender);
goto __pyx_L7;
}
__pyx_L6_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
{
Py_XDECREF(__pyx_v_sender);
}
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
goto __pyx_L1_error;
}
__pyx_L7:;
}
02004:
+02005: cdef inline void_int _at_ts_us(self, TimestampMicros ts) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_ts_us(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, struct __pyx_obj_7questdb_7_client_TimestampMicros *__pyx_v_ts) {
struct line_sender_error *__pyx_v_err;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Buffer._at_ts_us", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+02006: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+02007: if not line_sender_buffer_at_micros(self._impl, ts._value, &err):
__pyx_t_1 = (!line_sender_buffer_at_micros(__pyx_v_self->_impl, __pyx_v_ts->_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_1)) {
/* … */
}
+02008: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2008, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 2008, __pyx_L1_error)
02009:
+02010: cdef inline void_int _at_ts_ns(self, TimestampNanos ts) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_ts_ns(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, struct __pyx_obj_7questdb_7_client_TimestampNanos *__pyx_v_ts) {
struct line_sender_error *__pyx_v_err;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Buffer._at_ts_ns", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+02011: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+02012: if not line_sender_buffer_at_nanos(self._impl, ts._value, &err):
__pyx_t_1 = (!line_sender_buffer_at_nanos(__pyx_v_self->_impl, __pyx_v_ts->_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_1)) {
/* … */
}
+02013: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2013, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 2013, __pyx_L1_error)
02014:
+02015: cdef inline void_int _at_dt(self, cp_datetime dt) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_dt(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyDateTime_DateTime *__pyx_v_dt) {
int64_t __pyx_v_value;
struct line_sender_error *__pyx_v_err;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.Buffer._at_dt", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+02016: cdef int64_t value = datetime_to_micros(dt)
__pyx_t_1 = __pyx_f_7questdb_7_client_datetime_to_micros(__pyx_v_dt); if (unlikely(__pyx_t_1 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 2016, __pyx_L1_error) __pyx_v_value = __pyx_t_1;
+02017: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+02018: if not line_sender_buffer_at_micros(self._impl, value, &err):
__pyx_t_2 = (!line_sender_buffer_at_micros(__pyx_v_self->_impl, __pyx_v_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
+02019: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2019, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 2019, __pyx_L1_error)
02020:
+02021: cdef inline void_int _at_now(self) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_now(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
struct line_sender_error *__pyx_v_err;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Buffer._at_now", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+02022: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+02023: if not line_sender_buffer_at_now(self._impl, &err):
__pyx_t_1 = (!line_sender_buffer_at_now(__pyx_v_self->_impl, (&__pyx_v_err)));
if (unlikely(__pyx_t_1)) {
/* … */
}
+02024: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2024, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 2024, __pyx_L1_error)
02025:
+02026: cdef inline void_int _at(self, object ts) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_ts) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_AddTraceback("questdb._client.Buffer._at", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+02027: if ts is None:
__pyx_t_1 = (__pyx_v_ts == Py_None);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+02028: self._at_now()
__pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__at_now(__pyx_v_self); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2028, __pyx_L1_error)
+02029: elif isinstance(ts, TimestampMicros):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_ts, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+02030: self._at_ts_us(ts)
if (!(likely(((__pyx_v_ts) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_ts, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros))))) __PYX_ERR(0, 2030, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__at_ts_us(__pyx_v_self, ((struct __pyx_obj_7questdb_7_client_TimestampMicros *)__pyx_v_ts)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2030, __pyx_L1_error)
+02031: elif isinstance(ts, TimestampNanos):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_ts, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+02032: self._at_ts_ns(ts)
if (!(likely(((__pyx_v_ts) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_ts, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos))))) __PYX_ERR(0, 2032, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__at_ts_ns(__pyx_v_self, ((struct __pyx_obj_7questdb_7_client_TimestampNanos *)__pyx_v_ts)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2032, __pyx_L1_error)
+02033: elif isinstance(ts, cp_datetime):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_ts, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime);
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L3;
}
+02034: self._at_dt(ts)
if (!(likely(((__pyx_v_ts) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_ts, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 2034, __pyx_L1_error) __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__at_dt(__pyx_v_self, ((PyDateTime_DateTime *)__pyx_v_ts)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2034, __pyx_L1_error)
02035: else:
+02036: raise TypeError(
/*else*/ {
__pyx_t_4 = NULL;
+02037: f'Unsupported type: {_fqn(type(ts))}. Must be one of: ' +
__pyx_t_5 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_ts)))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2037, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2037, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7[0] = __pyx_mstate_global->__pyx_kp_u_Unsupported_type; __pyx_t_7[1] = __pyx_t_6; __pyx_t_7[2] = __pyx_mstate_global->__pyx_kp_u_Must_be_one_of_TimestampNanos_d; __pyx_t_8 = 66; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7[1]); #endif __pyx_t_9 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_9 |= __Pyx_PyUnicode_KIND_04(__pyx_t_7[1]); #endif __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_7, 3, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2037, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_5}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2036, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 2036, __pyx_L1_error) } __pyx_L3:;
02038: 'TimestampNanos, datetime, None')
02039:
+02040: cdef void_int _row(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__row(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, int __pyx_v_allow_auto_flush, PyObject *__pyx_v_table_name, struct __pyx_opt_args_7questdb_7_client_6Buffer__row *__pyx_optional_args) {
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_AddTraceback("questdb._client.Buffer._row", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_name);
__Pyx_XDECREF(__pyx_v_value);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
struct __pyx_opt_args_7questdb_7_client_6Buffer__row {
int __pyx_n;
PyObject *symbols;
PyObject *columns;
PyObject *at;
int keep_marker;
};
02041: self,
02042: bint allow_auto_flush,
02043: str table_name,
+02044: dict symbols=None,
PyObject *__pyx_v_symbols = ((PyObject*)Py_None);
+02045: dict columns=None,
PyObject *__pyx_v_columns = ((PyObject*)Py_None);
+02046: object at=None,
PyObject *__pyx_v_at = ((PyObject *)Py_None);
+02047: bint keep_marker=False) except -1:
int __pyx_v_keep_marker = ((int)0);
int __pyx_v_wrote_fields;
PyObject *__pyx_v_name = NULL;
PyObject *__pyx_v_value = NULL;
__pyx_t_7questdb_7_client_void_int __pyx_r;
if (__pyx_optional_args) {
if (__pyx_optional_args->__pyx_n > 0) {
__pyx_v_symbols = __pyx_optional_args->symbols;
if (__pyx_optional_args->__pyx_n > 1) {
__pyx_v_columns = __pyx_optional_args->columns;
if (__pyx_optional_args->__pyx_n > 2) {
__pyx_v_at = __pyx_optional_args->at;
if (__pyx_optional_args->__pyx_n > 3) {
__pyx_v_keep_marker = __pyx_optional_args->keep_marker;
}
}
}
}
}
02048: """
02049: Add a row to the buffer.
02050: """
+02051: cdef bint wrote_fields = False
__pyx_v_wrote_fields = 0;
+02052: self._check_impl()
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_impl(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2052, __pyx_L1_error)
+02053: self._set_marker()
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__set_marker(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2053, __pyx_L1_error)
02054: # A column value whose conversion runs Python code can call back
02055: # into whatever owns this buffer. `_row_depth` is how those owners
02056: # tell "a row is part-way through" from "a rewind point is held":
02057: # `PooledSender.row` deliberately keeps the marker set across its
02058: # own flush, so `_marker_set` cannot answer that question.
+02059: self._row_depth += 1
__pyx_v_self->_row_depth = (__pyx_v_self->_row_depth + 1);
+02060: try:
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L11_try_end;
__pyx_L6_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
__pyx_L8_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L4_error;
__pyx_L11_try_end:;
}
}
+02061: self._table(table_name)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__table(__pyx_v_self, __pyx_v_table_name); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2061, __pyx_L6_error)
+02062: if symbols is not None:
__pyx_t_5 = (__pyx_v_symbols != ((PyObject*)Py_None));
if (__pyx_t_5) {
/* … */
}
+02063: for name, value in symbols.items():
__pyx_t_7 = 0;
if (unlikely(__pyx_v_symbols == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
__PYX_ERR(0, 2063, __pyx_L6_error)
}
__pyx_t_10 = __Pyx_dict_iterator(__pyx_v_symbols, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2063, __pyx_L6_error)
__Pyx_GOTREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_6);
__pyx_t_6 = __pyx_t_10;
__pyx_t_10 = 0;
while (1) {
__pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_8, &__pyx_t_7, &__pyx_t_10, &__pyx_t_11, NULL, __pyx_t_9);
if (unlikely(__pyx_t_12 == 0)) break;
if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 2063, __pyx_L6_error)
__Pyx_GOTREF(__pyx_t_10);
__Pyx_GOTREF(__pyx_t_11);
__Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_10);
__pyx_t_10 = 0;
__Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_11);
__pyx_t_11 = 0;
+02064: if value is not None:
__pyx_t_5 = (__pyx_v_value != Py_None);
if (__pyx_t_5) {
/* … */
}
}
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+02065: self._symbol(name, value)
__pyx_t_11 = __pyx_v_name;
__Pyx_INCREF(__pyx_t_11);
if (!(likely(PyUnicode_CheckExact(__pyx_t_11))||((__pyx_t_11) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_11))) __PYX_ERR(0, 2065, __pyx_L6_error)
__pyx_t_10 = __pyx_v_value;
__Pyx_INCREF(__pyx_t_10);
if (!(likely(PyUnicode_CheckExact(__pyx_t_10))||((__pyx_t_10) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_10))) __PYX_ERR(0, 2065, __pyx_L6_error)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__symbol(__pyx_v_self, ((PyObject*)__pyx_t_11), ((PyObject*)__pyx_t_10)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2065, __pyx_L6_error)
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+02066: wrote_fields = True
__pyx_v_wrote_fields = 1;
+02067: if columns is not None:
__pyx_t_5 = (__pyx_v_columns != ((PyObject*)Py_None));
if (__pyx_t_5) {
/* … */
}
+02068: for name, value in columns.items():
__pyx_t_8 = 0;
if (unlikely(__pyx_v_columns == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
__PYX_ERR(0, 2068, __pyx_L6_error)
}
__pyx_t_10 = __Pyx_dict_iterator(__pyx_v_columns, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_7), (&__pyx_t_9)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2068, __pyx_L6_error)
__Pyx_GOTREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_6);
__pyx_t_6 = __pyx_t_10;
__pyx_t_10 = 0;
while (1) {
__pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_7, &__pyx_t_8, &__pyx_t_10, &__pyx_t_11, NULL, __pyx_t_9);
if (unlikely(__pyx_t_12 == 0)) break;
if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 2068, __pyx_L6_error)
__Pyx_GOTREF(__pyx_t_10);
__Pyx_GOTREF(__pyx_t_11);
__Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_10);
__pyx_t_10 = 0;
__Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_11);
__pyx_t_11 = 0;
+02069: if value is not None:
__pyx_t_5 = (__pyx_v_value != Py_None);
if (__pyx_t_5) {
/* … */
}
}
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+02070: self._column(name, value)
__pyx_t_11 = __pyx_v_name;
__Pyx_INCREF(__pyx_t_11);
if (!(likely(PyUnicode_CheckExact(__pyx_t_11))||((__pyx_t_11) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_11))) __PYX_ERR(0, 2070, __pyx_L6_error)
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__column(__pyx_v_self, ((PyObject*)__pyx_t_11), __pyx_v_value); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2070, __pyx_L6_error)
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+02071: wrote_fields = True
__pyx_v_wrote_fields = 1;
+02072: if wrote_fields:
if (__pyx_v_wrote_fields) {
/* … */
goto __pyx_L20;
}
+02073: self._at(at if not isinstance(at, ServerTimestampType) else None)
__Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_ServerTimestampType); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2073, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_5 = PyObject_IsInstance(__pyx_v_at, __pyx_t_11); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 2073, __pyx_L6_error) __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_13 = (!__pyx_t_5); if (__pyx_t_13) { __Pyx_INCREF(__pyx_v_at); __pyx_t_6 = __pyx_v_at; } else { __Pyx_INCREF(Py_None); __pyx_t_6 = Py_None; } __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__at(__pyx_v_self, __pyx_t_6); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2073, __pyx_L6_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+02074: if not keep_marker:
__pyx_t_13 = (!__pyx_v_keep_marker);
if (__pyx_t_13) {
/* … */
}
+02075: self._clear_marker()
__pyx_t_6 = __pyx_f_7questdb_7_client_6Buffer__clear_marker(__pyx_v_self); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2075, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
02076: else:
+02077: self._rewind_to_marker()
/*else*/ {
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__rewind_to_marker(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2077, __pyx_L6_error)
}
__pyx_L20:;
+02078: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client.Buffer._row", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_11, &__pyx_t_10) < 0) __PYX_ERR(0, 2078, __pyx_L8_except_error)
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_10);
+02079: self._rewind_after_failure()
__pyx_t_14 = __pyx_f_7questdb_7_client_6Buffer__rewind_after_failure(__pyx_v_self); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2079, __pyx_L8_except_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+02080: raise
__Pyx_GIVEREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_11); __Pyx_XGIVEREF(__pyx_t_10); __Pyx_ErrRestoreWithState(__pyx_t_6, __pyx_t_11, __pyx_t_10); __pyx_t_6 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __PYX_ERR(0, 2080, __pyx_L8_except_error) }
02081: finally:
+02082: self._leave_row()
/*finally:*/ {
/*normal exit:*/{
__pyx_f_7questdb_7_client_6Buffer__leave_row(__pyx_v_self);
goto __pyx_L5;
}
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
if ( unlikely(__Pyx_GetException(&__pyx_t_4, &__pyx_t_3, &__pyx_t_2) < 0)) __Pyx_ErrFetch(&__pyx_t_4, &__pyx_t_3, &__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__pyx_t_9 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_15 = __pyx_filename;
{
__pyx_f_7questdb_7_client_6Buffer__leave_row(__pyx_v_self);
}
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_ErrRestore(__pyx_t_4, __pyx_t_3, __pyx_t_2);
__pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
__pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_15;
goto __pyx_L1_error;
}
__pyx_L5:;
}
02083: # Only a `Sender`'s own buffer has an auto-flush to trigger, and
02084: # `Sender.row` refuses a row there while another call is part-way
02085: # through the buffer, so this flush never cuts into an outer
02086: # call's work.
+02087: if wrote_fields and allow_auto_flush:
if (__pyx_v_wrote_fields) {
} else {
__pyx_t_13 = __pyx_v_wrote_fields;
goto __pyx_L27_bool_binop_done;
}
__pyx_t_13 = __pyx_v_allow_auto_flush;
__pyx_L27_bool_binop_done:;
if (__pyx_t_13) {
/* … */
}
+02088: self._may_trigger_row_complete()
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__may_trigger_row_complete(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2088, __pyx_L1_error)
02089:
+02090: def row(
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Buffer_19row(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Buffer_18row, "\n Add a single row (line) to the buffer.\n\n .. code-block:: python\n\n # All fields specified.\n buffer.row(\n \047table_name\047,\n symbols={\047sym1\047: \047abc\047, \047sym2\047: \047def\047, \047sym3\047: None},\n columns={\n \047col1\047: True,\n \047col2\047: 123,\n \047col3\047: 3.14,\n \047col4\047: \047xyz\047,\n \047col5\047: TimestampMicros(123456789),\n \047col6\047: datetime(2019, 1, 1, 12, 0, 0),\n \047col7\047: numpy.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]),\n \047col8\047: None},\n at=TimestampNanos(123456789))\n\n # Only symbols specified. Designated timestamp assigned by the db.\n buffer.row(\n \047table_name\047,\n symbols={\047sym1\047: \047abc\047, \047sym2\047: \047def\047}, at=Server.Timestamp)\n\n # Float columns and timestamp specified as `datetime.datetime`.\n # Pay special attention to the timezone, which if unspecified is\n # interpreted as UTC.\n buffer.row(\n \047sensor data\047,\n columns={\n \047temperature\047: 24.5,\n \047humidity\047: 0.5},\n at=datetime.datetime.now(tz=datetime.timezone.utc))\n\n\n Python strings passed as values to ``symbols`` are going to be encoded\n as the ``SYMBOL`` type in QuestDB, whilst Python strings passed as\n values to ``columns`` are going to be encoded as the ``STRING`` type.\n\n Refer to the\n `QuestDB documentation <https://questdb.com/docs/concept/symbol/>`_ to\n understand the difference between the ``SYMBOL`` and ``STRING`` types\n (TL;DR: symbols are interned strings).\n\n Column values can be specified with Python t""ypes directly and map as so:\n\n .. list-table::\n :header-rows: 1\n\n * - Python type\n - Serialized as ILP type\n * - ``bool``\n - `BOOLEAN <https://questdb.com/docs/reference/api/ilp/columnset-types#boolean>`_\n * - ``decimal``\n - `DECIMAL <https://questdb.com/docs/reference/api/ilp/columnset-types#decimal>`_\n * - ``int``\n - `INTEGER <https://questdb.com/docs/reference/api/ilp/columnset-types#integer>`_\n * - ``float``\n - `FLOAT <https://questdb.com/docs/reference/api/ilp/columnset-types#float>`_\n * - ``str``\n - `STRING <https://questdb.com/docs/reference/api/ilp/columnset-types#string>`_\n * - ``numpy.ndarray``\n - `ARRAY <https://questdb.com/docs/reference/api/ilp/columnset-types#array>`_\n * - ``datetime.datetime`` and ``TimestampMicros``\n - `TIMESTAMP <https://questdb.com/docs/reference/api/ilp/columnset-types#timestamp>`_\n * - ``uuid.UUID``\n - UUID (QWP-only)\n * - ``ipaddress.IPv4Address``\n - IPV4 (QWP-only)\n * - ``bytes``, ``bytearray``, or ``memoryview``\n - BINARY (QWP-only)\n * - ``Char``\n - CHAR (QWP-only)\n * - ``DateMillis``\n - DATE (QWP-only)\n * - ``Long256``\n - LONG256 (QWP-only)\n * - ``Geohash``\n - GEOHASH (QWP-only)\n * - ``None``\n - *Column is skipped and not serialized.*\n\n **Note**: Support for NumPy arrays (``numpy.array``) requires QuestDB server version 9.0.0 or higher.\n\n The seven QWP-only types require protocol ``udp``, ``ws``, or ``wss``\n and are rejected by ILP buffers used by ``tcp``, ``tcps``, ``http``,\n and ``https``. They require QuestDB 10 or newer, the first\n production QWP impl""ementation.\n\n QuestDB reserves these values as ``NULL`` sentinels, but the client\n deliberately accepts them: IPV4 ``0.0.0.0``, DATE ``INT64_MIN``, UUID\n ``80000000-0000-0000-8000-000000000000``, and a LONG256 whose four\n 64-bit limbs are all ``0x8000000000000000``. CHAR has no physical\n ``NULL`` sentinel: ``\047\\x00\047`` is stored as code unit 0, although some\n SQL operations treat it as CHAR\047s null/absent marker. GEOHASH has no\n sentinel collision. Empty BINARY ``b\047\047`` is a real empty value and is\n distinct from ``NULL``.\n\n A bare ``int`` is a 64-bit LONG, so a value outside\n ``-2**63 .. 2**63-1`` raises ``OverflowError``. On a QWP buffer the\n message names :class:`Long256 <questdb.Long256>`, the wrapper that\n sends it as a 256-bit LONG256 instead; an ILP buffer, which has no\n LONG256 to offer, reports the bare conversion failure.\n\n If the destination table was already created, then the columns types\n will be cast to the types of the existing columns whenever possible\n (Refer to the QuestDB documentation pages linked above).\n\n Adding a row can trigger auto-flushing behaviour.\n\n :param table_name: The name of the table to which the row belongs.\n :param symbols: A dictionary of symbol column names to ``str`` values.\n As a convenience, you can also pass a ``None`` value which will\n have the same effect as skipping the key: If the column already\n existed, it will be recorded as ``NULL``, otherwise it will not be\n created.\n :param columns: A dictionary mapping column names to the supported\n column values listed above.\n As a convenience, you can also pass a ``None`` value which will\n have the same effect as skipping the key: If the column already\n existed, it will be recorded as ``NULL``, otherwise it w""ill not be\n created.\n :param at: The timestamp of the row. This is required!\n If ``ServerTimestamp``, timestamp is assigned by QuestDB.\n If ``datetime``, the timestamp is converted to nanoseconds.\n A nanosecond unix epoch timestamp can be passed\n explicitly as a ``TimestampNanos`` object.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Buffer_19row = {"row", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Buffer_19row, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Buffer_18row}; static PyObject *__pyx_pw_7questdb_7_client_6Buffer_19row(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_table_name = 0; PyObject *__pyx_v_symbols = 0; PyObject *__pyx_v_columns = 0; PyObject *__pyx_v_at = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("row (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_table_name,&__pyx_mstate_global->__pyx_n_u_at,&__pyx_mstate_global->__pyx_n_u_symbols,&__pyx_mstate_global->__pyx_n_u_columns,0}; PyObject* values[4] = {0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 2090, __pyx_L3_error) if (likely(__pyx_kwds_len > 0)) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2090, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "row", 0) < (0)) __PYX_ERR(0, 2090, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Buffer_18row(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_table_name, PyObject *__pyx_v_symbols, PyObject *__pyx_v_columns, PyObject *__pyx_v_at) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("questdb._client.Buffer.row", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2090, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); /* … */ __pyx_t_25 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2090, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 2090, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Optional_str) < (0)) __PYX_ERR(0, 2090, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_columns, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Union_None_boo_2) < (0)) __PYX_ERR(0, 2090, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_Timest) < (0)) __PYX_ERR(0, 2090, __pyx_L1_error) __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Buffer_19row, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_row, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[103])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2090, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4); #endif __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_4, __pyx_t_17); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_25); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_row_2, __pyx_t_4) < (0)) __PYX_ERR(0, 2090, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
02091: self,
02092: table_name: str,
02093: *,
+02094: symbols: Optional[Dict[str, Optional[str]]]=None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_symbols, Py_None) < (0)) __PYX_ERR(0, 2090, __pyx_L1_error)
02095: columns: Optional[Dict[
02096: str,
02097: Union[None, bool, int, float, str, TimestampMicros,
02098: TimestampNanos, datetime.datetime, numpy.ndarray,
02099: Decimal, uuid.UUID, ipaddress.IPv4Address, bytes,
02100: bytearray, memoryview, Char, DateMillis, Long256,
02101: Geohash]]
+02102: ]=None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("row", 1, 1, 1, i); __PYX_ERR(0, 2090, __pyx_L3_error) } } for (Py_ssize_t i = 1; i < 2; i++) { if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("row", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 2090, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { __Pyx_RaiseKeywordRequired("row", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 2090, __pyx_L3_error) } __pyx_v_table_name = ((PyObject*)values[0]); __pyx_v_at = values[1]; __pyx_v_symbols = ((PyObject*)values[2]); __pyx_v_columns = ((PyObject*)values[3]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("row", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2090, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Buffer.row", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 0, "table_name", 2))) __PYX_ERR(0, 2092, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_symbols), (&PyDict_Type), 1, "symbols", 2))) __PYX_ERR(0, 2094, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_columns), (&PyDict_Type), 1, "columns", 2))) __PYX_ERR(0, 2095, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_6Buffer_18row(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self), __pyx_v_table_name, __pyx_v_symbols, __pyx_v_columns, __pyx_v_at); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_columns, Py_None) < (0)) __PYX_ERR(0, 2090, __pyx_L1_error)
02103: at: Union[ServerTimestampType, TimestampNanos, datetime.datetime]):
02104: """
02105: Add a single row (line) to the buffer.
02106:
02107: .. code-block:: python
02108:
02109: # All fields specified.
02110: buffer.row(
02111: 'table_name',
02112: symbols={'sym1': 'abc', 'sym2': 'def', 'sym3': None},
02113: columns={
02114: 'col1': True,
02115: 'col2': 123,
02116: 'col3': 3.14,
02117: 'col4': 'xyz',
02118: 'col5': TimestampMicros(123456789),
02119: 'col6': datetime(2019, 1, 1, 12, 0, 0),
02120: 'col7': numpy.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]),
02121: 'col8': None},
02122: at=TimestampNanos(123456789))
02123:
02124: # Only symbols specified. Designated timestamp assigned by the db.
02125: buffer.row(
02126: 'table_name',
02127: symbols={'sym1': 'abc', 'sym2': 'def'}, at=Server.Timestamp)
02128:
02129: # Float columns and timestamp specified as `datetime.datetime`.
02130: # Pay special attention to the timezone, which if unspecified is
02131: # interpreted as UTC.
02132: buffer.row(
02133: 'sensor data',
02134: columns={
02135: 'temperature': 24.5,
02136: 'humidity': 0.5},
02137: at=datetime.datetime.now(tz=datetime.timezone.utc))
02138:
02139:
02140: Python strings passed as values to ``symbols`` are going to be encoded
02141: as the ``SYMBOL`` type in QuestDB, whilst Python strings passed as
02142: values to ``columns`` are going to be encoded as the ``STRING`` type.
02143:
02144: Refer to the
02145: `QuestDB documentation <https://questdb.com/docs/concept/symbol/>`_ to
02146: understand the difference between the ``SYMBOL`` and ``STRING`` types
02147: (TL;DR: symbols are interned strings).
02148:
02149: Column values can be specified with Python types directly and map as so:
02150:
02151: .. list-table::
02152: :header-rows: 1
02153:
02154: * - Python type
02155: - Serialized as ILP type
02156: * - ``bool``
02157: - `BOOLEAN <https://questdb.com/docs/reference/api/ilp/columnset-types#boolean>`_
02158: * - ``decimal``
02159: - `DECIMAL <https://questdb.com/docs/reference/api/ilp/columnset-types#decimal>`_
02160: * - ``int``
02161: - `INTEGER <https://questdb.com/docs/reference/api/ilp/columnset-types#integer>`_
02162: * - ``float``
02163: - `FLOAT <https://questdb.com/docs/reference/api/ilp/columnset-types#float>`_
02164: * - ``str``
02165: - `STRING <https://questdb.com/docs/reference/api/ilp/columnset-types#string>`_
02166: * - ``numpy.ndarray``
02167: - `ARRAY <https://questdb.com/docs/reference/api/ilp/columnset-types#array>`_
02168: * - ``datetime.datetime`` and ``TimestampMicros``
02169: - `TIMESTAMP <https://questdb.com/docs/reference/api/ilp/columnset-types#timestamp>`_
02170: * - ``uuid.UUID``
02171: - UUID (QWP-only)
02172: * - ``ipaddress.IPv4Address``
02173: - IPV4 (QWP-only)
02174: * - ``bytes``, ``bytearray``, or ``memoryview``
02175: - BINARY (QWP-only)
02176: * - ``Char``
02177: - CHAR (QWP-only)
02178: * - ``DateMillis``
02179: - DATE (QWP-only)
02180: * - ``Long256``
02181: - LONG256 (QWP-only)
02182: * - ``Geohash``
02183: - GEOHASH (QWP-only)
02184: * - ``None``
02185: - *Column is skipped and not serialized.*
02186:
02187: **Note**: Support for NumPy arrays (``numpy.array``) requires QuestDB server version 9.0.0 or higher.
02188:
02189: The seven QWP-only types require protocol ``udp``, ``ws``, or ``wss``
02190: and are rejected by ILP buffers used by ``tcp``, ``tcps``, ``http``,
02191: and ``https``. They require QuestDB 10 or newer, the first
02192: production QWP implementation.
02193:
02194: QuestDB reserves these values as ``NULL`` sentinels, but the client
02195: deliberately accepts them: IPV4 ``0.0.0.0``, DATE ``INT64_MIN``, UUID
02196: ``80000000-0000-0000-8000-000000000000``, and a LONG256 whose four
02197: 64-bit limbs are all ``0x8000000000000000``. CHAR has no physical
02198: ``NULL`` sentinel: ``'\\x00'`` is stored as code unit 0, although some
02199: SQL operations treat it as CHAR's null/absent marker. GEOHASH has no
02200: sentinel collision. Empty BINARY ``b''`` is a real empty value and is
02201: distinct from ``NULL``.
02202:
02203: A bare ``int`` is a 64-bit LONG, so a value outside
02204: ``-2**63 .. 2**63-1`` raises ``OverflowError``. On a QWP buffer the
02205: message names :class:`Long256 <questdb.Long256>`, the wrapper that
02206: sends it as a 256-bit LONG256 instead; an ILP buffer, which has no
02207: LONG256 to offer, reports the bare conversion failure.
02208:
02209: If the destination table was already created, then the columns types
02210: will be cast to the types of the existing columns whenever possible
02211: (Refer to the QuestDB documentation pages linked above).
02212:
02213: Adding a row can trigger auto-flushing behaviour.
02214:
02215: :param table_name: The name of the table to which the row belongs.
02216: :param symbols: A dictionary of symbol column names to ``str`` values.
02217: As a convenience, you can also pass a ``None`` value which will
02218: have the same effect as skipping the key: If the column already
02219: existed, it will be recorded as ``NULL``, otherwise it will not be
02220: created.
02221: :param columns: A dictionary mapping column names to the supported
02222: column values listed above.
02223: As a convenience, you can also pass a ``None`` value which will
02224: have the same effect as skipping the key: If the column already
02225: existed, it will be recorded as ``NULL``, otherwise it will not be
02226: created.
02227: :param at: The timestamp of the row. This is required!
02228: If ``ServerTimestamp``, timestamp is assigned by QuestDB.
02229: If ``datetime``, the timestamp is converted to nanoseconds.
02230: A nanosecond unix epoch timestamp can be passed
02231: explicitly as a ``TimestampNanos`` object.
02232: """
+02233: if at is None:
__pyx_t_1 = (__pyx_v_at == Py_None);
if (unlikely(__pyx_t_1)) {
/* … */
}
+02234: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2234, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+02235: QuestDBErrorCode.InvalidTimestamp,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2235, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2235, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_at_must_be_of_type_TimestampNan}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2234, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 2234, __pyx_L1_error)
02236: "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
02237: )
+02238: self._row(
__pyx_t_9.__pyx_n = 3;
__pyx_t_9.symbols = ((PyObject*)__pyx_v_symbols);
__pyx_t_9.columns = __pyx_v_columns;
__pyx_t_9.at = __pyx_v_at;
__pyx_t_8 = ((struct __pyx_vtabstruct_7questdb_7_client_Buffer *)__pyx_v_self->__pyx_vtab)->_row(__pyx_v_self, 1, __pyx_v_table_name, &__pyx_t_9); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2238, __pyx_L1_error)
02239: True, # allow_auto_flush
02240: table_name,
02241: symbols,
02242: columns,
02243: at)
+02244: return self
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_self);
__pyx_r = ((PyObject *)__pyx_v_self);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
02245:
+02246: def dataframe(
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Buffer_21dataframe(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Buffer_20dataframe, "\n Add a pandas DataFrame to the buffer.\n\n Also see :func:`Sender.dataframe <questdb.Sender.dataframe>` if you\n are not using the buffer explicitly. Over ILP and QWP/UDP it accepts\n the arguments shown here and adds auto-flushing. Over QWP/WebSocket\n it instead uses the direct columnar path, additionally accepting\n ``max_rows_per_batch`` and ``schema_overrides``; see\n :meth:`QuestDB.dataframe <questdb.QuestDB.dataframe>` for that path\047s\n supported column types and arguments.\n\n Requires ``pandas`` and ``numpy``. ``pyarrow`` is only needed\n when the frame contains ``pd.ArrowDtype`` / ``pd.Categorical`` /\n ``string`` dtype columns \342\200\224 purely NumPy / object dtypes work\n without it.\n\n Adding a dataframe can trigger auto-flushing behaviour,\n even between rows of the same dataframe. To avoid this, you can\n use HTTP and transactions (see :func:`Sender.transaction <questdb.Sender.transaction>`).\n\n :param df: The pandas DataFrame to serialize to the buffer.\n :type df: pandas.DataFrame\n\n :param table_name: The name of the table to which the rows belong.\n\n If ``None``, the table name is taken from the ``table_name_col``\n parameter. If both ``table_name`` and ``table_name_col`` are\n ``None``, the table name is taken from the DataFrame\047s index\n name (``df.index.name`` attribute).\n :type table_name: str or None\n\n :param table_name_col: The name or index of the column in the DataFrame\n that contains the table name.\n \n If ``None``, the table name is taken\n from the ``table_name`` parameter. If both ``table_name`` and\n ``table_name_col`` are ``None``, the table name is taken from the\n DataFrame\047s index name (``df.index.name`` attribute).\n\n If ``table_name_col`` is an integ""er, it is interpreted as the index\n of the column starting from ``0``. The index of the column can be\n negative, in which case it is interpreted as an offset from the end\n of the DataFrame. E.g. ``-1`` is the last column.\n :type table_name_col: str or int or None\n\n :param symbols: The columns to be serialized as symbols.\n \n If ``\047auto\047`` (default), all columns of dtype ``\047categorical\047`` are\n serialized as symbols. If ``True``, all ``str`` columns are\n serialized as symbols. If ``False``, no columns are serialized as\n symbols.\n \n The list of symbols can also be specified explicitly as a ``list``\n of column names (``str``) or indices (``int``). Integer indices\n start at ``0`` and can be negative, offset from the end of the\n DataFrame. E.g. ``-1`` is the last column.\n\n Only columns containing strings can be serialized as symbols.\n\n :type symbols: str or bool or list[str] or list[int]\n\n :param at: The designated timestamp of the rows.\n \n You can specify a single value for all rows or column name or index.\n If ``ServerTimestamp``, timestamp is assigned by the server for all rows.\n To pass in a timestamp explicitly as an integer use the\n ``TimestampNanos`` wrapper type. To get the current timestamp,\n use ``TimestampNanos.now()``.\n When passing a ``datetime.datetime`` object, the timestamp is\n converted to nanoseconds.\n A naive ``datetime`` object is interpreted as UTC \342\200\224 never\n your machine\047s local timezone \342\200\224 and a ``UserWarning`` is\n emitted once per process\n (call ``datetime.datetime.now(tz=datetime.timezone.utc)``\n for the current timestamp to\n avoid bugs).\n\n To s""pecify a different timestamp for each row, pass in a column name\n (``str``) or index (``int``, 0-based index, negative index\n supported): In this case, the column needs to be of dtype\n ``datetime64[ns]`` (assumed to be in the **UTC timezone** and not\n local, due to differences in Pandas and Python datetime handling) or\n ``datetime64[ns, tz]``. When a timezone is specified in the column,\n it is converted to UTC automatically.\n\n A timestamp column can also contain ``None`` values. The server will\n assign the current timestamp to those rows.\n\n **Note**: All timestamps are always converted to nanoseconds and in\n the UTC timezone. Timezone information is dropped before sending and\n QuestDB will not store any timezone information.\n :type at: TimestampNanos, datetime.datetime, int or str or None\n\n **Note**: It is an error to specify both ``table_name`` and\n ``table_name_col``.\n\n **Note**: The \"index\" column of the DataFrame is never serialized,\n even if it is named.\n\n Example:\n\n .. code-block:: python\n\n import pandas as pd\n import questdb as qi\n\n buf = qi.ingress.Buffer(protocol_version=2)\n # ...\n\n df = pd.DataFrame({\n \047location\047: [\047London\047, \047Managua\047, \047London\047],\n \047temperature\047: [24.5, 35.0, 25.5],\n \047humidity\047: [0.5, 0.6, 0.45],\n \047ts\047: pd.date_range(\0472021-07-01\047, periods=3)})\n buf.dataframe(\n df, table_name=\047weather\047, at=\047ts\047, symbols=[\047location\047])\n\n # ...\n sender.flush(buf)\n\n **Pandas to ILP datatype mappings**\n\n .. seealso:: https://questdb.com/docs/reference/api/ilp/columnset-types/\n\n .. list-table:: Pandas Ma""ppings\n :header-rows: 1\n\n * - Pandas ``dtype``\n - Nulls\n - ILP Datatype\n * - ``\047bool\047``\n - N\n - ``BOOLEAN``\n * - ``\047boolean\047``\n - N **\316\261**\n - ``BOOLEAN``\n * - ``\047object\047`` (``bool`` objects)\n - N **\316\261**\n - ``BOOLEAN``\n * - ``\047uint8\047``\n - N\n - ``INTEGER``\n * - ``\047int8\047``\n - N\n - ``INTEGER``\n * - ``\047uint16\047``\n - N\n - ``INTEGER``\n * - ``\047int16\047``\n - N\n - ``INTEGER``\n * - ``\047uint32\047``\n - N\n - ``INTEGER``\n * - ``\047int32\047``\n - N\n - ``INTEGER``\n * - ``\047uint64\047``\n - N\n - ``INTEGER`` **\316\262**\n * - ``\047int64\047``\n - N\n - ``INTEGER``\n * - ``\047UInt8\047``\n - Y\n - ``INTEGER``\n * - ``\047Int8\047``\n - Y\n - ``INTEGER``\n * - ``\047UInt16\047``\n - Y\n - ``INTEGER``\n * - ``\047Int16\047``\n - Y\n - ``INTEGER``\n * - ``\047UInt32\047``\n - Y\n - ``INTEGER``\n * - ``\047Int32\047``\n - Y\n - ``INTEGER``\n * - ``\047UInt64\047``\n - Y\n - ``INTEGER`` **\316\262**\n * - ``\047Int64\047``\n - Y\n - ``INTEGER``\n * - ``\047object\047`` (``int`` objects)\n - Y\n - ``INTEGER`` **\316\262**\n * - ``\047float32\047`` **\316\263**\n - Y (``NaN``)\n - ``FLOAT``""\n * - ``\047float64\047``\n - Y (``NaN``)\n - ``FLOAT``\n * - ``\047object\047`` (``float`` objects)\n - Y (``NaN``)\n - ``FLOAT``\n * - ``\047string\047`` (``str`` objects)\n - Y\n - ``STRING`` (default), ``SYMBOL`` via ``symbols`` arg. **\316\264**\n * - ``\047string[pyarrow]\047``\n - Y\n - ``STRING`` (default), ``SYMBOL`` via ``symbols`` arg. **\316\264**\n * - ``\047category\047`` (``str`` objects) **\316\265**\n - Y\n - ``SYMBOL`` (default), ``STRING`` via ``symbols`` arg. **\316\264**\n * - ``\047object\047`` (``str`` objects)\n - Y\n - ``STRING`` (default), ``SYMBOL`` via ``symbols`` arg. **\316\264**\n * - ``\047datetime64[ns]\047``\n - Y\n - ``TIMESTAMP`` **\316\266**\n * - ``\047datetime64[ns, tz]\047``\n - Y\n - ``TIMESTAMP`` **\316\266**\n * - ``\047object\047`` (``Decimal`` objects)\n - Y (``NaN``)\n - ``DECIMAL``\n\n .. note::\n\n * **\316\261**: Note some pandas dtypes allow nulls (e.g. ``\047boolean\047``),\n where the QuestDB database does not.\n\n * **\316\262**: The valid range for integer values is -2^63 to 2^63-1.\n Any ``\047uint64\047``, ``\047UInt64\047`` or python ``int`` object values\n outside this range will raise an error during serialization.\n\n * **\316\263**: Upcast to 64-bit float during serialization.\n\n * **\316\264**: Columns containing strings can also be used to specify the\n table name. See ``table_name_col``.\n\n * **\316\265**: We only support categories containing strings. If the\n category contains non-string values, an error will be raised.\n\n * **\316""\266**: The \047.dataframe()\047 method only supports datetimes with\n nanosecond precision. The designated timestamp column (see ``at``\n parameter) maintains the nanosecond precision, whilst values\n stored as columns have their precision truncated to microseconds.\n All dates are sent as UTC and any additional timezone information\n is dropped. If no timezone is specified, we follow\n the pandas convention of assuming the timezone is UTC.\n Datetimes before 1970-01-01 00:00:00 UTC are not supported.\n If a datetime value is specified as ``None`` (``NaT``), it is\n interpreted as the current QuestDB server time set on receipt of\n message.\n\n **Error Handling and Recovery**\n\n In case an exception is raised during dataframe serialization, the\n buffer is left in its previous state.\n The buffer remains in a valid state and can be used for further calls\n even after an error.\n\n For clarification, as an example, if an invalid ``None``\n value appears at the 3rd row for a ``bool`` column, neither the 3rd nor\n the preceding rows are added to the buffer.\n\n **Note**: This differs from the :func:`Sender.dataframe <questdb.Sender.dataframe>` method, which\n modifies this guarantee due to its ``auto_flush`` logic.\n\n **Performance Considerations**\n\n The Python GIL is released during serialization if it is not needed.\n If any column requires the GIL, the entire serialization is done whilst\n holding the GIL.\n\n Column types that require the GIL are:\n\n * Columns of ``str``, ``float`` or ``int`` or ``float`` Python objects.\n * The ``\047string[python]\047`` dtype.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Buffer_21dataframe = {"dataframe", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Buffer_21dataframe, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Buffer_20dataframe}; static PyObject *__pyx_pw_7questdb_7_client_6Buffer_21dataframe(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_df = 0; PyObject *__pyx_v_table_name = 0; PyObject *__pyx_v_table_name_col = 0; PyObject *__pyx_v_symbols = 0; PyObject *__pyx_v_at = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("dataframe (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_df_2,&__pyx_mstate_global->__pyx_n_u_at,&__pyx_mstate_global->__pyx_n_u_table_name,&__pyx_mstate_global->__pyx_n_u_table_name_col,&__pyx_mstate_global->__pyx_n_u_symbols,0}; PyObject* values[5] = {0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 2246, __pyx_L3_error) if (likely(__pyx_kwds_len > 0)) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2246, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "dataframe", 0) < (0)) __PYX_ERR(0, 2246, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Buffer_20dataframe(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("questdb._client.Buffer.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2246, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); /* … */ __pyx_t_25 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2246, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 2246, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_table_name_col, __pyx_mstate_global->__pyx_kp_u_Union_None_int_str) < (0)) __PYX_ERR(0, 2246, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Union_str_bool_List_int_List_str) < (0)) __PYX_ERR(0, 2246, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_int_st) < (0)) __PYX_ERR(0, 2246, __pyx_L1_error) __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Buffer_21dataframe, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_dataframe, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[104])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2246, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_17, __pyx_t_4); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_17, __pyx_t_25); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_dataframe, __pyx_t_17) < (0)) __PYX_ERR(0, 2246, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
02247: self,
02248: df, # : pd.DataFrame
02249: *,
+02250: table_name: Optional[str] = None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 2246, __pyx_L1_error)
+02251: table_name_col: Union[None, int, str] = None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_n_u_auto)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, i); __PYX_ERR(0, 2246, __pyx_L3_error) } } for (Py_ssize_t i = 1; i < 2; i++) { if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("dataframe", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 2246, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { __Pyx_RaiseKeywordRequired("dataframe", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 2246, __pyx_L3_error) } __pyx_v_df = values[0]; __pyx_v_at = values[1]; __pyx_v_table_name = ((PyObject*)values[2]); __pyx_v_table_name_col = values[3]; __pyx_v_symbols = values[4]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2246, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Buffer.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 1, "table_name", 2))) __PYX_ERR(0, 2250, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_6Buffer_20dataframe(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self), __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at); /* … */ if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_table_name_col, Py_None) < (0)) __PYX_ERR(0, 2246, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_n_u_auto) < (0)) __PYX_ERR(0, 2246, __pyx_L1_error)
02252: symbols: Union[str, bool, List[int], List[str]] = 'auto',
02253: at: Union[ServerTimestampType, int, str, TimestampNanos, datetime.datetime]):
02254: """
02255: Add a pandas DataFrame to the buffer.
02256:
02257: Also see :func:`Sender.dataframe <questdb.Sender.dataframe>` if you
02258: are not using the buffer explicitly. Over ILP and QWP/UDP it accepts
02259: the arguments shown here and adds auto-flushing. Over QWP/WebSocket
02260: it instead uses the direct columnar path, additionally accepting
02261: ``max_rows_per_batch`` and ``schema_overrides``; see
02262: :meth:`QuestDB.dataframe <questdb.QuestDB.dataframe>` for that path's
02263: supported column types and arguments.
02264:
02265: Requires ``pandas`` and ``numpy``. ``pyarrow`` is only needed
02266: when the frame contains ``pd.ArrowDtype`` / ``pd.Categorical`` /
02267: ``string`` dtype columns — purely NumPy / object dtypes work
02268: without it.
02269:
02270: Adding a dataframe can trigger auto-flushing behaviour,
02271: even between rows of the same dataframe. To avoid this, you can
02272: use HTTP and transactions (see :func:`Sender.transaction <questdb.Sender.transaction>`).
02273:
02274: :param df: The pandas DataFrame to serialize to the buffer.
02275: :type df: pandas.DataFrame
02276:
02277: :param table_name: The name of the table to which the rows belong.
02278:
02279: If ``None``, the table name is taken from the ``table_name_col``
02280: parameter. If both ``table_name`` and ``table_name_col`` are
02281: ``None``, the table name is taken from the DataFrame's index
02282: name (``df.index.name`` attribute).
02283: :type table_name: str or None
02284:
02285: :param table_name_col: The name or index of the column in the DataFrame
02286: that contains the table name.
02287:
02288: If ``None``, the table name is taken
02289: from the ``table_name`` parameter. If both ``table_name`` and
02290: ``table_name_col`` are ``None``, the table name is taken from the
02291: DataFrame's index name (``df.index.name`` attribute).
02292:
02293: If ``table_name_col`` is an integer, it is interpreted as the index
02294: of the column starting from ``0``. The index of the column can be
02295: negative, in which case it is interpreted as an offset from the end
02296: of the DataFrame. E.g. ``-1`` is the last column.
02297: :type table_name_col: str or int or None
02298:
02299: :param symbols: The columns to be serialized as symbols.
02300:
02301: If ``'auto'`` (default), all columns of dtype ``'categorical'`` are
02302: serialized as symbols. If ``True``, all ``str`` columns are
02303: serialized as symbols. If ``False``, no columns are serialized as
02304: symbols.
02305:
02306: The list of symbols can also be specified explicitly as a ``list``
02307: of column names (``str``) or indices (``int``). Integer indices
02308: start at ``0`` and can be negative, offset from the end of the
02309: DataFrame. E.g. ``-1`` is the last column.
02310:
02311: Only columns containing strings can be serialized as symbols.
02312:
02313: :type symbols: str or bool or list[str] or list[int]
02314:
02315: :param at: The designated timestamp of the rows.
02316:
02317: You can specify a single value for all rows or column name or index.
02318: If ``ServerTimestamp``, timestamp is assigned by the server for all rows.
02319: To pass in a timestamp explicitly as an integer use the
02320: ``TimestampNanos`` wrapper type. To get the current timestamp,
02321: use ``TimestampNanos.now()``.
02322: When passing a ``datetime.datetime`` object, the timestamp is
02323: converted to nanoseconds.
02324: A naive ``datetime`` object is interpreted as UTC — never
02325: your machine's local timezone — and a ``UserWarning`` is
02326: emitted once per process
02327: (call ``datetime.datetime.now(tz=datetime.timezone.utc)``
02328: for the current timestamp to
02329: avoid bugs).
02330:
02331: To specify a different timestamp for each row, pass in a column name
02332: (``str``) or index (``int``, 0-based index, negative index
02333: supported): In this case, the column needs to be of dtype
02334: ``datetime64[ns]`` (assumed to be in the **UTC timezone** and not
02335: local, due to differences in Pandas and Python datetime handling) or
02336: ``datetime64[ns, tz]``. When a timezone is specified in the column,
02337: it is converted to UTC automatically.
02338:
02339: A timestamp column can also contain ``None`` values. The server will
02340: assign the current timestamp to those rows.
02341:
02342: **Note**: All timestamps are always converted to nanoseconds and in
02343: the UTC timezone. Timezone information is dropped before sending and
02344: QuestDB will not store any timezone information.
02345: :type at: TimestampNanos, datetime.datetime, int or str or None
02346:
02347: **Note**: It is an error to specify both ``table_name`` and
02348: ``table_name_col``.
02349:
02350: **Note**: The "index" column of the DataFrame is never serialized,
02351: even if it is named.
02352:
02353: Example:
02354:
02355: .. code-block:: python
02356:
02357: import pandas as pd
02358: import questdb as qi
02359:
02360: buf = qi.ingress.Buffer(protocol_version=2)
02361: # ...
02362:
02363: df = pd.DataFrame({
02364: 'location': ['London', 'Managua', 'London'],
02365: 'temperature': [24.5, 35.0, 25.5],
02366: 'humidity': [0.5, 0.6, 0.45],
02367: 'ts': pd.date_range('2021-07-01', periods=3)})
02368: buf.dataframe(
02369: df, table_name='weather', at='ts', symbols=['location'])
02370:
02371: # ...
02372: sender.flush(buf)
02373:
02374: **Pandas to ILP datatype mappings**
02375:
02376: .. seealso:: https://questdb.com/docs/reference/api/ilp/columnset-types/
02377:
02378: .. list-table:: Pandas Mappings
02379: :header-rows: 1
02380:
02381: * - Pandas ``dtype``
02382: - Nulls
02383: - ILP Datatype
02384: * - ``'bool'``
02385: - N
02386: - ``BOOLEAN``
02387: * - ``'boolean'``
02388: - N **α**
02389: - ``BOOLEAN``
02390: * - ``'object'`` (``bool`` objects)
02391: - N **α**
02392: - ``BOOLEAN``
02393: * - ``'uint8'``
02394: - N
02395: - ``INTEGER``
02396: * - ``'int8'``
02397: - N
02398: - ``INTEGER``
02399: * - ``'uint16'``
02400: - N
02401: - ``INTEGER``
02402: * - ``'int16'``
02403: - N
02404: - ``INTEGER``
02405: * - ``'uint32'``
02406: - N
02407: - ``INTEGER``
02408: * - ``'int32'``
02409: - N
02410: - ``INTEGER``
02411: * - ``'uint64'``
02412: - N
02413: - ``INTEGER`` **β**
02414: * - ``'int64'``
02415: - N
02416: - ``INTEGER``
02417: * - ``'UInt8'``
02418: - Y
02419: - ``INTEGER``
02420: * - ``'Int8'``
02421: - Y
02422: - ``INTEGER``
02423: * - ``'UInt16'``
02424: - Y
02425: - ``INTEGER``
02426: * - ``'Int16'``
02427: - Y
02428: - ``INTEGER``
02429: * - ``'UInt32'``
02430: - Y
02431: - ``INTEGER``
02432: * - ``'Int32'``
02433: - Y
02434: - ``INTEGER``
02435: * - ``'UInt64'``
02436: - Y
02437: - ``INTEGER`` **β**
02438: * - ``'Int64'``
02439: - Y
02440: - ``INTEGER``
02441: * - ``'object'`` (``int`` objects)
02442: - Y
02443: - ``INTEGER`` **β**
02444: * - ``'float32'`` **γ**
02445: - Y (``NaN``)
02446: - ``FLOAT``
02447: * - ``'float64'``
02448: - Y (``NaN``)
02449: - ``FLOAT``
02450: * - ``'object'`` (``float`` objects)
02451: - Y (``NaN``)
02452: - ``FLOAT``
02453: * - ``'string'`` (``str`` objects)
02454: - Y
02455: - ``STRING`` (default), ``SYMBOL`` via ``symbols`` arg. **δ**
02456: * - ``'string[pyarrow]'``
02457: - Y
02458: - ``STRING`` (default), ``SYMBOL`` via ``symbols`` arg. **δ**
02459: * - ``'category'`` (``str`` objects) **ε**
02460: - Y
02461: - ``SYMBOL`` (default), ``STRING`` via ``symbols`` arg. **δ**
02462: * - ``'object'`` (``str`` objects)
02463: - Y
02464: - ``STRING`` (default), ``SYMBOL`` via ``symbols`` arg. **δ**
02465: * - ``'datetime64[ns]'``
02466: - Y
02467: - ``TIMESTAMP`` **ζ**
02468: * - ``'datetime64[ns, tz]'``
02469: - Y
02470: - ``TIMESTAMP`` **ζ**
02471: * - ``'object'`` (``Decimal`` objects)
02472: - Y (``NaN``)
02473: - ``DECIMAL``
02474:
02475: .. note::
02476:
02477: * **α**: Note some pandas dtypes allow nulls (e.g. ``'boolean'``),
02478: where the QuestDB database does not.
02479:
02480: * **β**: The valid range for integer values is -2^63 to 2^63-1.
02481: Any ``'uint64'``, ``'UInt64'`` or python ``int`` object values
02482: outside this range will raise an error during serialization.
02483:
02484: * **γ**: Upcast to 64-bit float during serialization.
02485:
02486: * **δ**: Columns containing strings can also be used to specify the
02487: table name. See ``table_name_col``.
02488:
02489: * **ε**: We only support categories containing strings. If the
02490: category contains non-string values, an error will be raised.
02491:
02492: * **ζ**: The '.dataframe()' method only supports datetimes with
02493: nanosecond precision. The designated timestamp column (see ``at``
02494: parameter) maintains the nanosecond precision, whilst values
02495: stored as columns have their precision truncated to microseconds.
02496: All dates are sent as UTC and any additional timezone information
02497: is dropped. If no timezone is specified, we follow
02498: the pandas convention of assuming the timezone is UTC.
02499: Datetimes before 1970-01-01 00:00:00 UTC are not supported.
02500: If a datetime value is specified as ``None`` (``NaT``), it is
02501: interpreted as the current QuestDB server time set on receipt of
02502: message.
02503:
02504: **Error Handling and Recovery**
02505:
02506: In case an exception is raised during dataframe serialization, the
02507: buffer is left in its previous state.
02508: The buffer remains in a valid state and can be used for further calls
02509: even after an error.
02510:
02511: For clarification, as an example, if an invalid ``None``
02512: value appears at the 3rd row for a ``bool`` column, neither the 3rd nor
02513: the preceding rows are added to the buffer.
02514:
02515: **Note**: This differs from the :func:`Sender.dataframe <questdb.Sender.dataframe>` method, which
02516: modifies this guarantee due to its ``auto_flush`` logic.
02517:
02518: **Performance Considerations**
02519:
02520: The Python GIL is released during serialization if it is not needed.
02521: If any column requires the GIL, the entire serialization is done whilst
02522: holding the GIL.
02523:
02524: Column types that require the GIL are:
02525:
02526: * Columns of ``str``, ``float`` or ``int`` or ``float`` Python objects.
02527: * The ``'string[python]'`` dtype.
02528: """
+02529: if at is None:
__pyx_t_1 = (__pyx_v_at == Py_None);
if (unlikely(__pyx_t_1)) {
/* … */
}
+02530: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2530, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+02531: QuestDBErrorCode.InvalidTimestamp,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2531, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2531, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_at_must_be_of_type_TimestampNan}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2530, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 2530, __pyx_L1_error)
02532: "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
02533: )
+02534: self._check_impl()
__pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_impl(__pyx_v_self); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2534, __pyx_L1_error)
+02535: _dataframe(
__pyx_t_8 = __pyx_f_7questdb_7_client__dataframe(__pyx_v_self, __pyx_f_7questdb_7_client_auto_flush_blank(), __pyx_v_self->_impl, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2535, __pyx_L1_error)
02536: self,
02537: auto_flush_blank(),
02538: self._impl,
02539: df,
02540: table_name,
02541: table_name_col,
02542: symbols,
02543: at)
+02544: return self
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_self);
__pyx_r = ((PyObject *)__pyx_v_self);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
02545:
02546:
02547: _FLUSH_FMT = ('{} - See https://py-questdb-client.readthedocs.io/en/'
+02548: 'v' + VERSION +
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_VERSION); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2548, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_25 = PyNumber_Add(__pyx_mstate_global->__pyx_kp_u_See_https_py_questdb_client_rea, __pyx_t_17); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2548, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_17 = PyNumber_Add(__pyx_t_25, __pyx_mstate_global->__pyx_kp_u_troubleshooting_html_inspecting); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2548, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_FLUSH_FMT, __pyx_t_17) < (0)) __PYX_ERR(0, 2547, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
02549: '/troubleshooting.html#inspecting-and-debugging-errors#flush-failed')
02550:
02551:
+02552: cdef uint64_t _timedelta_to_millis(cp_timedelta timedelta):
static uint64_t __pyx_f_7questdb_7_client__timedelta_to_millis(PyDateTime_Delta *__pyx_v_timedelta) {
int64_t __pyx_v_millis;
uint64_t __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_AddTraceback("questdb._client._timedelta_to_millis", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1LL;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02553: """
02554: Convert a timedelta to milliseconds.
02555: """
02556: cdef int64_t millis = (
+02557: <int64_t>timedelta.days * 86_400_000 +
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_timedelta), __pyx_mstate_global->__pyx_n_u_days); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2557, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyLong_As_int64_t(__pyx_t_1); if (unlikely((__pyx_t_2 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2557, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* … */ __pyx_t_1 = __Pyx_PyLong_From_int64_t(((((int64_t)__pyx_t_2) * 0x5265C00) + (((int64_t)__pyx_t_3) * 0x3E8))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2557, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1);
+02558: <int64_t>timedelta.seconds * 1000 +
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_timedelta), __pyx_mstate_global->__pyx_n_u_seconds); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2558, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyLong_As_int64_t(__pyx_t_1); if (unlikely((__pyx_t_3 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2558, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* … */ __pyx_t_4 = __Pyx_PyNumber_Add_int_object(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2558, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_3 = __Pyx_PyLong_As_int64_t(__pyx_t_4); if (unlikely((__pyx_t_3 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2558, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_millis = __pyx_t_3;
+02559: timedelta.microseconds // 1000)
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_timedelta), __pyx_mstate_global->__pyx_n_u_microseconds); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2559, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyLong_FloorDivideObjC(__pyx_t_4, __pyx_mstate_global->__pyx_int_1000, 0x3E8, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2559, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+02560: if millis < 0:
__pyx_t_6 = (__pyx_v_millis < 0);
if (unlikely(__pyx_t_6)) {
/* … */
}
+02561: raise ValueError(
__pyx_t_5 = NULL;
+02562: f'Negative timedelta not allowed: {timedelta!r}.')
__pyx_t_1 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(((PyObject *)__pyx_v_timedelta)), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2562, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7[0] = __pyx_mstate_global->__pyx_kp_u_Negative_timedelta_not_allowed; __pyx_t_7[1] = __pyx_t_1; __pyx_t_7[2] = __pyx_mstate_global->__pyx_kp_u__3; __pyx_t_8 = 33; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7[1]); #endif __pyx_t_9 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_9 |= __Pyx_PyUnicode_KIND_04(__pyx_t_7[1]); #endif __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_7, 3, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2562, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_11 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_10}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2561, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 2561, __pyx_L1_error)
+02563: if millis == 0 and timedelta:
__pyx_t_12 = (__pyx_v_millis == 0);
if (__pyx_t_12) {
} else {
__pyx_t_6 = __pyx_t_12;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_12 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_timedelta)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 2563, __pyx_L1_error)
__pyx_t_6 = __pyx_t_12;
__pyx_L5_bool_binop_done:;
if (__pyx_t_6) {
/* … */
}
02564: # Never silently turn a positive finite duration into 0ms, which
02565: # several options interpret as "no deadline".
+02566: return 1
{
__pyx_r = 1;
}
goto __pyx_L0;
+02567: return millis
{
__pyx_r = __pyx_v_millis;
}
goto __pyx_L0;
02568:
02569:
+02570: cdef bint _is_int_not_bool(object value):
static int __pyx_f_7questdb_7_client__is_int_not_bool(PyObject *__pyx_v_value) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
02571: """A Python ``int`` that is not a boolean.
02572:
02573: For the connection options, whose values come from a conf string or
02574: a literal in the caller's code. The claim vocabulary reads its
02575: numbers out of arrays and pandas cells too, so it uses
02576: `_is_integral_not_bool` instead.
02577: """
+02578: return isinstance(value, int) and not isinstance(value, bool)
__pyx_t_2 = PyLong_Check(__pyx_v_value); if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L3_bool_binop_done; } __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); __pyx_t_3 = (!__pyx_t_2); __pyx_t_1 = __pyx_t_3; __pyx_L3_bool_binop_done:; { __pyx_r = __pyx_t_1; } goto __pyx_L0;
02579:
02580:
+02581: cdef bint _is_integral_not_bool(object value):
static int __pyx_f_7questdb_7_client__is_integral_not_bool(PyObject *__pyx_v_value) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._is_integral_not_bool", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02582: """A whole number that is not a boolean.
02583:
02584: The one predicate for every number in the round-trip claim
02585: vocabulary: the claim version, a geohash precision wherever it is
02586: read, the ``schema_overrides`` geohash bits, and the arguments the
02587: QWP-only wrapper classes take. Those numbers arrive from array
02588: metadata and from pandas cells as often as from a literal, and
02589: `numpy.int64` is what a claim rebuilt from array metadata carries,
02590: so holding a field to `int` alone drops it over its type.
02591:
02592: ``True == 1``, so a boolean would otherwise read as a version, a
02593: one-bit precision, or a geohash of zero bits. Identity settles it:
02594: `bool` cannot be subclassed, and `numpy.bool_` is not registered as
02595: `numbers.Integral`.
02596:
02597: A caller of this holds the value to a range next, and hands it on
02598: to C. Both want a plain `int`, so each site coerces with `int()`
02599: once the predicate has passed.
02600: """
+02601: return (value is not True and value is not False
__pyx_t_2 = (__pyx_v_value != Py_True);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L3_bool_binop_done;
}
/* … */
__pyx_t_2 = (__pyx_v_value != Py_False);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L3_bool_binop_done;
}
+02602: and isinstance(value, _numbers.Integral))
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_numbers); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2602, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Integral); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2602, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_2 = PyObject_IsInstance(__pyx_v_value, __pyx_t_4); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2602, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_1 = __pyx_t_2; __pyx_L3_bool_binop_done:; { __pyx_r = __pyx_t_1; } goto __pyx_L0;
02603:
02604:
+02605: cdef int64_t auto_flush_rows_default(line_sender_protocol protocol):
static int64_t __pyx_f_7questdb_7_client_auto_flush_rows_default(enum line_sender_protocol __pyx_v_protocol) {
int64_t __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client.auto_flush_rows_default", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1L;
__pyx_L0:;
return __pyx_r;
}
+02606: if _is_http_protocol(protocol):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_http_protocol(__pyx_v_protocol); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2606, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+02607: return 75000
{
__pyx_r = 0x124F8;
}
goto __pyx_L0;
02608: else:
+02609: return 600
/*else*/ {
{
__pyx_r = 0x258;
}
goto __pyx_L0;
}
02610:
02611:
+02612: cdef void_int _parse_auto_flush(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__parse_auto_flush(enum line_sender_protocol __pyx_v_protocol, PyObject *__pyx_v_auto_flush, PyObject *__pyx_v_auto_flush_rows, PyObject *__pyx_v_auto_flush_bytes, PyObject *__pyx_v_auto_flush_interval, struct __pyx_t_7questdb_7_client_auto_flush_mode_t *__pyx_v_c_auto_flush, size_t __pyx_v_max_datagram_size) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
__Pyx_INCREF(__pyx_v_auto_flush);
__Pyx_INCREF(__pyx_v_auto_flush_rows);
__Pyx_INCREF(__pyx_v_auto_flush_bytes);
__Pyx_INCREF(__pyx_v_auto_flush_interval);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client._parse_auto_flush", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_auto_flush);
__Pyx_XDECREF(__pyx_v_auto_flush_rows);
__Pyx_XDECREF(__pyx_v_auto_flush_bytes);
__Pyx_XDECREF(__pyx_v_auto_flush_interval);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02613: line_sender_protocol protocol,
02614: object auto_flush,
02615: object auto_flush_rows,
02616: object auto_flush_bytes,
02617: object auto_flush_interval,
02618: auto_flush_mode_t* c_auto_flush,
02619: size_t max_datagram_size
02620: ) except -1:
02621: # Set defaults.
+02622: if auto_flush_rows is None:
__pyx_t_1 = (__pyx_v_auto_flush_rows == Py_None);
if (__pyx_t_1) {
/* … */
}
+02623: auto_flush_rows = auto_flush_rows_default(protocol)
__pyx_t_2 = __pyx_f_7questdb_7_client_auto_flush_rows_default(__pyx_v_protocol); if (unlikely(__pyx_t_2 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 2623, __pyx_L1_error) __pyx_t_3 = __Pyx_PyLong_From_int64_t(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2623, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF_SET(__pyx_v_auto_flush_rows, __pyx_t_3); __pyx_t_3 = 0;
02624:
+02625: if auto_flush_bytes is None:
__pyx_t_1 = (__pyx_v_auto_flush_bytes == Py_None);
if (__pyx_t_1) {
/* … */
}
+02626: if _is_qwp_udp_protocol(protocol):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_qwp_udp_protocol(__pyx_v_protocol); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2626, __pyx_L1_error) if (__pyx_t_1) { /* … */ goto __pyx_L5; }
+02627: auto_flush_bytes = max_datagram_size if max_datagram_size else 1400
__pyx_t_1 = (__pyx_v_max_datagram_size != 0);
if (__pyx_t_1) {
__pyx_t_4 = __Pyx_PyLong_FromSize_t(__pyx_v_max_datagram_size); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2627, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_3 = __pyx_t_4;
__pyx_t_4 = 0;
} else {
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_1400);
__pyx_t_3 = __pyx_mstate_global->__pyx_int_1400;
}
__Pyx_DECREF_SET(__pyx_v_auto_flush_bytes, __pyx_t_3);
__pyx_t_3 = 0;
02628: else:
+02629: auto_flush_bytes = False
/*else*/ {
__Pyx_INCREF(Py_False);
__Pyx_DECREF_SET(__pyx_v_auto_flush_bytes, Py_False);
}
__pyx_L5:;
02630:
+02631: if auto_flush_interval is None:
__pyx_t_1 = (__pyx_v_auto_flush_interval == Py_None);
if (__pyx_t_1) {
/* … */
}
+02632: auto_flush_interval = 1000
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_1000); __Pyx_DECREF_SET(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_int_1000);
02633:
+02634: if isinstance(auto_flush, str):
__pyx_t_1 = PyUnicode_Check(__pyx_v_auto_flush);
if (__pyx_t_1) {
/* … */
}
+02635: if auto_flush == 'off':
__pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_auto_flush, __pyx_mstate_global->__pyx_n_u_off, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2635, __pyx_L1_error) if (__pyx_t_1) { /* … */ goto __pyx_L8; }
+02636: auto_flush = False
__Pyx_INCREF(Py_False); __Pyx_DECREF_SET(__pyx_v_auto_flush, Py_False);
+02637: elif auto_flush == 'on':
__pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_auto_flush, __pyx_mstate_global->__pyx_n_u_on, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2637, __pyx_L1_error) if (likely(__pyx_t_1)) { /* … */ goto __pyx_L8; }
+02638: auto_flush = True
__Pyx_INCREF(Py_True); __Pyx_DECREF_SET(__pyx_v_auto_flush, Py_True);
02639: else:
+02640: raise QuestDBError(
/*else*/ {
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2640, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+02641: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2641, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2641, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+02642: '"auto_flush" must be None, bool, "on" or "off", ' +
__pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_must_be_None_bool_on, __pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2642, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_t_6}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2640, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 2640, __pyx_L1_error) } __pyx_L8:;
+02643: f'not {auto_flush!r}')
__pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_auto_flush), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2643, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_not, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2643, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
02644:
02645: # Normalise auto_flush parameters to ints or False.
+02646: if isinstance(auto_flush_rows, str):
__pyx_t_1 = PyUnicode_Check(__pyx_v_auto_flush_rows);
if (__pyx_t_1) {
/* … */
goto __pyx_L9;
}
+02647: if auto_flush_rows == 'on':
__pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_auto_flush_rows, __pyx_mstate_global->__pyx_n_u_on, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2647, __pyx_L1_error) if (unlikely(__pyx_t_1)) { /* … */ }
+02648: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2648, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
+02649: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2649, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2649, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_4, __pyx_mstate_global->__pyx_kp_u_auto_flush_rows_cannot_be_on}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2648, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 2648, __pyx_L1_error)
02650: '"auto_flush_rows" cannot be "on"')
+02651: elif auto_flush_rows == 'off':
__pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_auto_flush_rows, __pyx_mstate_global->__pyx_n_u_off, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2651, __pyx_L1_error) if (__pyx_t_1) { /* … */ goto __pyx_L10; }
+02652: auto_flush_rows = False
__Pyx_INCREF(Py_False); __Pyx_DECREF_SET(__pyx_v_auto_flush_rows, Py_False);
02653: else:
+02654: auto_flush_rows = int(auto_flush_rows)
/*else*/ {
__pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_auto_flush_rows); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2654, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF_SET(__pyx_v_auto_flush_rows, __pyx_t_3);
__pyx_t_3 = 0;
}
__pyx_L10:;
+02655: elif auto_flush_rows is False or _is_int_not_bool(auto_flush_rows):
__pyx_t_10 = (__pyx_v_auto_flush_rows == Py_False);
if (!__pyx_t_10) {
} else {
__pyx_t_1 = __pyx_t_10;
goto __pyx_L11_bool_binop_done;
}
__pyx_t_10 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_auto_flush_rows); if (unlikely(__pyx_t_10 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2655, __pyx_L1_error)
__pyx_t_1 = __pyx_t_10;
__pyx_L11_bool_binop_done:;
if (likely(__pyx_t_1)) {
goto __pyx_L9;
}
02656: pass
02657: else:
+02658: raise TypeError(
/*else*/ {
__pyx_t_6 = NULL;
+02659: '"auto_flush_rows" must be an int, False or "off", ' +
__pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_rows_must_be_an_int, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2659, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 2658, __pyx_L1_error) } __pyx_L9:;
+02660: f'not {auto_flush_rows!r}')
__pyx_t_4 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_auto_flush_rows), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2660, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_not, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2660, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
02661:
+02662: if isinstance(auto_flush_bytes, str):
__pyx_t_1 = PyUnicode_Check(__pyx_v_auto_flush_bytes);
if (__pyx_t_1) {
/* … */
goto __pyx_L13;
}
+02663: if auto_flush_bytes == 'on':
__pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_auto_flush_bytes, __pyx_mstate_global->__pyx_n_u_on, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2663, __pyx_L1_error) if (unlikely(__pyx_t_1)) { /* … */ }
+02664: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2664, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
+02665: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2665, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2665, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_auto_flush_bytes_cannot_be_on}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2664, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 2664, __pyx_L1_error)
02666: '"auto_flush_bytes" cannot be "on"')
+02667: elif auto_flush_bytes == 'off':
__pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_auto_flush_bytes, __pyx_mstate_global->__pyx_n_u_off, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2667, __pyx_L1_error) if (__pyx_t_1) { /* … */ goto __pyx_L14; }
+02668: auto_flush_bytes = False
__Pyx_INCREF(Py_False); __Pyx_DECREF_SET(__pyx_v_auto_flush_bytes, Py_False);
02669: else:
+02670: auto_flush_bytes = int(auto_flush_bytes)
/*else*/ {
__pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_auto_flush_bytes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2670, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF_SET(__pyx_v_auto_flush_bytes, __pyx_t_3);
__pyx_t_3 = 0;
}
__pyx_L14:;
+02671: elif auto_flush_bytes is False or _is_int_not_bool(auto_flush_bytes):
__pyx_t_10 = (__pyx_v_auto_flush_bytes == Py_False);
if (!__pyx_t_10) {
} else {
__pyx_t_1 = __pyx_t_10;
goto __pyx_L15_bool_binop_done;
}
__pyx_t_10 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_auto_flush_bytes); if (unlikely(__pyx_t_10 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2671, __pyx_L1_error)
__pyx_t_1 = __pyx_t_10;
__pyx_L15_bool_binop_done:;
if (likely(__pyx_t_1)) {
goto __pyx_L13;
}
02672: pass
02673: else:
+02674: raise TypeError(
/*else*/ {
__pyx_t_6 = NULL;
+02675: '"auto_flush_bytes" must be an int, False or "off", ' +
__pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_bytes_must_be_an_int, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2675, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_7}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2674, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 2674, __pyx_L1_error) } __pyx_L13:;
+02676: f'not {auto_flush_bytes!r}')
__pyx_t_7 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_auto_flush_bytes), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2676, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_not, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2676, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
02677:
+02678: if isinstance(auto_flush_interval, str):
__pyx_t_1 = PyUnicode_Check(__pyx_v_auto_flush_interval);
if (__pyx_t_1) {
/* … */
goto __pyx_L17;
}
+02679: if auto_flush_interval == 'on':
__pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_n_u_on, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2679, __pyx_L1_error) if (unlikely(__pyx_t_1)) { /* … */ }
+02680: raise QuestDBError(
__pyx_t_7 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2680, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
+02681: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2681, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2681, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_auto_flush_interval_cannot_be_o}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2680, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 2680, __pyx_L1_error)
02682: '"auto_flush_interval" cannot be "on"')
+02683: elif auto_flush_interval == 'off':
__pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_n_u_off, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2683, __pyx_L1_error) if (__pyx_t_1) { /* … */ goto __pyx_L18; }
+02684: auto_flush_interval = False
__Pyx_INCREF(Py_False); __Pyx_DECREF_SET(__pyx_v_auto_flush_interval, Py_False);
02685: else:
+02686: auto_flush_interval = int(auto_flush_interval)
/*else*/ {
__pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_auto_flush_interval); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2686, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF_SET(__pyx_v_auto_flush_interval, __pyx_t_3);
__pyx_t_3 = 0;
}
__pyx_L18:;
+02687: elif auto_flush_interval is False or _is_int_not_bool(auto_flush_interval):
__pyx_t_10 = (__pyx_v_auto_flush_interval == Py_False);
if (!__pyx_t_10) {
} else {
__pyx_t_1 = __pyx_t_10;
goto __pyx_L19_bool_binop_done;
}
__pyx_t_10 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_auto_flush_interval); if (unlikely(__pyx_t_10 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2687, __pyx_L1_error)
__pyx_t_1 = __pyx_t_10;
__pyx_L19_bool_binop_done:;
if (__pyx_t_1) {
goto __pyx_L17;
}
02688: pass
+02689: elif isinstance(auto_flush_interval, cp_timedelta):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta);
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L17;
}
+02690: auto_flush_interval = _timedelta_to_millis(auto_flush_interval)
if (!(likely(((__pyx_v_auto_flush_interval) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta))))) __PYX_ERR(0, 2690, __pyx_L1_error) __pyx_t_11 = __pyx_f_7questdb_7_client__timedelta_to_millis(((PyDateTime_Delta *)__pyx_v_auto_flush_interval)); if (unlikely(__pyx_t_11 == ((uint64_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 2690, __pyx_L1_error) __pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2690, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF_SET(__pyx_v_auto_flush_interval, __pyx_t_3); __pyx_t_3 = 0;
02691: else:
+02692: raise TypeError(
/*else*/ {
__pyx_t_6 = NULL;
+02693: '"auto_flush_interval" must be an int, timedelta, False or "off", ' +
__pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_interval_must_be_an, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_5}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2692, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 2692, __pyx_L1_error) } __pyx_L17:;
+02694: f'not {auto_flush_interval!r}')
__pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_auto_flush_interval), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_not, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
02695:
02696: # Coerce auto_flush to bool if None.
+02697: if auto_flush is None:
__pyx_t_1 = (__pyx_v_auto_flush == Py_None);
if (__pyx_t_1) {
/* … */
goto __pyx_L21;
}
02698: auto_flush = (
+02699: (auto_flush_rows is not False) or
__pyx_t_1 = (__pyx_v_auto_flush_rows != Py_False);
if (!__pyx_t_1) {
} else {
__pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2699, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_3 = __pyx_t_5;
__pyx_t_5 = 0;
goto __pyx_L22_bool_binop_done;
}
+02700: (auto_flush_bytes is not False) or
__pyx_t_1 = (__pyx_v_auto_flush_bytes != Py_False);
if (!__pyx_t_1) {
} else {
__pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2700, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_3 = __pyx_t_5;
__pyx_t_5 = 0;
goto __pyx_L22_bool_binop_done;
}
+02701: (auto_flush_interval is not False))
__pyx_t_1 = (__pyx_v_auto_flush_interval != Py_False);
__pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2701, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_3 = __pyx_t_5;
__pyx_t_5 = 0;
__pyx_L22_bool_binop_done:;
__Pyx_DECREF_SET(__pyx_v_auto_flush, __pyx_t_3);
__pyx_t_3 = 0;
+02702: elif not isinstance(auto_flush, bool):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_auto_flush, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool);
__pyx_t_10 = (!__pyx_t_1);
if (unlikely(__pyx_t_10)) {
/* … */
}
__pyx_L21:;
+02703: raise ValueError(
__pyx_t_5 = NULL;
+02704: '"auto_flush" must be None, bool, "on" or "off", ' +
__pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_must_be_None_bool_on, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2704, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 2703, __pyx_L1_error)
+02705: f'not {auto_flush!r}')
__pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_auto_flush), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2705, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_not, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2705, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
02706:
02707: # Validate auto_flush parameters.
+02708: if auto_flush and \
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_auto_flush); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2708, __pyx_L1_error) if (__pyx_t_1) { } else { __pyx_t_10 = __pyx_t_1; goto __pyx_L26_bool_binop_done; } /* … */ if (unlikely(__pyx_t_10)) { /* … */ }
+02709: (auto_flush_rows is False) and \
__pyx_t_1 = (__pyx_v_auto_flush_rows == Py_False);
if (__pyx_t_1) {
} else {
__pyx_t_10 = __pyx_t_1;
goto __pyx_L26_bool_binop_done;
}
+02710: (auto_flush_bytes is False) and \
__pyx_t_1 = (__pyx_v_auto_flush_bytes == Py_False);
if (__pyx_t_1) {
} else {
__pyx_t_10 = __pyx_t_1;
goto __pyx_L26_bool_binop_done;
}
+02711: (auto_flush_interval is False):
__pyx_t_1 = (__pyx_v_auto_flush_interval == Py_False); __pyx_t_10 = __pyx_t_1; __pyx_L26_bool_binop_done:;
+02712: raise ValueError(
__pyx_t_6 = NULL;
__pyx_t_9 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_auto_flush_is_enabled_but_no_ot};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2712, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 2712, __pyx_L1_error)
02713: '"auto_flush" is enabled but no other auto-flush '
02714: 'parameters are enabled. Please set at least one of '
02715: '"auto_flush_rows", "auto_flush_bytes" or '
02716: '"auto_flush_interval".')
02717:
+02718: if auto_flush_rows is not False and auto_flush_rows < 1:
__pyx_t_1 = (__pyx_v_auto_flush_rows != Py_False);
if (__pyx_t_1) {
} else {
__pyx_t_10 = __pyx_t_1;
goto __pyx_L31_bool_binop_done;
}
__pyx_t_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_auto_flush_rows, __pyx_mstate_global->__pyx_int_1, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2718, __pyx_L1_error)
__pyx_t_10 = __pyx_t_1;
__pyx_L31_bool_binop_done:;
if (unlikely(__pyx_t_10)) {
/* … */
}
+02719: raise ValueError(
__pyx_t_6 = NULL;
+02720: '"auto_flush_rows" must be >= 1, '
__pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_rows_must_be_1_not, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2720, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_7}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2719, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 2719, __pyx_L1_error)
+02721: f'not {auto_flush_rows}')
__pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_v_auto_flush_rows, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2721, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5);
02722:
+02723: if auto_flush_bytes is not False and auto_flush_bytes < 1:
__pyx_t_1 = (__pyx_v_auto_flush_bytes != Py_False);
if (__pyx_t_1) {
} else {
__pyx_t_10 = __pyx_t_1;
goto __pyx_L34_bool_binop_done;
}
__pyx_t_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_auto_flush_bytes, __pyx_mstate_global->__pyx_int_1, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2723, __pyx_L1_error)
__pyx_t_10 = __pyx_t_1;
__pyx_L34_bool_binop_done:;
if (unlikely(__pyx_t_10)) {
/* … */
}
+02724: raise ValueError(
__pyx_t_7 = NULL;
+02725: '"auto_flush_bytes" must be >= 1, '
__pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_bytes_must_be_1_not, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2725, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2724, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 2724, __pyx_L1_error)
+02726: f'not {auto_flush_bytes}')
__pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_v_auto_flush_bytes, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2726, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6);
02727:
+02728: if auto_flush_interval is not False and auto_flush_interval < 1:
__pyx_t_1 = (__pyx_v_auto_flush_interval != Py_False);
if (__pyx_t_1) {
} else {
__pyx_t_10 = __pyx_t_1;
goto __pyx_L37_bool_binop_done;
}
__pyx_t_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_int_1, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2728, __pyx_L1_error)
__pyx_t_10 = __pyx_t_1;
__pyx_L37_bool_binop_done:;
if (unlikely(__pyx_t_10)) {
/* … */
}
+02729: raise ValueError(
__pyx_t_5 = NULL;
+02730: '"auto_flush_interval" must be >= 1, '
__pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_interval_must_be_1_n, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2730, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 2729, __pyx_L1_error)
+02731: f'not {auto_flush_interval}')
__pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2731, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7);
02732:
02733: # Parse individual auto_flush parameters to C struct.
+02734: c_auto_flush.enabled = auto_flush
__pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_auto_flush); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2734, __pyx_L1_error) __pyx_v_c_auto_flush->enabled = __pyx_t_10;
02735:
+02736: if auto_flush_rows is False:
__pyx_t_10 = (__pyx_v_auto_flush_rows == Py_False);
if (__pyx_t_10) {
/* … */
goto __pyx_L39;
}
+02737: c_auto_flush.row_count = -1
__pyx_v_c_auto_flush->row_count = -1L;
02738: else:
+02739: c_auto_flush.row_count = auto_flush_rows
/*else*/ {
__pyx_t_2 = __Pyx_PyLong_As_int64_t(__pyx_v_auto_flush_rows); if (unlikely((__pyx_t_2 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2739, __pyx_L1_error)
__pyx_v_c_auto_flush->row_count = __pyx_t_2;
}
__pyx_L39:;
02740:
+02741: if auto_flush_bytes is False:
__pyx_t_10 = (__pyx_v_auto_flush_bytes == Py_False);
if (__pyx_t_10) {
/* … */
goto __pyx_L40;
}
+02742: c_auto_flush.byte_count = -1
__pyx_v_c_auto_flush->byte_count = -1L;
02743: else:
+02744: c_auto_flush.byte_count = auto_flush_bytes
/*else*/ {
__pyx_t_2 = __Pyx_PyLong_As_int64_t(__pyx_v_auto_flush_bytes); if (unlikely((__pyx_t_2 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2744, __pyx_L1_error)
__pyx_v_c_auto_flush->byte_count = __pyx_t_2;
}
__pyx_L40:;
02745:
+02746: if auto_flush_interval is False:
__pyx_t_10 = (__pyx_v_auto_flush_interval == Py_False);
if (__pyx_t_10) {
/* … */
goto __pyx_L41;
}
+02747: c_auto_flush.interval = -1
__pyx_v_c_auto_flush->interval = -1L;
02748: else:
+02749: c_auto_flush.interval = auto_flush_interval
/*else*/ {
__pyx_t_2 = __Pyx_PyLong_As_int64_t(__pyx_v_auto_flush_interval); if (unlikely((__pyx_t_2 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2749, __pyx_L1_error)
__pyx_v_c_auto_flush->interval = __pyx_t_2;
}
__pyx_L41:;
02750:
02751:
+02752: cdef void_int _parse_pooled_auto_flush(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__parse_pooled_auto_flush(enum line_sender_protocol __pyx_v_protocol, PyObject *__pyx_v_auto_flush, PyObject *__pyx_v_auto_flush_rows, PyObject *__pyx_v_auto_flush_bytes, PyObject *__pyx_v_auto_flush_interval, struct __pyx_t_7questdb_7_client_auto_flush_mode_t *__pyx_v_c_auto_flush, int *__pyx_v_c_auto_flush_bytes_dynamic) {
int __pyx_v_default_auto_flush_bytes;
__pyx_t_7questdb_7_client_void_int __pyx_r;
__Pyx_INCREF(__pyx_v_auto_flush_rows);
__Pyx_INCREF(__pyx_v_auto_flush_bytes);
__Pyx_INCREF(__pyx_v_auto_flush_interval);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client._parse_pooled_auto_flush", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_auto_flush_rows);
__Pyx_XDECREF(__pyx_v_auto_flush_bytes);
__Pyx_XDECREF(__pyx_v_auto_flush_interval);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
02753: line_sender_protocol protocol,
02754: object auto_flush,
02755: object auto_flush_rows,
02756: object auto_flush_bytes,
02757: object auto_flush_interval,
02758: auto_flush_mode_t* c_auto_flush,
02759: bint* c_auto_flush_bytes_dynamic,
02760: ) except -1:
02761: """Parse the QWP pool's Java-builder-compatible auto-flush policy."""
+02762: cdef bint default_auto_flush_bytes = auto_flush_bytes is None
__pyx_t_1 = (__pyx_v_auto_flush_bytes == Py_None); __pyx_v_default_auto_flush_bytes = __pyx_t_1;
+02763: if auto_flush_rows is None:
__pyx_t_1 = (__pyx_v_auto_flush_rows == Py_None);
if (__pyx_t_1) {
/* … */
}
+02764: auto_flush_rows = 1000
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_1000); __Pyx_DECREF_SET(__pyx_v_auto_flush_rows, __pyx_mstate_global->__pyx_int_1000);
+02765: if auto_flush_bytes is None:
__pyx_t_1 = (__pyx_v_auto_flush_bytes == Py_None);
if (__pyx_t_1) {
/* … */
}
02766: # The pooled path derives its byte threshold from the negotiated frame
02767: # cap. Give the generic parser an enabled placeholder so the byte
02768: # trigger alone still turns auto-flush on; the separate flag records
02769: # that this placeholder is dynamic rather than a literal threshold.
+02770: auto_flush_bytes = 1
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_1); __Pyx_DECREF_SET(__pyx_v_auto_flush_bytes, __pyx_mstate_global->__pyx_int_1);
+02771: if auto_flush_interval is None:
__pyx_t_1 = (__pyx_v_auto_flush_interval == Py_None);
if (__pyx_t_1) {
/* … */
}
+02772: auto_flush_interval = 100
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_100); __Pyx_DECREF_SET(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_int_100);
+02773: _parse_auto_flush(
__pyx_t_2 = __pyx_f_7questdb_7_client__parse_auto_flush(__pyx_v_protocol, __pyx_v_auto_flush, __pyx_v_auto_flush_rows, __pyx_v_auto_flush_bytes, __pyx_v_auto_flush_interval, __pyx_v_c_auto_flush, 0); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2773, __pyx_L1_error)
02774: protocol,
02775: auto_flush,
02776: auto_flush_rows,
02777: auto_flush_bytes,
02778: auto_flush_interval,
02779: c_auto_flush,
02780: 0)
+02781: c_auto_flush_bytes_dynamic[0] = default_auto_flush_bytes
(__pyx_v_c_auto_flush_bytes_dynamic[0]) = __pyx_v_default_auto_flush_bytes;
02782:
02783:
02784: # The frame cap a QuestDB server advertises with its default settings:
02785: # 2 MiB less 14 bytes.
+02786: cdef size_t _QWP_DEFAULT_SERVER_FRAME_CAP = 2 * 1024 * 1024 - 14
__pyx_v_7questdb_7_client__QWP_DEFAULT_SERVER_FRAME_CAP = 0x1ffff2;
02787:
02788:
+02789: cdef inline size_t _qwp_row_planning_cap(
static CYTHON_INLINE size_t __pyx_f_7questdb_7_client__qwp_row_planning_cap(size_t __pyx_v_hard_cap, int __pyx_v_server_cap_known) {
size_t __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
02790: size_t hard_cap, bint server_cap_known) noexcept:
02791: """
02792: The frame cap a QWP/WebSocket row buffer plans its frames for.
02793:
02794: Until the server advertises its cap, `hard_cap` is only the local
02795: limit, and rows buffered up to it would not fit a server running the
02796: default cap once that cap is known. So the buffer plans for the default
02797: cap until then, or for the local limit if that is lower. Only planning
02798: uses it: a publish refuses a frame by the local limit alone.
02799: """
+02800: if not server_cap_known and hard_cap > _QWP_DEFAULT_SERVER_FRAME_CAP:
__pyx_t_2 = (!__pyx_v_server_cap_known);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_hard_cap > __pyx_v_7questdb_7_client__QWP_DEFAULT_SERVER_FRAME_CAP);
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+02801: return _QWP_DEFAULT_SERVER_FRAME_CAP
{
__pyx_r = __pyx_v_7questdb_7_client__QWP_DEFAULT_SERVER_FRAME_CAP;
}
goto __pyx_L0;
+02802: return hard_cap
{
__pyx_r = __pyx_v_hard_cap;
}
goto __pyx_L0;
02803:
02804:
+02805: cdef size_t _qwp_row_byte_limit(
static size_t __pyx_f_7questdb_7_client__qwp_row_byte_limit(struct __pyx_t_7questdb_7_client_auto_flush_mode_t const *__pyx_v_mode, int __pyx_v_bytes_dynamic, size_t __pyx_v_hard_cap) {
size_t __pyx_v_soft_cap;
size_t __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
02806: const auto_flush_mode_t* mode,
02807: bint bytes_dynamic,
02808: size_t hard_cap) noexcept:
02809: """
02810: The `auto_flush_bytes` threshold of a QWP/WebSocket row buffer whose
02811: byte trigger is on, for the frame cap `hard_cap` it plans for.
02812:
02813: A threshold derived from the frame cap is 90% of it. An explicit
02814: threshold above 90% of the cap is lowered to it.
02815: """
02816: # floor(hard_cap * 0.9) without overflowing size_t.
02817: cdef size_t soft_cap = ((hard_cap // 10) * 9
+02818: + ((hard_cap % 10) * 9) // 10)
__pyx_v_soft_cap = (((__pyx_v_hard_cap / 10) * 9) + (((__pyx_v_hard_cap % 10) * 9) / 10));
+02819: if bytes_dynamic:
if (__pyx_v_bytes_dynamic) {
/* … */
}
+02820: return soft_cap
{
__pyx_r = __pyx_v_soft_cap;
}
goto __pyx_L0;
+02821: if soft_cap < <size_t>mode.byte_count:
__pyx_t_1 = (__pyx_v_soft_cap < ((size_t)__pyx_v_mode->byte_count));
if (__pyx_t_1) {
/* … */
}
+02822: return soft_cap
{
__pyx_r = __pyx_v_soft_cap;
}
goto __pyx_L0;
+02823: return <size_t>mode.byte_count
{
__pyx_r = ((size_t)__pyx_v_mode->byte_count);
}
goto __pyx_L0;
02824:
02825:
+02826: cdef bint _qwp_row_should_auto_flush(
static int __pyx_f_7questdb_7_client__qwp_row_should_auto_flush(struct __pyx_t_7questdb_7_client_auto_flush_mode_t const *__pyx_v_mode, int __pyx_v_bytes_dynamic, struct line_sender_buffer *__pyx_v_buf, size_t __pyx_v_hard_cap, int64_t __pyx_v_interval_start_ms) {
size_t __pyx_v_buffer_size;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
02827: const auto_flush_mode_t* mode,
02828: bint bytes_dynamic,
02829: line_sender_buffer* buf,
02830: size_t hard_cap,
02831: int64_t interval_start_ms) noexcept:
02832: """
02833: Whether a QWP/WebSocket row buffer is due for auto-flush.
02834:
02835: Besides the configured row, byte and interval triggers, a buffer whose
02836: size estimate reaches the full frame cap is always due: it may not fit
02837: in one frame, and publishing now lets the rows before the newest one go
02838: out on their own. `auto_flush_bytes=off` therefore turns off only the
02839: configured byte trigger.
02840: """
02841: cdef size_t buffer_size
+02842: if not mode.enabled:
__pyx_t_1 = (!(__pyx_v_mode->enabled != 0));
if (__pyx_t_1) {
/* … */
}
+02843: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+02844: if (mode.row_count != -1 and
__pyx_t_2 = (__pyx_v_mode->row_count != -1L);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L5_bool_binop_done;
}
/* … */
if (__pyx_t_1) {
/* … */
}
+02845: line_sender_buffer_row_count(buf) >= <size_t>mode.row_count):
__pyx_t_2 = (line_sender_buffer_row_count(__pyx_v_buf) >= ((size_t)__pyx_v_mode->row_count)); __pyx_t_1 = __pyx_t_2; __pyx_L5_bool_binop_done:;
+02846: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+02847: buffer_size = line_sender_buffer_size(buf)
__pyx_v_buffer_size = line_sender_buffer_size(__pyx_v_buf);
+02848: if buffer_size >= hard_cap:
__pyx_t_1 = (__pyx_v_buffer_size >= __pyx_v_hard_cap);
if (__pyx_t_1) {
/* … */
}
+02849: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+02850: if (mode.byte_count != -1 and
__pyx_t_2 = (__pyx_v_mode->byte_count != -1L);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L9_bool_binop_done;
}
/* … */
if (__pyx_t_1) {
/* … */
}
+02851: buffer_size >= _qwp_row_byte_limit(
__pyx_t_2 = (__pyx_v_buffer_size >= __pyx_f_7questdb_7_client__qwp_row_byte_limit(__pyx_v_mode, __pyx_v_bytes_dynamic, __pyx_v_hard_cap)); __pyx_t_1 = __pyx_t_2; __pyx_L9_bool_binop_done:;
02852: mode, bytes_dynamic, hard_cap)):
+02853: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+02854: if (mode.interval != -1 and
__pyx_t_2 = (__pyx_v_mode->interval != -1L);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L12_bool_binop_done;
}
/* … */
if (__pyx_t_1) {
/* … */
}
02855: ((line_sender_now_micros() // 1000) - interval_start_ms)
+02856: >= mode.interval):
__pyx_t_2 = ((__Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1) - __pyx_v_interval_start_ms) >= __pyx_v_mode->interval); __pyx_t_1 = __pyx_t_2; __pyx_L12_bool_binop_done:;
+02857: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+02858: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
02859:
02860:
+02861: class TaggedEnum(Enum):
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_Enum); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2861, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); { PyObject* __pyx_temp[1] = {__pyx_t_17}; __pyx_t_25 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2861, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); } __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_17 = __Pyx_PEP560_update_bases(__pyx_t_25); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2861, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_4 = __Pyx_CalculateMetaclass(NULL, __pyx_t_17); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2861, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_19 = __Pyx_Py3MetaclassPrepare(__pyx_t_4, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_TaggedEnum, __pyx_mstate_global->__pyx_n_u_TaggedEnum, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Base_class_for_tagged_enums); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2861, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__pyx_t_17 != __pyx_t_25) { if (unlikely((PyDict_SetItemString(__pyx_t_19, "__orig_bases__", __pyx_t_25) < 0))) __PYX_ERR(0, 2861, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; /* … */ __pyx_t_16 = __Pyx_Py3ClassCreate(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_TaggedEnum, __pyx_t_17, __pyx_t_19, NULL, 0, 0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2861, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_TaggedEnum, __pyx_t_16) < (0)) __PYX_ERR(0, 2861, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
02862: """
02863: Base class for tagged enums.
02864: """
02865:
+02866: @property
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_10TaggedEnum_1tag(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_10TaggedEnum_tag, "\n Short name.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_10TaggedEnum_1tag = {"tag", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_10TaggedEnum_1tag, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_10TaggedEnum_tag}; static PyObject *__pyx_pw_7questdb_7_client_10TaggedEnum_1tag(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_self = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("tag (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 2866, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2866, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "tag", 0) < (0)) __PYX_ERR(0, 2866, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("tag", 1, 1, 1, i); __PYX_ERR(0, 2866, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2866, __pyx_L3_error) } __pyx_v_self = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("tag", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2866, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.TaggedEnum.tag", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_10TaggedEnum_tag(__pyx_self, __pyx_v_self); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_10TaggedEnum_tag(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("questdb._client.TaggedEnum.tag", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_16 = NULL; __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_10TaggedEnum_1tag, 0, __pyx_mstate_global->__pyx_n_u_TaggedEnum_tag, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[107])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2866, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20); #endif __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_16, __pyx_t_20}; __pyx_t_25 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_property, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2866, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); } if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_tag, __pyx_t_25) < (0)) __PYX_ERR(0, 2866, __pyx_L1_error) __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
02867: def tag(self):
02868: """
02869: Short name.
02870: """
+02871: return self.value[0]
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2871, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2871, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
02872:
+02873: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_10TaggedEnum_3c_value(PyObject *__pyx_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_10TaggedEnum_3c_value = {"c_value", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_10TaggedEnum_3c_value, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_10TaggedEnum_3c_value(PyObject *__pyx_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_self = 0;
#if !CYTHON_VECTORCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("c_value (wrapper)", 0);
#if !CYTHON_VECTORCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0};
PyObject* values[1] = {0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 2873, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2873, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "c_value", 0) < (0)) __PYX_ERR(0, 2873, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("c_value", 1, 1, 1, i); __PYX_ERR(0, 2873, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2873, __pyx_L3_error)
}
__pyx_v_self = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("c_value", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2873, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.TaggedEnum.c_value", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_10TaggedEnum_2c_value(__pyx_self, __pyx_v_self);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_10TaggedEnum_2c_value(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.TaggedEnum.c_value", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_20 = NULL;
__pyx_t_16 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_10TaggedEnum_3c_value, 0, __pyx_mstate_global->__pyx_n_u_TaggedEnum_c_value, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[108])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2873, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_16);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16);
#endif
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_20, __pyx_t_16};
__pyx_t_25 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_property, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2873, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_25);
}
if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_c_value, __pyx_t_25) < (0)) __PYX_ERR(0, 2873, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
02874: def c_value(self):
+02875: return self.value[1]
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2875, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2875, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
02876:
+02877: @classmethod
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_10TaggedEnum_5parse(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_10TaggedEnum_4parse, "\n Parse from the tag name.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_10TaggedEnum_5parse = {"parse", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_10TaggedEnum_5parse, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_10TaggedEnum_4parse}; static PyObject *__pyx_pw_7questdb_7_client_10TaggedEnum_5parse(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_cls = 0; PyObject *__pyx_v_tag = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("parse (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_cls,&__pyx_mstate_global->__pyx_n_u_tag,0}; PyObject* values[2] = {0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 2877, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 2877, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2877, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "parse", 0) < (0)) __PYX_ERR(0, 2877, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 2; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("parse", 1, 2, 2, i); __PYX_ERR(0, 2877, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2877, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 2877, __pyx_L3_error) } __pyx_v_cls = values[0]; __pyx_v_tag = values[1]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("parse", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 2877, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.TaggedEnum.parse", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_10TaggedEnum_4parse(__pyx_self, __pyx_v_cls, __pyx_v_tag); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_10TaggedEnum_4parse(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls, PyObject *__pyx_v_tag) { PyObject *__pyx_v_entry = NULL; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_10); __Pyx_AddTraceback("questdb._client.TaggedEnum.parse", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_entry); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_10TaggedEnum_5parse, __Pyx_CYFUNCTION_CLASSMETHOD, __pyx_mstate_global->__pyx_n_u_TaggedEnum_parse, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[109])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2877, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25); #endif __pyx_t_16 = __Pyx_Method_ClassMethod(__pyx_t_25); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2877, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_parse, __pyx_t_16) < (0)) __PYX_ERR(0, 2877, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
02878: def parse(cls, tag):
02879: """
02880: Parse from the tag name.
02881: """
+02882: if tag is None:
__pyx_t_1 = (__pyx_v_tag == Py_None);
if (__pyx_t_1) {
/* … */
}
+02883: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+02884: elif isinstance(tag, cls):
__pyx_t_1 = PyObject_IsInstance(__pyx_v_tag, __pyx_v_cls); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2884, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+02885: return tag
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_tag);
__pyx_r = __pyx_v_tag;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+02886: elif isinstance(tag, str):
__pyx_t_1 = PyUnicode_Check(__pyx_v_tag);
if (likely(__pyx_t_1)) {
/* … */
}
+02887: for entry in cls:
if (likely(PyList_CheckExact(__pyx_v_cls)) || PyTuple_CheckExact(__pyx_v_cls)) { __pyx_t_2 = __pyx_v_cls; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; __pyx_t_4 = NULL; } else { __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_cls); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2887, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2887, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_4)) { if (likely(PyList_CheckExact(__pyx_t_2))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_2); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 2887, __pyx_L1_error) #endif if (__pyx_t_3 >= __pyx_temp) break; } __pyx_t_5 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_2, __pyx_t_3, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_3; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 2887, __pyx_L1_error) #endif if (__pyx_t_3 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3)); #else __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_3); #endif ++__pyx_t_3; } if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2887, __pyx_L1_error) } else { __pyx_t_5 = __pyx_t_4(__pyx_t_2); if (unlikely(!__pyx_t_5)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 2887, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_5); __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_5); __pyx_t_5 = 0; /* … */ } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+02888: if entry.tag == tag:
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_entry, __pyx_mstate_global->__pyx_n_u_tag); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2888, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_5, __pyx_v_tag, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2888, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_1) { /* … */ }
+02889: return entry
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_entry);
__pyx_r = __pyx_v_entry;
}
__Pyx_XDECREF(__pyx_temp);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
goto __pyx_L0;
+02890: raise ValueError(f'Invalid value for {cls.__name__}: {tag!r}')
__pyx_t_5 = NULL;
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_cls, __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2890, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_t_6, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2890, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_tag), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2890, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_Invalid_value_for;
__pyx_t_8[1] = __pyx_t_7;
__pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u__2;
__pyx_t_8[3] = __pyx_t_6;
__pyx_t_3 = 20;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[3]);
#endif
__pyx_t_9 = 0;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_9 |= __Pyx_PyUnicode_KIND_04(__pyx_t_8[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_8[3]);
#endif
__pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_8, 4, __pyx_t_3, __pyx_t_9);
if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2890, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_t_11 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_10};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2890, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 2890, __pyx_L1_error)
02891: else:
+02892: raise ValueError(f'Invalid value for {cls.__name__}: {tag!r}')
/*else*/ {
__pyx_t_10 = NULL;
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_cls, __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2892, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2892, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_tag), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2892, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_Invalid_value_for;
__pyx_t_8[1] = __pyx_t_6;
__pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u__2;
__pyx_t_8[3] = __pyx_t_5;
__pyx_t_3 = 20;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[3]);
#endif
__pyx_t_9 = 0;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_9 |= __Pyx_PyUnicode_KIND_04(__pyx_t_8[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_8[3]);
#endif
__pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_8, 4, __pyx_t_3, __pyx_t_9);
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2892, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_t_11 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_t_7};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2892, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 2892, __pyx_L1_error)
}
02893:
02894:
+02895: class Protocol(TaggedEnum):
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2895, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); { PyObject* __pyx_temp[1] = {__pyx_t_17}; __pyx_t_4 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2895, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_17 = __Pyx_PEP560_update_bases(__pyx_t_4); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2895, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_19 = __Pyx_CalculateMetaclass(NULL, __pyx_t_17); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2895, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_16 = __Pyx_Py3MetaclassPrepare(__pyx_t_19, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_Protocol, __pyx_mstate_global->__pyx_n_u_Protocol, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Protocol_to_use_for_sending_dat); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2895, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); if (__pyx_t_17 != __pyx_t_4) { if (unlikely((PyDict_SetItemString(__pyx_t_16, "__orig_bases__", __pyx_t_4) < 0))) __PYX_ERR(0, 2895, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* … */ __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_Protocol, __pyx_t_17, __pyx_t_16, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2895, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_Protocol, __pyx_t_4) < (0)) __PYX_ERR(0, 2895, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
02896: """
02897: Protocol to use for sending data to QuestDB.
02898:
02899: See :ref:`sender_which_protocol` for more information.
02900: """
+02901: Tcp = ('tcp', 0)
if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Tcp, __pyx_mstate_global->__pyx_tuple[51]) < (0)) __PYX_ERR(0, 2901, __pyx_L1_error) /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_tcp, __pyx_mstate_global->__pyx_int_0}; __pyx_mstate_global->__pyx_tuple[51] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[51])) __PYX_ERR(0, 2901, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[51]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[51]);
+02902: Tcps = ('tcps', 1)
if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Tcps, __pyx_mstate_global->__pyx_tuple[52]) < (0)) __PYX_ERR(0, 2902, __pyx_L1_error) /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_tcps, __pyx_mstate_global->__pyx_int_1}; __pyx_mstate_global->__pyx_tuple[52] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[52])) __PYX_ERR(0, 2902, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[52]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[52]);
+02903: Http = ('http', 2)
if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Http, __pyx_mstate_global->__pyx_tuple[53]) < (0)) __PYX_ERR(0, 2903, __pyx_L1_error) /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_http, __pyx_mstate_global->__pyx_int_2}; __pyx_mstate_global->__pyx_tuple[53] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[53])) __PYX_ERR(0, 2903, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[53]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[53]);
+02904: Https = ('https', 3)
if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Https, __pyx_mstate_global->__pyx_tuple[54]) < (0)) __PYX_ERR(0, 2904, __pyx_L1_error) /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_https, __pyx_mstate_global->__pyx_int_3}; __pyx_mstate_global->__pyx_tuple[54] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[54])) __PYX_ERR(0, 2904, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[54]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[54]);
+02905: Udp = ('udp', 4)
if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Udp, __pyx_mstate_global->__pyx_tuple[55]) < (0)) __PYX_ERR(0, 2905, __pyx_L1_error) /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_udp, __pyx_mstate_global->__pyx_int_4}; __pyx_mstate_global->__pyx_tuple[55] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[55])) __PYX_ERR(0, 2905, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[55]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[55]);
+02906: Ws = ('ws', 5)
if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Ws, __pyx_mstate_global->__pyx_tuple[56]) < (0)) __PYX_ERR(0, 2906, __pyx_L1_error) /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_ws, __pyx_mstate_global->__pyx_int_5}; __pyx_mstate_global->__pyx_tuple[56] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[56])) __PYX_ERR(0, 2906, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[56]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[56]);
+02907: Wss = ('wss', 6)
if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Wss, __pyx_mstate_global->__pyx_tuple[57]) < (0)) __PYX_ERR(0, 2907, __pyx_L1_error) /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_wss, __pyx_mstate_global->__pyx_int_6}; __pyx_mstate_global->__pyx_tuple[57] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[57])) __PYX_ERR(0, 2907, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[57]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[57]);
02908:
+02909: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_8Protocol_1tls_enabled(PyObject *__pyx_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_8Protocol_1tls_enabled = {"tls_enabled", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_8Protocol_1tls_enabled, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_8Protocol_1tls_enabled(PyObject *__pyx_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_self = 0;
#if !CYTHON_VECTORCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("tls_enabled (wrapper)", 0);
#if !CYTHON_VECTORCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0};
PyObject* values[1] = {0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 2909, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2909, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "tls_enabled", 0) < (0)) __PYX_ERR(0, 2909, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("tls_enabled", 1, 1, 1, i); __PYX_ERR(0, 2909, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 2909, __pyx_L3_error)
}
__pyx_v_self = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("tls_enabled", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2909, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.Protocol.tls_enabled", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_8Protocol_tls_enabled(__pyx_self, __pyx_v_self);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_8Protocol_tls_enabled(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.Protocol.tls_enabled", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_25 = NULL;
__pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_8Protocol_1tls_enabled, 0, __pyx_mstate_global->__pyx_n_u_Protocol_tls_enabled, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[110])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2909, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_20);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20);
#endif
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_25, __pyx_t_20};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_property, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
__Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2909, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_tls_enabled, __pyx_t_4) < (0)) __PYX_ERR(0, 2909, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
02910: def tls_enabled(self):
+02911: return self in (Protocol.Tcps, Protocol.Https, Protocol.Wss)
__Pyx_INCREF(__pyx_v_self); __pyx_t_1 = __pyx_v_self; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2911, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Tcps); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2911, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_1, __pyx_t_4, Py_EQ); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 2911, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_5) { } else { __pyx_t_2 = __pyx_t_5; goto __pyx_L3_bool_binop_done; } __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2911, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_Https); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2911, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_1, __pyx_t_3, Py_EQ); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 2911, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!__pyx_t_5) { } else { __pyx_t_2 = __pyx_t_5; goto __pyx_L3_bool_binop_done; } __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2911, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Wss); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2911, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_1, __pyx_t_4, Py_EQ); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 2911, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_2 = __pyx_t_5; __pyx_L3_bool_binop_done:; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2911, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
02912:
02913:
+02914: class QwpWsProgress(TaggedEnum):
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2914, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); { PyObject* __pyx_temp[1] = {__pyx_t_17}; __pyx_t_19 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2914, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); } __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_17 = __Pyx_PEP560_update_bases(__pyx_t_19); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2914, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_16 = __Pyx_CalculateMetaclass(NULL, __pyx_t_17); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2914, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_16, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_QwpWsProgress, __pyx_mstate_global->__pyx_n_u_QwpWsProgress, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Progress_mode_for_QWP_WebSocket); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2914, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (__pyx_t_17 != __pyx_t_19) { if (unlikely((PyDict_SetItemString(__pyx_t_4, "__orig_bases__", __pyx_t_19) < 0))) __PYX_ERR(0, 2914, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; /* … */ __pyx_t_19 = __Pyx_Py3ClassCreate(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QwpWsProgress, __pyx_t_17, __pyx_t_4, NULL, 0, 0); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2914, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_QwpWsProgress, __pyx_t_19) < (0)) __PYX_ERR(0, 2914, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
02915: """
02916: Progress mode for QWP/WebSocket senders.
02917: """
+02918: Background = ('background', LINE_SENDER_QWPWS_PROGRESS_BACKGROUND)
__pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_qwpws_progress(LINE_SENDER_QWPWS_PROGRESS_BACKGROUND); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2918, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_background, __pyx_t_19}; __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2918, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); } __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_Background, __pyx_t_20) < (0)) __PYX_ERR(0, 2918, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+02919: Manual = ('manual', LINE_SENDER_QWPWS_PROGRESS_MANUAL)
__pyx_t_20 = __Pyx_PyLong_From_enum__line_sender_qwpws_progress(LINE_SENDER_QWPWS_PROGRESS_MANUAL); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2919, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_manual, __pyx_t_20}; __pyx_t_19 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2919, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); } __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_Manual, __pyx_t_19) < (0)) __PYX_ERR(0, 2919, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
02920:
02921:
+02922: class SenderErrorCategory(TaggedEnum):
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2922, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); { PyObject* __pyx_temp[1] = {__pyx_t_17}; __pyx_t_16 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2922, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); } __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_17 = __Pyx_PEP560_update_bases(__pyx_t_16); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2922, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_4 = __Pyx_CalculateMetaclass(NULL, __pyx_t_17); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2922, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_19 = __Pyx_Py3MetaclassPrepare(__pyx_t_4, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Category_of_a_structured_QWP_We); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2922, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__pyx_t_17 != __pyx_t_16) { if (unlikely((PyDict_SetItemString(__pyx_t_19, "__orig_bases__", __pyx_t_16) < 0))) __PYX_ERR(0, 2922, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; /* … */ __pyx_t_16 = __Pyx_Py3ClassCreate(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory, __pyx_t_17, __pyx_t_19, NULL, 0, 0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2922, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory, __pyx_t_16) < (0)) __PYX_ERR(0, 2922, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
02923: """
02924: Category of a structured QWP/WebSocket diagnostic.
02925: """
02926: SchemaMismatch = (
+02927: 'schema_mismatch',
{
PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_schema_mismatch, __pyx_t_16};
__pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2927, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_20);
}
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_SchemaMismatch, __pyx_t_20) < (0)) __PYX_ERR(0, 2926, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+02928: LINE_SENDER_QWPWS_ERROR_SCHEMA_MISMATCH)
__pyx_t_16 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_SCHEMA_MISMATCH); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2928, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16);
+02929: ParseError = ('parse_error', LINE_SENDER_QWPWS_ERROR_PARSE_ERROR)
__pyx_t_20 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_PARSE_ERROR); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2929, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_parse_error, __pyx_t_20}; __pyx_t_16 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2929, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); } __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_ParseError, __pyx_t_16) < (0)) __PYX_ERR(0, 2929, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+02930: InternalError = ('internal_error', LINE_SENDER_QWPWS_ERROR_INTERNAL_ERROR)
__pyx_t_16 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_INTERNAL_ERROR); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2930, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_internal_error, __pyx_t_16}; __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2930, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_InternalError, __pyx_t_20) < (0)) __PYX_ERR(0, 2930, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+02931: SecurityError = ('security_error', LINE_SENDER_QWPWS_ERROR_SECURITY_ERROR)
__pyx_t_20 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_SECURITY_ERROR); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2931, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_security_error, __pyx_t_20}; __pyx_t_16 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2931, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); } __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_SecurityError, __pyx_t_16) < (0)) __PYX_ERR(0, 2931, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+02932: WriteError = ('write_error', LINE_SENDER_QWPWS_ERROR_WRITE_ERROR)
__pyx_t_16 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_WRITE_ERROR); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2932, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_write_error, __pyx_t_16}; __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2932, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_WriteError, __pyx_t_20) < (0)) __PYX_ERR(0, 2932, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+02933: NotWritable = ('not_writable', LINE_SENDER_QWPWS_ERROR_NOT_WRITABLE)
__pyx_t_20 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_NOT_WRITABLE); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2933, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_not_writable, __pyx_t_20}; __pyx_t_16 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2933, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); } __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_NotWritable, __pyx_t_16) < (0)) __PYX_ERR(0, 2933, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
02934: ProtocolViolation = (
+02935: 'protocol_violation',
{
PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_protocol_violation, __pyx_t_16};
__pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2935, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_20);
}
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_ProtocolViolation, __pyx_t_20) < (0)) __PYX_ERR(0, 2934, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+02936: LINE_SENDER_QWPWS_ERROR_PROTOCOL_VIOLATION)
__pyx_t_16 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_PROTOCOL_VIOLATION); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2936, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16);
+02937: Unknown = ('unknown', LINE_SENDER_QWPWS_ERROR_UNKNOWN)
__pyx_t_20 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_UNKNOWN); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2937, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_unknown, __pyx_t_20}; __pyx_t_16 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2937, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); } __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_Unknown, __pyx_t_16) < (0)) __PYX_ERR(0, 2937, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
02938:
02939:
+02940: class SenderErrorPolicy(TaggedEnum):
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2940, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); { PyObject* __pyx_temp[1] = {__pyx_t_17}; __pyx_t_4 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2940, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_17 = __Pyx_PEP560_update_bases(__pyx_t_4); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2940, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_19 = __Pyx_CalculateMetaclass(NULL, __pyx_t_17); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2940, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_16 = __Pyx_Py3MetaclassPrepare(__pyx_t_19, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Applied_policy_for_a_structured); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2940, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); if (__pyx_t_17 != __pyx_t_4) { if (unlikely((PyDict_SetItemString(__pyx_t_16, "__orig_bases__", __pyx_t_4) < 0))) __PYX_ERR(0, 2940, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* … */ __pyx_t_20 = __Pyx_Py3ClassCreate(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy, __pyx_t_17, __pyx_t_16, NULL, 0, 0); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2940, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy, __pyx_t_20) < (0)) __PYX_ERR(0, 2940, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
02941: """
02942: Applied policy for a structured QWP/WebSocket diagnostic.
02943: """
+02944: Retriable = ('retriable', LINE_SENDER_QWPWS_ERROR_RETRIABLE)
__pyx_t_4 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_policy(LINE_SENDER_QWPWS_ERROR_RETRIABLE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2944, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_retriable, __pyx_t_4}; __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2944, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Retriable, __pyx_t_20) < (0)) __PYX_ERR(0, 2944, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
02945: RetriableOther = (
+02946: 'retriable_other',
{
PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_retriable_other, __pyx_t_20};
__pyx_t_4 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2946, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_RetriableOther, __pyx_t_4) < (0)) __PYX_ERR(0, 2945, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+02947: LINE_SENDER_QWPWS_ERROR_RETRIABLE_OTHER)
__pyx_t_20 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_policy(LINE_SENDER_QWPWS_ERROR_RETRIABLE_OTHER); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2947, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20);
+02948: Terminal = ('terminal', LINE_SENDER_QWPWS_ERROR_TERMINAL)
__pyx_t_4 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_policy(LINE_SENDER_QWPWS_ERROR_TERMINAL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2948, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_terminal, __pyx_t_4}; __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2948, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Terminal, __pyx_t_20) < (0)) __PYX_ERR(0, 2948, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
02949:
02950:
+02951: @dataclass(frozen=True)
__pyx_t_20 = NULL; __pyx_t_25 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_dataclass); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2951, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_21); __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_25, Py_True}; #if CYTHON_VECTORCALL __pyx_t_18 = __pyx_mstate_global->__pyx_tuple[58]; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 2951, __pyx_L1_error) __Pyx_INCREF(__pyx_t_18); #else { PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_frozen}; __pyx_t_18 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 2951, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } #endif __pyx_t_4 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_21, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_18); __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2951, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_20, __pyx_t_19}; __pyx_t_16 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2951, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); } if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_SenderError, __pyx_t_16) < (0)) __PYX_ERR(0, 2952, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; /* … */ { PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_frozen}; __pyx_mstate_global->__pyx_tuple[58] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[58])) __PYX_ERR(0, 2951, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[58]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[58]);
+02952: class SenderError:
__pyx_t_17 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_mstate_global->__pyx_empty_tuple, __pyx_mstate_global->__pyx_n_u_SenderError, __pyx_mstate_global->__pyx_n_u_SenderError, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Structured_QWP_WebSocket_server); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2952, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_19 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2952, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_category, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory) < (0)) __PYX_ERR(0, 2952, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_applied_policy, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy) < (0)) __PYX_ERR(0, 2952, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_status, __pyx_mstate_global->__pyx_kp_u_Optional_int) < (0)) __PYX_ERR(0, 2952, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_message, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 2952, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_message_sequence, __pyx_mstate_global->__pyx_kp_u_Optional_int) < (0)) __PYX_ERR(0, 2952, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_from_fsn, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 2952, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_to_fsn, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 2952, __pyx_L1_error) if (__Pyx_SetNameInClass(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_19) < (0)) __PYX_ERR(0, 2952, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; /* … */ __pyx_t_19 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_mstate_global->__pyx_n_u_SenderError, __pyx_mstate_global->__pyx_empty_tuple, __pyx_t_17, NULL, 0, 0); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2952, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19); #endif
02953: """Structured QWP/WebSocket server diagnostic."""
02954: category: SenderErrorCategory
02955: applied_policy: SenderErrorPolicy
02956: status: Optional[int]
02957: message: str
02958: message_sequence: Optional[int]
02959: from_fsn: int
02960: to_fsn: int
02961:
02962:
+02963: class ConnectionEventKind(TaggedEnum):
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); { PyObject* __pyx_temp[1] = {__pyx_t_17}; __pyx_t_19 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); } __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_17 = __Pyx_PEP560_update_bases(__pyx_t_19); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_16 = __Pyx_CalculateMetaclass(NULL, __pyx_t_17); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_16, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Connection_state_transitions_ob); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (__pyx_t_17 != __pyx_t_19) { if (unlikely((PyDict_SetItemString(__pyx_t_4, "__orig_bases__", __pyx_t_19) < 0))) __PYX_ERR(0, 2963, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; /* … */ __pyx_t_19 = __Pyx_Py3ClassCreate(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind, __pyx_t_17, __pyx_t_4, NULL, 0, 0); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind, __pyx_t_19) < (0)) __PYX_ERR(0, 2963, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
02964: """
02965: Connection-state transitions observed by the ingress connection pool.
02966: """
02967: #: First successful connect of the pool's lifetime.
+02968: Connected = ('connected', 0)
if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_Connected, __pyx_mstate_global->__pyx_tuple[59]) < (0)) __PYX_ERR(0, 2968, __pyx_L1_error) /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_connected, __pyx_mstate_global->__pyx_int_0}; __pyx_mstate_global->__pyx_tuple[59] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[59])) __PYX_ERR(0, 2968, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[59]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[59]);
02969: #: An active wire connection died.
+02970: Disconnected = ('disconnected', 1)
if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_Disconnected, __pyx_mstate_global->__pyx_tuple[60]) < (0)) __PYX_ERR(0, 2970, __pyx_L1_error) /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_disconnected, __pyx_mstate_global->__pyx_int_1}; __pyx_mstate_global->__pyx_tuple[60] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[60])) __PYX_ERR(0, 2970, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[60]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[60]);
02971: #: Reconnect succeeded against the same endpoint after a failure.
+02972: Reconnected = ('reconnected', 2)
if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_Reconnected, __pyx_mstate_global->__pyx_tuple[61]) < (0)) __PYX_ERR(0, 2972, __pyx_L1_error) /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_reconnected, __pyx_mstate_global->__pyx_int_2}; __pyx_mstate_global->__pyx_tuple[61] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[61])) __PYX_ERR(0, 2972, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[61]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[61]);
02973: #: Reconnect succeeded against a different endpoint.
+02974: FailedOver = ('failed_over', 3)
if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_FailedOver, __pyx_mstate_global->__pyx_tuple[62]) < (0)) __PYX_ERR(0, 2974, __pyx_L1_error) /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_failed_over, __pyx_mstate_global->__pyx_int_3}; __pyx_mstate_global->__pyx_tuple[62] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[62])) __PYX_ERR(0, 2974, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[62]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[62]);
02975: #: One endpoint connect/upgrade attempt failed; the walk moves on.
+02976: EndpointAttemptFailed = ('endpoint_attempt_failed', 4)
if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_EndpointAttemptFailed, __pyx_mstate_global->__pyx_tuple[63]) < (0)) __PYX_ERR(0, 2976, __pyx_L1_error) /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_endpoint_attempt_failed, __pyx_mstate_global->__pyx_int_4}; __pyx_mstate_global->__pyx_tuple[63] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[63])) __PYX_ERR(0, 2976, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[63]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[63]);
02977: #: Every configured endpoint was attempted and none accepted.
+02978: AllEndpointsUnreachable = ('all_endpoints_unreachable', 5)
if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_AllEndpointsUnreachable, __pyx_mstate_global->__pyx_tuple[64]) < (0)) __PYX_ERR(0, 2978, __pyx_L1_error) /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_all_endpoints_unreachable, __pyx_mstate_global->__pyx_int_5}; __pyx_mstate_global->__pyx_tuple[64] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[64])) __PYX_ERR(0, 2978, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[64]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[64]);
02979: #: Terminal: the server rejected credentials.
+02980: AuthFailed = ('auth_failed', 6)
if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_AuthFailed, __pyx_mstate_global->__pyx_tuple[65]) < (0)) __PYX_ERR(0, 2980, __pyx_L1_error) /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_auth_failed, __pyx_mstate_global->__pyx_int_6}; __pyx_mstate_global->__pyx_tuple[65] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[65])) __PYX_ERR(0, 2980, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[65]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[65]);
02981:
02982:
+02983: @dataclass(frozen=True)
__pyx_t_19 = NULL; __pyx_t_21 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_dataclass); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 2983, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_21, Py_True}; #if CYTHON_VECTORCALL __pyx_t_25 = __pyx_mstate_global->__pyx_tuple[58]; if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2983, __pyx_L1_error) __Pyx_INCREF(__pyx_t_25); #else { PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_frozen}; __pyx_t_25 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2983, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); } #endif __pyx_t_20 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_18, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_25); __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2983, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); } __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_19, __pyx_t_16}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_20, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2983, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ConnectionEvent, __pyx_t_4) < (0)) __PYX_ERR(0, 2984, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+02984: class ConnectionEvent:
__pyx_t_17 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_mstate_global->__pyx_empty_tuple, __pyx_mstate_global->__pyx_n_u_ConnectionEvent, __pyx_mstate_global->__pyx_n_u_ConnectionEvent, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_One_connection_state_transition); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2984, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_16 = __Pyx_PyDict_NewPresized(9); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2984, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_kind, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind) < (0)) __PYX_ERR(0, 2984, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_host, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 2984, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_port, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 2984, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_previous_host, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 2984, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_previous_port, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 2984, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_attempt_number, __pyx_mstate_global->__pyx_kp_u_Optional_int) < (0)) __PYX_ERR(0, 2984, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_cause_code, __pyx_mstate_global->__pyx_kp_u_Optional_QuestDBErrorCode) < (0)) __PYX_ERR(0, 2984, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_cause_msg, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 2984, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_timestamp_millis, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 2984, __pyx_L1_error) if (__Pyx_SetNameInClass(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_16) < (0)) __PYX_ERR(0, 2984, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; /* … */ __pyx_t_16 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_mstate_global->__pyx_n_u_ConnectionEvent, __pyx_mstate_global->__pyx_empty_tuple, __pyx_t_17, NULL, 0, 0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2984, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16); #endif
02985: """
02986: One connection-state transition, delivered to the
02987: ``connection_listener`` registered via :meth:`QuestDB.from_conf`.
02988:
02989: Listeners run on a dedicated dispatcher thread — never on an I/O or
02990: caller thread — fed by a bounded inbox with a drop-oldest overflow
02991: policy, so a slow listener cannot stall ingest or reconnects.
02992: Successful events are queued only after negotiated connection state,
02993: including the server-advertised frame cap, is committed. They are not
02994: data-delivery or acknowledgement barriers.
02995: Exceptions raised by the listener are logged and swallowed.
02996: """
02997: kind: ConnectionEventKind
02998: host: Optional[str]
02999: port: Optional[str]
03000: #: For :attr:`ConnectionEventKind.FailedOver`, the previously-active
03001: #: endpoint.
03002: previous_host: Optional[str]
03003: previous_port: Optional[str]
03004: #: Monotonic connect-attempt counter at the time the event fired.
03005: attempt_number: Optional[int]
03006: cause_code: Optional[QuestDBErrorCode]
03007: cause_msg: Optional[str]
03008: #: Wall-clock time of the event, milliseconds since the Unix epoch.
03009: timestamp_millis: int
03010:
03011:
+03012: cdef inline object _conn_event_str(const char* buf, size_t buf_len):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client__conn_event_str(char const *__pyx_v_buf, size_t __pyx_v_buf_len) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client._conn_event_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+03013: if buf == NULL:
__pyx_t_1 = (__pyx_v_buf == NULL);
if (__pyx_t_1) {
/* … */
}
+03014: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+03015: return PyUnicode_FromStringAndSize(buf, <Py_ssize_t>buf_len)
__pyx_t_2 = PyUnicode_FromStringAndSize(__pyx_v_buf, ((Py_ssize_t)__pyx_v_buf_len)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3015, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
03016:
03017:
+03018: cdef class _DispatchContext:
struct __pyx_obj_7questdb_7_client__DispatchContext {
PyObject_HEAD
PyObject *owner_token;
PyObject *error_handler;
PyObject *connection_listener;
};
03019: """Python callback targets and the exact owner they dispatch for.
03020:
03021: Native callback registrations borrow a pointer to this object. Its owner
03022: field is deliberately an opaque token rather than the owning handle, so
03023: the context does not create an owner/context cycle by itself.
03024: """
03025: cdef object owner_token
03026: cdef object error_handler
03027: cdef object connection_listener
03028:
03029:
+03030: cdef _DispatchContext _new_dispatch_context(
static struct __pyx_obj_7questdb_7_client__DispatchContext *__pyx_f_7questdb_7_client__new_dispatch_context(PyObject *__pyx_v_owner_token, PyObject *__pyx_v_error_handler, PyObject *__pyx_v_listener) {
struct __pyx_obj_7questdb_7_client__DispatchContext *__pyx_v_context = 0;
struct __pyx_obj_7questdb_7_client__DispatchContext *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client._new_dispatch_context", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_context);
__Pyx_XGIVEREF((PyObject *)__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
03031: object owner_token, object error_handler, object listener):
+03032: cdef _DispatchContext context = _DispatchContext()
__pyx_t_2 = NULL;
__pyx_t_3 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client__DispatchContext, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3032, __pyx_L1_error)
__Pyx_GOTREF((PyObject *)__pyx_t_1);
}
__pyx_v_context = ((struct __pyx_obj_7questdb_7_client__DispatchContext *)__pyx_t_1);
__pyx_t_1 = 0;
+03033: context.owner_token = owner_token
__Pyx_INCREF(__pyx_v_owner_token); __Pyx_GIVEREF(__pyx_v_owner_token); __Pyx_GOTREF(__pyx_v_context->owner_token); __Pyx_DECREF(__pyx_v_context->owner_token); __pyx_v_context->owner_token = __pyx_v_owner_token;
+03034: context.error_handler = error_handler
__Pyx_INCREF(__pyx_v_error_handler); __Pyx_GIVEREF(__pyx_v_error_handler); __Pyx_GOTREF(__pyx_v_context->error_handler); __Pyx_DECREF(__pyx_v_context->error_handler); __pyx_v_context->error_handler = __pyx_v_error_handler;
+03035: context.connection_listener = listener
__Pyx_INCREF(__pyx_v_listener); __Pyx_GIVEREF(__pyx_v_listener); __Pyx_GOTREF(__pyx_v_context->connection_listener); __Pyx_DECREF(__pyx_v_context->connection_listener); __pyx_v_context->connection_listener = __pyx_v_listener;
+03036: return context
{
struct __pyx_obj_7questdb_7_client__DispatchContext *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_context);
__pyx_r = __pyx_v_context;
}
__Pyx_XDECREF((PyObject *)__pyx_temp);
}
goto __pyx_L0;
03037:
03038:
03039: # Module-level strong root for callback contexts registered with the native
03040: # dispatchers. It keeps the exact object passed as native `void* user_data`
03041: # reachable from a GC root for as long as its dispatchers can still fire, so
03042: # the cycle collector never clears a live callback's internals (which would
03043: # crash the interpreter when a dispatch calls it). A handle abandoned in a
03044: # reference cycle through its own callback therefore leaks rather than
03045: # crashing; explicit close() removes the entry once the dispatchers are joined
03046: # and lets the cycle collect.
+03047: _LIVE_CALLBACK_REFS = {}
__pyx_t_17 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3047, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_LIVE_CALLBACK_REFS, __pyx_t_17) < (0)) __PYX_ERR(0, 3047, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
03048:
03049:
03050: # The registry is keyed by a value captured while the owner is alive and
03051: # released through that key alone: `tp_dealloc` must never pass the dying
03052: # owner back into Python-level calls (PyPy's cpyext aborts on reviving a
03053: # dying object mid-dealloc).
+03054: cdef size_t _retain_callback_refs(object owner, object context):
static size_t __pyx_f_7questdb_7_client__retain_callback_refs(PyObject *__pyx_v_owner, PyObject *__pyx_v_context) {
size_t __pyx_v_key;
size_t __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client._retain_callback_refs", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1L;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+03055: cdef size_t key = id(owner)
__pyx_t_2 = NULL;
__pyx_t_3 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_owner};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_id, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3055, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_3 = __Pyx_PyLong_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_3 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 3055, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_v_key = __pyx_t_3;
+03056: _LIVE_CALLBACK_REFS[key] = context
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_LIVE_CALLBACK_REFS); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3056, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (unlikely((__Pyx_SetItemInt(__pyx_t_1, __pyx_v_key, __pyx_v_context, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 3056, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+03057: return key
{
__pyx_r = __pyx_v_key;
}
goto __pyx_L0;
03058:
03059:
+03060: cdef _release_callback_refs(size_t key):
static PyObject *__pyx_f_7questdb_7_client__release_callback_refs(size_t __pyx_v_key) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._release_callback_refs", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+03061: if key != 0:
__pyx_t_1 = (__pyx_v_key != 0);
if (__pyx_t_1) {
/* … */
}
+03062: _LIVE_CALLBACK_REFS.pop(key, None)
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_LIVE_CALLBACK_REFS); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3062, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_pop); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3062, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_4 = __Pyx_PyLong_FromSize_t(__pyx_v_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3062, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_6 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_5))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
__pyx_t_6 = 0;
}
#endif
{
PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_4, Py_None};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3062, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
03063:
03064:
03065: # Scoped call depths and callback-dispatch depths live in native
03066: # thread-local storage, keyed by owner token identity, because `row()`
03067: # raises and lowers a scoped depth on every pooled row and checks the
03068: # dispatch depth on every standalone ws row while auto-flush is on: the
03069: # whole table is reached through a single `PyThread_tss_get`, and the
03070: # per-owner entry through a scan of the handful of owners a thread has
03071: # calls or dispatches in progress on. The key is process-wide -- OS TLS
03072: # keys are a capped process resource, so one per handle exhausts them --
03073: # and holds a table per thread rather than a single count, so each count
03074: # belongs to one owner.
03075: cdef Py_tss_t _SCOPED_DEPTH_KEY
03076:
+03077: if PyThread_tss_create(&_SCOPED_DEPTH_KEY) != 0:
__pyx_t_8 = (PyThread_tss_create((&__pyx_v_7questdb_7_client__SCOPED_DEPTH_KEY)) != 0);
if (unlikely(__pyx_t_8)) {
/* … */
}
+03078: raise RuntimeError('Could not create the QuestDB thread-state key.')
__pyx_t_16 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_16, __pyx_mstate_global->__pyx_kp_u_Could_not_create_the_QuestDB_thr};
__pyx_t_17 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3078, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
}
__Pyx_Raise(__pyx_t_17, 0, 0, 0);
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
__PYX_ERR(0, 3078, __pyx_L1_error)
03079:
+03080: cdef enum:
enum {
__pyx_e_7questdb_7_client__SCOPED_TABLE_INIT_SLOTS = 4
};
03081: _SCOPED_TABLE_INIT_SLOTS = 4
03082:
03083:
+03084: ctypedef struct scoped_slot_t:
struct __pyx_t_7questdb_7_client_scoped_slot_t {
void *owner;
uintptr_t depth;
uintptr_t dispatch;
};
03085: # Borrowed identity only, never dereferenced: the owning handle keeps
03086: # its token alive for as long as it can have calls in progress, a
03087: # dispatch context keeps it alive for as long as its callbacks can
03088: # run, and an entry is dropped the moment both its counts reach zero,
03089: # so an address a later token reuses is never already in the table.
03090: void* owner
03091: # Scoped calls in progress for this owner on this thread.
03092: uintptr_t depth
03093: # Callback dispatches in progress for this owner on this thread.
03094: uintptr_t dispatch
03095:
03096:
+03097: ctypedef struct scoped_table_t:
struct __pyx_t_7questdb_7_client_scoped_table_t {
size_t used;
size_t cap;
__pyx_t_7questdb_7_client_scoped_slot_t *slots;
};
03098: size_t used
03099: size_t cap
03100: scoped_slot_t* slots
03101:
03102:
+03103: cdef const char* _SCOPED_TABLE_CAPSULE_NAME = b'questdb._client.scoped_table'
__pyx_v_7questdb_7_client__SCOPED_TABLE_CAPSULE_NAME = __pyx_k_questdb__client_scoped_table;
03104:
03105: # The key the owning capsule is stored under in each thread state's dict.
03106: # The dict is shared by everything in the process, so the key is an object
03107: # unique to this module instance: no other writer, including another loaded
03108: # copy of this extension, can replace the capsule and free a table that a
03109: # call in progress is using. A module global rather than a C constant, so
03110: # a test can substitute a key whose hash runs code at the moment the table
03111: # is first recorded.
+03112: _SCOPED_TABLE_KEY = object()
__pyx_t_16 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_16, NULL};
__pyx_t_17 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_object, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3112, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
}
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_SCOPED_TABLE_KEY, __pyx_t_17) < (0)) __PYX_ERR(0, 3112, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
03113:
03114:
+03115: cdef void _scoped_table_free(object capsule) noexcept:
static void __pyx_f_7questdb_7_client__scoped_table_free(PyObject *__pyx_v_capsule) {
__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_WriteUnraisable("questdb._client._scoped_table_free", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
}
+03116: cdef scoped_table_t* table = <scoped_table_t*>PyCapsule_GetPointer(
__pyx_t_1 = PyCapsule_GetPointer(__pyx_v_capsule, __pyx_v_7questdb_7_client__SCOPED_TABLE_CAPSULE_NAME); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 3116, __pyx_L1_error) __pyx_v_table = ((__pyx_t_7questdb_7_client_scoped_table_t *)__pyx_t_1);
03117: capsule, _SCOPED_TABLE_CAPSULE_NAME)
+03118: if table == NULL:
__pyx_t_2 = (__pyx_v_table == NULL);
if (__pyx_t_2) {
/* … */
}
+03119: return
{
}
goto __pyx_L0;
03120: # A thread's Python state can end while its OS thread lives on: every
03121: # call into Python from a native thread gets a fresh one. That state's
03122: # table is freed on its own thread, so the native slot is cleared here
03123: # and the next scoped call or dispatch on that thread builds a new
03124: # table. A thread state can also be cleared from another thread --
03125: # interpreter finalization clears the states of threads still running,
03126: # and a forked child those of the parent's other threads -- so the slot
03127: # is cleared only when it holds the table being freed.
+03128: if <scoped_table_t*>PyThread_tss_get(&_SCOPED_DEPTH_KEY) == table:
__pyx_t_2 = (((__pyx_t_7questdb_7_client_scoped_table_t *)PyThread_tss_get((&__pyx_v_7questdb_7_client__SCOPED_DEPTH_KEY))) == __pyx_v_table);
if (__pyx_t_2) {
/* … */
}
+03129: PyThread_tss_set(&_SCOPED_DEPTH_KEY, NULL)
(void)(PyThread_tss_set((&__pyx_v_7questdb_7_client__SCOPED_DEPTH_KEY), NULL));
+03130: free(table.slots)
free(__pyx_v_table->slots);
+03131: free(table)
free(__pyx_v_table);
03132:
03133:
+03134: cdef inline scoped_table_t* _scoped_table() noexcept:
static CYTHON_INLINE __pyx_t_7questdb_7_client_scoped_table_t *__pyx_f_7questdb_7_client__scoped_table(void) {
__pyx_t_7questdb_7_client_scoped_table_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
+03135: return <scoped_table_t*>PyThread_tss_get(&_SCOPED_DEPTH_KEY)
{
__pyx_r = ((__pyx_t_7questdb_7_client_scoped_table_t *)PyThread_tss_get((&__pyx_v_7questdb_7_client__SCOPED_DEPTH_KEY)));
}
goto __pyx_L0;
03136:
03137:
+03138: cdef scoped_table_t* _scoped_table_ensure() except NULL:
static __pyx_t_7questdb_7_client_scoped_table_t *__pyx_f_7questdb_7_client__scoped_table_ensure(void) {
__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
PyObject *__pyx_v_state_dict;
PyObject *__pyx_v_capsule = NULL;
__pyx_t_7questdb_7_client_scoped_table_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client._scoped_table_ensure", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_capsule);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
03139: """This thread's table, created on its first scoped call or callback
03140: dispatch.
03141:
03142: A capsule in the thread state's dict owns the table: it is what frees
03143: it when the thread state ends. The native key caches the same pointer
03144: so the per-row path never reaches the Python dict again.
03145:
03146: The thread state is shared by every greenlet on the OS thread, so the
03147: table's owner lives exactly as long as the per-thread cache, and no
03148: greenlet's exit frees a table another greenlet's suspended call is
03149: using.
03150: """
+03151: cdef scoped_table_t* table = _scoped_table()
__pyx_v_table = __pyx_f_7questdb_7_client__scoped_table();
03152: cdef PyObject* state_dict
+03153: if table != NULL:
__pyx_t_1 = (__pyx_v_table != NULL);
if (__pyx_t_1) {
/* … */
}
+03154: return table
{
__pyx_r = __pyx_v_table;
}
goto __pyx_L0;
+03155: state_dict = PyThreadState_GetDict()
__pyx_v_state_dict = PyThreadState_GetDict();
+03156: if state_dict == NULL:
__pyx_t_1 = (__pyx_v_state_dict == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+03157: raise RuntimeError('Could not reach the QuestDB thread state.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Could_not_reach_the_QuestDB_thre};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3157, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 3157, __pyx_L1_error)
+03158: table = <scoped_table_t*>calloc(1, sizeof(scoped_table_t))
__pyx_v_table = ((__pyx_t_7questdb_7_client_scoped_table_t *)calloc(1, (sizeof(__pyx_t_7questdb_7_client_scoped_table_t))));
+03159: if table == NULL:
__pyx_t_1 = (__pyx_v_table == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+03160: raise MemoryError('Could not allocate QuestDB thread-use counters.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Could_not_allocate_QuestDB_threa};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_MemoryError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3160, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 3160, __pyx_L1_error)
+03161: table.slots = <scoped_slot_t*>malloc(
__pyx_v_table->slots = ((__pyx_t_7questdb_7_client_scoped_slot_t *)malloc((__pyx_e_7questdb_7_client__SCOPED_TABLE_INIT_SLOTS * (sizeof(__pyx_t_7questdb_7_client_scoped_slot_t)))));
03162: _SCOPED_TABLE_INIT_SLOTS * sizeof(scoped_slot_t))
+03163: if table.slots == NULL:
__pyx_t_1 = (__pyx_v_table->slots == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+03164: free(table)
free(__pyx_v_table);
+03165: raise MemoryError('Could not allocate QuestDB thread-use counters.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Could_not_allocate_QuestDB_threa};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_MemoryError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3165, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 3165, __pyx_L1_error)
+03166: table.cap = _SCOPED_TABLE_INIT_SLOTS
__pyx_v_table->cap = __pyx_e_7questdb_7_client__SCOPED_TABLE_INIT_SLOTS;
+03167: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L12_try_end;
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
goto __pyx_L1_error;
__pyx_L12_try_end:;
}
+03168: capsule = PyCapsule_New(
__pyx_t_2 = PyCapsule_New(__pyx_v_table, __pyx_v_7questdb_7_client__SCOPED_TABLE_CAPSULE_NAME, ((PyCapsule_Destructor)__pyx_f_7questdb_7_client__scoped_table_free)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3168, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_capsule = __pyx_t_2; __pyx_t_2 = 0;
03169: table, _SCOPED_TABLE_CAPSULE_NAME,
03170: <PyCapsule_Destructor>_scoped_table_free)
+03171: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._scoped_table_ensure", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_8) < 0) __PYX_ERR(0, 3171, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_8);
+03172: free(table.slots)
free(__pyx_v_table->slots);
+03173: free(table)
free(__pyx_v_table);
+03174: raise
__Pyx_GIVEREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_3); __Pyx_XGIVEREF(__pyx_t_8); __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_3, __pyx_t_8); __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_8 = 0; __PYX_ERR(0, 3174, __pyx_L9_except_error) }
03175: # From here the capsule owns the table, so every later failure hands
03176: # the cleanup to it by letting it go out of scope.
+03177: if PyThread_tss_set(&_SCOPED_DEPTH_KEY, <void*>table) != 0:
__pyx_t_1 = (PyThread_tss_set((&__pyx_v_7questdb_7_client__SCOPED_DEPTH_KEY), ((void *)__pyx_v_table)) != 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+03178: raise RuntimeError('Could not record a QuestDB thread-use counter.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Could_not_record_a_QuestDB_threa};
__pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3178, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
}
__Pyx_Raise(__pyx_t_8, 0, 0, 0);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__PYX_ERR(0, 3178, __pyx_L1_error)
+03179: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L21_try_end;
__pyx_L16_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L18_except_error:;
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5);
goto __pyx_L1_error;
__pyx_L21_try_end:;
}
+03180: (<dict>state_dict)[_SCOPED_TABLE_KEY] = capsule
if (unlikely(((PyObject *)__pyx_v_state_dict) == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
__PYX_ERR(0, 3180, __pyx_L16_error)
}
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_SCOPED_TABLE_KEY); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3180, __pyx_L16_error)
__Pyx_GOTREF(__pyx_t_8);
if (unlikely((PyDict_SetItem(((PyObject*)__pyx_v_state_dict), __pyx_t_8, __pyx_v_capsule) < 0))) __PYX_ERR(0, 3180, __pyx_L16_error)
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+03181: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._scoped_table_ensure", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_3, &__pyx_t_2) < 0) __PYX_ERR(0, 3181, __pyx_L18_except_error)
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_2);
+03182: PyThread_tss_set(&_SCOPED_DEPTH_KEY, NULL)
(void)(PyThread_tss_set((&__pyx_v_7questdb_7_client__SCOPED_DEPTH_KEY), NULL));
+03183: raise
__Pyx_GIVEREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_3); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_3, __pyx_t_2); __pyx_t_8 = 0; __pyx_t_3 = 0; __pyx_t_2 = 0; __PYX_ERR(0, 3183, __pyx_L18_except_error) }
+03184: return table
{
__pyx_r = __pyx_v_table;
}
goto __pyx_L0;
03185:
03186:
+03187: cdef inline scoped_slot_t* _scoped_slot(
static CYTHON_INLINE __pyx_t_7questdb_7_client_scoped_slot_t *__pyx_f_7questdb_7_client__scoped_slot(__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table, void *__pyx_v_owner) {
size_t __pyx_v_i;
__pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slots;
__pyx_t_7questdb_7_client_scoped_slot_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
03188: scoped_table_t* table, void* owner) noexcept:
03189: cdef size_t i
+03190: cdef scoped_slot_t* slots = table.slots
__pyx_t_1 = __pyx_v_table->slots; __pyx_v_slots = __pyx_t_1;
+03191: for i in range(table.used):
__pyx_t_2 = __pyx_v_table->used;
__pyx_t_3 = __pyx_t_2;
for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
__pyx_v_i = __pyx_t_4;
+03192: if slots[i].owner == owner:
__pyx_t_5 = ((__pyx_v_slots[__pyx_v_i]).owner == __pyx_v_owner);
if (__pyx_t_5) {
/* … */
}
}
+03193: return &slots[i]
{
__pyx_r = (&(__pyx_v_slots[__pyx_v_i]));
}
goto __pyx_L0;
+03194: return NULL
{
__pyx_r = NULL;
}
goto __pyx_L0;
03195:
03196:
+03197: cdef uintptr_t _scoped_depth_for(object owner_token) except? <uintptr_t>-1:
static uintptr_t __pyx_f_7questdb_7_client__scoped_depth_for(PyObject *__pyx_v_owner_token) {
__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
__pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot;
uintptr_t __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
+03198: cdef scoped_table_t* table = _scoped_table()
__pyx_v_table = __pyx_f_7questdb_7_client__scoped_table();
03199: cdef scoped_slot_t* slot
+03200: if table == NULL:
__pyx_t_1 = (__pyx_v_table == NULL);
if (__pyx_t_1) {
/* … */
}
+03201: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+03202: slot = _scoped_slot(table, <void*>owner_token)
__pyx_v_slot = __pyx_f_7questdb_7_client__scoped_slot(__pyx_v_table, ((void *)__pyx_v_owner_token));
+03203: if slot == NULL:
__pyx_t_1 = (__pyx_v_slot == NULL);
if (__pyx_t_1) {
/* … */
}
+03204: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+03205: return slot.depth
{
__pyx_r = __pyx_v_slot->depth;
}
goto __pyx_L0;
03206:
03207:
+03208: cdef inline scoped_slot_t* _scoped_slot_add(
static CYTHON_INLINE __pyx_t_7questdb_7_client_scoped_slot_t *__pyx_f_7questdb_7_client__scoped_slot_add(__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table, void *__pyx_v_owner) {
size_t __pyx_v_cap;
__pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_grown;
__pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot;
__pyx_t_7questdb_7_client_scoped_slot_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._scoped_slot_add", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
03209: scoped_table_t* table, void* owner) except NULL:
03210: """Append an entry for `owner` with both counts at zero."""
03211: cdef size_t cap
03212: cdef scoped_slot_t* grown
03213: cdef scoped_slot_t* slot
+03214: if table.used == table.cap:
__pyx_t_1 = (__pyx_v_table->used == __pyx_v_table->cap);
if (__pyx_t_1) {
/* … */
}
+03215: cap = table.cap * 2
__pyx_v_cap = (__pyx_v_table->cap * 2);
+03216: grown = <scoped_slot_t*>realloc(
__pyx_v_grown = ((__pyx_t_7questdb_7_client_scoped_slot_t *)realloc(__pyx_v_table->slots, (__pyx_v_cap * (sizeof(__pyx_t_7questdb_7_client_scoped_slot_t)))));
03217: table.slots, cap * sizeof(scoped_slot_t))
+03218: if grown == NULL:
__pyx_t_1 = (__pyx_v_grown == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+03219: raise MemoryError(
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Could_not_allocate_QuestDB_threa};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_MemoryError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3219, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 3219, __pyx_L1_error)
03220: 'Could not allocate QuestDB thread-use counters.')
+03221: table.slots = grown
__pyx_v_table->slots = __pyx_v_grown;
+03222: table.cap = cap
__pyx_v_table->cap = __pyx_v_cap;
+03223: slot = &table.slots[table.used]
__pyx_v_slot = (&(__pyx_v_table->slots[__pyx_v_table->used]));
+03224: slot.owner = owner
__pyx_v_slot->owner = __pyx_v_owner;
+03225: slot.depth = 0
__pyx_v_slot->depth = 0;
+03226: slot.dispatch = 0
__pyx_v_slot->dispatch = 0;
+03227: table.used += 1
__pyx_v_table->used = (__pyx_v_table->used + 1);
+03228: return slot
{
__pyx_r = __pyx_v_slot;
}
goto __pyx_L0;
03229:
03230:
+03231: cdef inline void _scoped_slot_drop_if_idle(
static CYTHON_INLINE void __pyx_f_7questdb_7_client__scoped_slot_drop_if_idle(__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table, __pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot) {
/* … */
/* function exit code */
}
03232: scoped_table_t* table, scoped_slot_t* slot) noexcept:
03233: # Vacated by moving the last entry down, which keeps the scan over
03234: # `used` dense and drops the borrowed owner address.
+03235: if slot.depth == 0 and slot.dispatch == 0:
__pyx_t_2 = (__pyx_v_slot->depth == 0);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_slot->dispatch == 0);
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+03236: table.used -= 1
__pyx_v_table->used = (__pyx_v_table->used - 1);
+03237: slot[0] = table.slots[table.used]
(__pyx_v_slot[0]) = (__pyx_v_table->slots[__pyx_v_table->used]);
03238:
03239:
+03240: cdef void _enter_scoped_for(object owner_token) except *:
static void __pyx_f_7questdb_7_client__enter_scoped_for(PyObject *__pyx_v_owner_token) {
__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
void *__pyx_v_owner;
__pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client._enter_scoped_for", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
}
+03241: cdef scoped_table_t* table = _scoped_table_ensure()
__pyx_t_1 = __pyx_f_7questdb_7_client__scoped_table_ensure(); if (unlikely(__pyx_t_1 == ((void *)NULL))) __PYX_ERR(0, 3241, __pyx_L1_error)
__pyx_v_table = __pyx_t_1;
+03242: cdef void* owner = <void*>owner_token
__pyx_v_owner = ((void *)__pyx_v_owner_token);
+03243: cdef scoped_slot_t* slot = _scoped_slot(table, owner)
__pyx_v_slot = __pyx_f_7questdb_7_client__scoped_slot(__pyx_v_table, __pyx_v_owner);
+03244: if slot == NULL:
__pyx_t_2 = (__pyx_v_slot == NULL);
if (__pyx_t_2) {
/* … */
}
+03245: slot = _scoped_slot_add(table, owner)
__pyx_t_3 = __pyx_f_7questdb_7_client__scoped_slot_add(__pyx_v_table, __pyx_v_owner); if (unlikely(__pyx_t_3 == ((void *)NULL))) __PYX_ERR(0, 3245, __pyx_L1_error)
__pyx_v_slot = __pyx_t_3;
+03246: slot.depth += 1
__pyx_v_slot->depth = (__pyx_v_slot->depth + 1);
03247:
03248:
+03249: cdef void _exit_scoped_for(object owner_token) except *:
static void __pyx_f_7questdb_7_client__exit_scoped_for(PyObject *__pyx_v_owner_token) {
__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
__pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._exit_scoped_for", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
+03250: cdef scoped_table_t* table = _scoped_table()
__pyx_v_table = __pyx_f_7questdb_7_client__scoped_table();
03251: cdef scoped_slot_t* slot
+03252: if table == NULL:
__pyx_t_1 = (__pyx_v_table == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+03253: raise RuntimeError('QuestDB thread-use counter underflow.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_QuestDB_thread_use_counter_under};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3253, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 3253, __pyx_L1_error)
+03254: slot = _scoped_slot(table, <void*>owner_token)
__pyx_v_slot = __pyx_f_7questdb_7_client__scoped_slot(__pyx_v_table, ((void *)__pyx_v_owner_token));
+03255: if slot == NULL or slot.depth == 0:
__pyx_t_5 = (__pyx_v_slot == NULL);
if (!__pyx_t_5) {
} else {
__pyx_t_1 = __pyx_t_5;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_5 = (__pyx_v_slot->depth == 0);
__pyx_t_1 = __pyx_t_5;
__pyx_L5_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+03256: raise RuntimeError('QuestDB thread-use counter underflow.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_QuestDB_thread_use_counter_under};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3256, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 3256, __pyx_L1_error)
+03257: slot.depth -= 1
__pyx_v_slot->depth = (__pyx_v_slot->depth - 1);
+03258: _scoped_slot_drop_if_idle(table, slot)
__pyx_f_7questdb_7_client__scoped_slot_drop_if_idle(__pyx_v_table, __pyx_v_slot);
03259:
03260:
+03261: cdef void _enter_dispatch(object owner_token) except *:
static void __pyx_f_7questdb_7_client__enter_dispatch(PyObject *__pyx_v_owner_token) {
__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
void *__pyx_v_owner;
__pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client._enter_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
}
+03262: cdef scoped_table_t* table = _scoped_table_ensure()
__pyx_t_1 = __pyx_f_7questdb_7_client__scoped_table_ensure(); if (unlikely(__pyx_t_1 == ((void *)NULL))) __PYX_ERR(0, 3262, __pyx_L1_error)
__pyx_v_table = __pyx_t_1;
+03263: cdef void* owner = <void*>owner_token
__pyx_v_owner = ((void *)__pyx_v_owner_token);
+03264: cdef scoped_slot_t* slot = _scoped_slot(table, owner)
__pyx_v_slot = __pyx_f_7questdb_7_client__scoped_slot(__pyx_v_table, __pyx_v_owner);
+03265: if slot == NULL:
__pyx_t_2 = (__pyx_v_slot == NULL);
if (__pyx_t_2) {
/* … */
}
+03266: slot = _scoped_slot_add(table, owner)
__pyx_t_3 = __pyx_f_7questdb_7_client__scoped_slot_add(__pyx_v_table, __pyx_v_owner); if (unlikely(__pyx_t_3 == ((void *)NULL))) __PYX_ERR(0, 3266, __pyx_L1_error)
__pyx_v_slot = __pyx_t_3;
+03267: slot.dispatch += 1
__pyx_v_slot->dispatch = (__pyx_v_slot->dispatch + 1);
03268:
03269:
+03270: cdef void _exit_dispatch(object owner_token) except *:
static void __pyx_f_7questdb_7_client__exit_dispatch(PyObject *__pyx_v_owner_token) {
__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
__pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._exit_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
+03271: cdef scoped_table_t* table = _scoped_table()
__pyx_v_table = __pyx_f_7questdb_7_client__scoped_table();
03272: cdef scoped_slot_t* slot
+03273: if table == NULL:
__pyx_t_1 = (__pyx_v_table == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+03274: raise RuntimeError('QuestDB callback-dispatch counter underflow.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_QuestDB_callback_dispatch_counte};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3274, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 3274, __pyx_L1_error)
+03275: slot = _scoped_slot(table, <void*>owner_token)
__pyx_v_slot = __pyx_f_7questdb_7_client__scoped_slot(__pyx_v_table, ((void *)__pyx_v_owner_token));
+03276: if slot == NULL or slot.dispatch == 0:
__pyx_t_5 = (__pyx_v_slot == NULL);
if (!__pyx_t_5) {
} else {
__pyx_t_1 = __pyx_t_5;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_5 = (__pyx_v_slot->dispatch == 0);
__pyx_t_1 = __pyx_t_5;
__pyx_L5_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+03277: raise RuntimeError('QuestDB callback-dispatch counter underflow.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_QuestDB_callback_dispatch_counte};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3277, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 3277, __pyx_L1_error)
+03278: slot.dispatch -= 1
__pyx_v_slot->dispatch = (__pyx_v_slot->dispatch - 1);
+03279: _scoped_slot_drop_if_idle(table, slot)
__pyx_f_7questdb_7_client__scoped_slot_drop_if_idle(__pyx_v_table, __pyx_v_slot);
03280:
03281:
+03282: cdef inline bint _dispatching_for(object owner_token) noexcept:
static CYTHON_INLINE int __pyx_f_7questdb_7_client__dispatching_for(PyObject *__pyx_v_owner_token) {
__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
__pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
+03283: cdef scoped_table_t* table = _scoped_table()
__pyx_v_table = __pyx_f_7questdb_7_client__scoped_table();
03284: cdef scoped_slot_t* slot
+03285: if table == NULL:
__pyx_t_1 = (__pyx_v_table == NULL);
if (__pyx_t_1) {
/* … */
}
+03286: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+03287: slot = _scoped_slot(table, <void*>owner_token)
__pyx_v_slot = __pyx_f_7questdb_7_client__scoped_slot(__pyx_v_table, ((void *)__pyx_v_owner_token));
+03288: return slot != NULL and slot.dispatch != 0
__pyx_t_2 = (__pyx_v_slot != NULL);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_slot->dispatch != 0);
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
03289:
03290:
+03291: cdef void _connection_event_dispatch(
static void __pyx_f_7questdb_7_client__connection_event_dispatch(void *__pyx_v_user_data, struct questdb_connection_event const *__pyx_v_event) {
struct __pyx_obj_7questdb_7_client__DispatchContext *__pyx_v_context = 0;
int __pyx_v_entered;
PyObject *__pyx_v_kind = NULL;
PyObject *__pyx_v_entry = NULL;
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_XDECREF(__pyx_t_18);
__Pyx_XDECREF(__pyx_t_19);
__Pyx_XDECREF(__pyx_t_20);
__Pyx_XDECREF(__pyx_t_22);
__Pyx_WriteUnraisable("questdb._client._connection_event_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_context);
__Pyx_XDECREF(__pyx_v_kind);
__Pyx_XDECREF(__pyx_v_entry);
__Pyx_RefNannyFinishContext();
__Pyx_PyGILState_Release(__pyx_gilstate_save);
}
03292: void* user_data,
03293: const questdb_connection_event* event) noexcept with gil:
+03294: cdef _DispatchContext context = <_DispatchContext>user_data
__pyx_t_1 = ((PyObject *)__pyx_v_user_data);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_context = ((struct __pyx_obj_7questdb_7_client__DispatchContext *)__pyx_t_1);
__pyx_t_1 = 0;
+03295: cdef bint entered = False
__pyx_v_entered = 0;
+03296: try:
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L11_try_end;
__pyx_L6_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
__Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L8_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L4_error;
__pyx_L7_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
__pyx_L11_try_end:;
}
}
+03297: _enter_dispatch(context.owner_token)
__pyx_t_1 = __pyx_v_context->owner_token;
__Pyx_INCREF(__pyx_t_1);
__pyx_f_7questdb_7_client__enter_dispatch(__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3297, __pyx_L6_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+03298: entered = True
__pyx_v_entered = 1;
+03299: kind = ConnectionEventKind.Connected
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3299, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_Connected); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3299, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_kind = __pyx_t_5; __pyx_t_5 = 0;
+03300: for entry in ConnectionEventKind:
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3300, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_5); if (likely(PyList_CheckExact(__pyx_t_5)) || PyTuple_CheckExact(__pyx_t_5)) { __pyx_t_1 = __pyx_t_5; __Pyx_INCREF(__pyx_t_1); __pyx_t_6 = 0; __pyx_t_7 = NULL; } else { __pyx_t_6 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3300, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3300, __pyx_L6_error) } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; for (;;) { if (likely(!__pyx_t_7)) { if (likely(PyList_CheckExact(__pyx_t_1))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 3300, __pyx_L6_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } __pyx_t_5 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_1, __pyx_t_6, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_6; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 3300, __pyx_L6_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_6)); #else __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_6); #endif ++__pyx_t_6; } if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3300, __pyx_L6_error) } else { __pyx_t_5 = __pyx_t_7(__pyx_t_1); if (unlikely(!__pyx_t_5)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 3300, __pyx_L6_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_5); __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_5); __pyx_t_5 = 0; /* … */ } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L15_for_end; __pyx_L13_break:; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L15_for_end; __pyx_L15_for_end:;
+03301: if entry.c_value == <int>event.kind:
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_entry, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3301, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_8 = __Pyx_PyLong_From_int(((int)__pyx_v_event->kind)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3301, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyObject_CompareBoolEq_object_int(__pyx_t_5, __pyx_t_8, Py_EQ); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 3301, __pyx_L6_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_9) { /* … */ }
+03302: kind = entry
__Pyx_INCREF(__pyx_v_entry); __Pyx_DECREF_SET(__pyx_v_kind, __pyx_v_entry);
+03303: break
goto __pyx_L13_break;
+03304: context.connection_listener(ConnectionEvent(
__pyx_t_8 = NULL;
__Pyx_INCREF(__pyx_v_context->connection_listener);
__pyx_t_5 = __pyx_v_context->connection_listener;
__pyx_t_11 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_ConnectionEvent); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3304, __pyx_L6_error)
__Pyx_GOTREF(__pyx_t_12);
/* … */
{
PyObject* __pyx_temp[9] = {__pyx_mstate_global->__pyx_n_u_kind, __pyx_mstate_global->__pyx_n_u_host, __pyx_mstate_global->__pyx_n_u_port, __pyx_mstate_global->__pyx_n_u_previous_host, __pyx_mstate_global->__pyx_n_u_previous_port, __pyx_mstate_global->__pyx_n_u_attempt_number, __pyx_mstate_global->__pyx_n_u_cause_code, __pyx_mstate_global->__pyx_n_u_cause_msg, __pyx_mstate_global->__pyx_n_u_timestamp_millis};
__pyx_mstate_global->__pyx_tuple[28] = __Pyx_PyTuple_FromArray(__pyx_temp, 9); if (unlikely(!__pyx_mstate_global->__pyx_tuple[28])) __PYX_ERR(0, 3304, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[28]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[28]);
03305: kind=kind,
+03306: host=_conn_event_str(event.host, event.host_len),
__pyx_t_13 = __pyx_f_7questdb_7_client__conn_event_str(__pyx_v_event->host, __pyx_v_event->host_len); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3306, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_13);
+03307: port=_conn_event_str(event.port, event.port_len),
__pyx_t_14 = __pyx_f_7questdb_7_client__conn_event_str(__pyx_v_event->port, __pyx_v_event->port_len); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3307, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_14);
+03308: previous_host=_conn_event_str(
__pyx_t_15 = __pyx_f_7questdb_7_client__conn_event_str(__pyx_v_event->previous_host, __pyx_v_event->previous_host_len); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3308, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_15);
03309: event.previous_host, event.previous_host_len),
+03310: previous_port=_conn_event_str(
__pyx_t_16 = __pyx_f_7questdb_7_client__conn_event_str(__pyx_v_event->previous_port, __pyx_v_event->previous_port_len); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3310, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_16);
03311: event.previous_port, event.previous_port_len),
+03312: attempt_number=event.attempt_number
__pyx_t_18 = __Pyx_PyLong_From_uint64_t(__pyx_v_event->attempt_number); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3312, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_17 = __pyx_t_18; __pyx_t_18 = 0; } else {
+03313: if event.has_attempt else None,
__pyx_t_9 = (__pyx_v_event->has_attempt != 0);
if (__pyx_t_9) {
/* … */
__Pyx_INCREF(Py_None);
__pyx_t_17 = Py_None;
}
+03314: cause_code=c_err_code_to_py(event.cause_code)
__pyx_t_19 = __pyx_f_7questdb_7_client_c_err_code_to_py(__pyx_v_event->cause_code); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3314, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_18 = __pyx_t_19; __pyx_t_19 = 0; } else {
+03315: if event.has_cause else None,
__pyx_t_9 = (__pyx_v_event->has_cause != 0);
if (__pyx_t_9) {
/* … */
__Pyx_INCREF(Py_None);
__pyx_t_18 = Py_None;
}
+03316: cause_msg=_conn_event_str(event.cause_msg, event.cause_msg_len)
__pyx_t_20 = __pyx_f_7questdb_7_client__conn_event_str(__pyx_v_event->cause_msg, __pyx_v_event->cause_msg_len); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3316, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_20); __pyx_t_19 = __pyx_t_20; __pyx_t_20 = 0; } else {
+03317: if event.has_cause else None,
__pyx_t_9 = (__pyx_v_event->has_cause != 0);
if (__pyx_t_9) {
/* … */
__Pyx_INCREF(Py_None);
__pyx_t_19 = Py_None;
}
+03318: timestamp_millis=event.timestamp_millis))
__pyx_t_20 = __Pyx_PyLong_From_int64_t(__pyx_v_event->timestamp_millis); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3318, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_20); __pyx_t_21 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_12))) { __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_12); assert(__pyx_t_11); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_12); __Pyx_INCREF(__pyx_t_11); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_12, __pyx__function); __pyx_t_21 = 0; } #endif { PyObject *__pyx_callargs[10] = {__pyx_t_11, __pyx_v_kind, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_17, __pyx_t_18, __pyx_t_19, __pyx_t_20}; #if CYTHON_VECTORCALL __pyx_t_22 = __pyx_mstate_global->__pyx_tuple[28]; if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 3304, __pyx_L6_error) __Pyx_INCREF(__pyx_t_22); #else { PyObject *__pyx_temp[9] = {__pyx_mstate_global->__pyx_n_u_kind, __pyx_mstate_global->__pyx_n_u_host, __pyx_mstate_global->__pyx_n_u_port, __pyx_mstate_global->__pyx_n_u_previous_host, __pyx_mstate_global->__pyx_n_u_previous_port, __pyx_mstate_global->__pyx_n_u_attempt_number, __pyx_mstate_global->__pyx_n_u_cause_code, __pyx_mstate_global->__pyx_n_u_cause_msg, __pyx_mstate_global->__pyx_n_u_timestamp_millis}; __pyx_t_22 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 9); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 3304, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_22); } #endif __pyx_t_10 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_21, (1-__pyx_t_21) | (__pyx_t_21*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_22); __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3304, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_10); } __pyx_t_21 = 1; #if CYTHON_UNPACK_METHODS if (likely(PyMethod_Check(__pyx_t_5))) { __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_8); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_21 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_10}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_21, (2-__pyx_t_21) | (__pyx_t_21*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3304, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+03319: except BaseException:
__pyx_t_23 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_23) { __Pyx_AddTraceback("questdb._client._connection_event_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_5, &__pyx_t_10) < 0) __PYX_ERR(0, 3319, __pyx_L8_except_error) __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_5); __Pyx_XGOTREF(__pyx_t_10);
+03320: logging.getLogger("questdb").exception(
__pyx_t_20 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3320, __pyx_L8_except_error)
__Pyx_GOTREF(__pyx_t_19);
__pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3320, __pyx_L8_except_error)
__Pyx_GOTREF(__pyx_t_18);
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
__pyx_t_21 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_18))) {
__pyx_t_20 = PyMethod_GET_SELF(__pyx_t_18);
assert(__pyx_t_20);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_18);
__Pyx_INCREF(__pyx_t_20);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_18, __pyx__function);
__pyx_t_21 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_20, __pyx_mstate_global->__pyx_n_u_questdb};
__pyx_t_22 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_18, __pyx_callargs+__pyx_t_21, (2-__pyx_t_21) | (__pyx_t_21*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 3320, __pyx_L8_except_error)
__Pyx_GOTREF(__pyx_t_22);
}
__pyx_t_12 = __pyx_t_22;
__Pyx_INCREF(__pyx_t_12);
__pyx_t_21 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_mstate_global->__pyx_kp_u_connection_event_listener_failed};
__pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_exception, __pyx_callargs+__pyx_t_21, (2-__pyx_t_21) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3320, __pyx_L8_except_error)
__Pyx_GOTREF(__pyx_t_8);
}
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
goto __pyx_L7_exception_handled;
}
goto __pyx_L8_except_error;
03321: "connection event listener failed")
03322: finally:
+03323: if entered:
/*finally:*/ {
/*normal exit:*/{
if (__pyx_v_entered) {
/* … */
}
goto __pyx_L5;
}
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
__Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_ExceptionSwap(&__pyx_t_26, &__pyx_t_27, &__pyx_t_28);
if ( unlikely(__Pyx_GetException(&__pyx_t_4, &__pyx_t_3, &__pyx_t_2) < 0)) __Pyx_ErrFetch(&__pyx_t_4, &__pyx_t_3, &__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_26);
__Pyx_XGOTREF(__pyx_t_27);
__Pyx_XGOTREF(__pyx_t_28);
__pyx_t_23 = __pyx_lineno; __pyx_t_24 = __pyx_clineno; __pyx_t_25 = __pyx_filename;
{
if (__pyx_v_entered) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_26);
__Pyx_XGIVEREF(__pyx_t_27);
__Pyx_XGIVEREF(__pyx_t_28);
__Pyx_ExceptionReset(__pyx_t_26, __pyx_t_27, __pyx_t_28);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_ErrRestore(__pyx_t_4, __pyx_t_3, __pyx_t_2);
__pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0;
__pyx_lineno = __pyx_t_23; __pyx_clineno = __pyx_t_24; __pyx_filename = __pyx_t_25;
goto __pyx_L1_error;
__pyx_L20_error:;
__Pyx_XGIVEREF(__pyx_t_26);
__Pyx_XGIVEREF(__pyx_t_27);
__Pyx_XGIVEREF(__pyx_t_28);
__Pyx_ExceptionReset(__pyx_t_26, __pyx_t_27, __pyx_t_28);
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0;
goto __pyx_L1_error;
}
__pyx_L5:;
}
+03324: _exit_dispatch(context.owner_token)
__pyx_t_10 = __pyx_v_context->owner_token;
__Pyx_INCREF(__pyx_t_10);
__pyx_f_7questdb_7_client__exit_dispatch(__pyx_t_10); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3324, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
/* … */
__pyx_t_10 = __pyx_v_context->owner_token;
__Pyx_INCREF(__pyx_t_10);
__pyx_f_7questdb_7_client__exit_dispatch(__pyx_t_10); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3324, __pyx_L20_error)
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
03325:
03326:
+03327: cdef void _connection_event_trampoline(
static void __pyx_f_7questdb_7_client__connection_event_trampoline(void *__pyx_v_user_data, struct questdb_connection_event const *__pyx_v_event) {
/* … */
/* function exit code */
__pyx_L0:;
}
03328: void* user_data,
03329: const questdb_connection_event* event) noexcept nogil:
03330: # No object locals here: the finalizing early return must not touch
03331: # the GIL, which a Cython epilogue with object cleanup would.
+03332: if qdb_py_is_finalizing():
__pyx_t_1 = qdb_py_is_finalizing();
if (__pyx_t_1) {
/* … */
}
+03333: return
{
}
goto __pyx_L0;
+03334: _connection_event_dispatch(user_data, event)
__pyx_f_7questdb_7_client__connection_event_dispatch(__pyx_v_user_data, __pyx_v_event);
03335:
03336:
+03337: class ServerRole(TaggedEnum):
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3337, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); { PyObject* __pyx_temp[1] = {__pyx_t_17}; __pyx_t_16 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3337, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); } __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_17 = __Pyx_PEP560_update_bases(__pyx_t_16); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3337, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_4 = __Pyx_CalculateMetaclass(NULL, __pyx_t_17); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3337, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_20 = __Pyx_Py3MetaclassPrepare(__pyx_t_4, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_ServerRole, __pyx_mstate_global->__pyx_n_u_ServerRole, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Cluster_role_advertised_by_the); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3337, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); if (__pyx_t_17 != __pyx_t_16) { if (unlikely((PyDict_SetItemString(__pyx_t_20, "__orig_bases__", __pyx_t_16) < 0))) __PYX_ERR(0, 3337, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; /* … */ __pyx_t_16 = __Pyx_Py3ClassCreate(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ServerRole, __pyx_t_17, __pyx_t_20, NULL, 0, 0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3337, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ServerRole, __pyx_t_16) < (0)) __PYX_ERR(0, 3337, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
03338: """
03339: Cluster role advertised by the server's ``SERVER_INFO`` handshake.
03340: """
+03341: Standalone = ('standalone', 0)
if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_Standalone, __pyx_mstate_global->__pyx_tuple[66]) < (0)) __PYX_ERR(0, 3341, __pyx_L1_error) /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_standalone, __pyx_mstate_global->__pyx_int_0}; __pyx_mstate_global->__pyx_tuple[66] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[66])) __PYX_ERR(0, 3341, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[66]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[66]);
+03342: Primary = ('primary', 1)
if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_Primary, __pyx_mstate_global->__pyx_tuple[67]) < (0)) __PYX_ERR(0, 3342, __pyx_L1_error) /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_primary, __pyx_mstate_global->__pyx_int_1}; __pyx_mstate_global->__pyx_tuple[67] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[67])) __PYX_ERR(0, 3342, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[67]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[67]);
+03343: Replica = ('replica', 2)
if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_Replica, __pyx_mstate_global->__pyx_tuple[68]) < (0)) __PYX_ERR(0, 3343, __pyx_L1_error) /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_replica, __pyx_mstate_global->__pyx_int_2}; __pyx_mstate_global->__pyx_tuple[68] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[68])) __PYX_ERR(0, 3343, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[68]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[68]);
+03344: PrimaryCatchup = ('primary_catchup', 3)
if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_PrimaryCatchup, __pyx_mstate_global->__pyx_tuple[69]) < (0)) __PYX_ERR(0, 3344, __pyx_L1_error) /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_primary_catchup, __pyx_mstate_global->__pyx_int_3}; __pyx_mstate_global->__pyx_tuple[69] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[69])) __PYX_ERR(0, 3344, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[69]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[69]);
03345: #: Forward-compat: a role byte this client doesn't recognise. The raw
03346: #: byte is available via :attr:`ServerInfo.role_byte`.
+03347: Other = ('other', 0xFF)
if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_Other, __pyx_mstate_global->__pyx_tuple[70]) < (0)) __PYX_ERR(0, 3347, __pyx_L1_error) /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_other, __pyx_mstate_global->__pyx_int_255}; __pyx_mstate_global->__pyx_tuple[70] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[70])) __PYX_ERR(0, 3347, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[70]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[70]);
03348:
03349:
+03350: @dataclass(frozen=True)
__pyx_t_16 = NULL; __pyx_t_18 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_dataclass); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3350, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_25); __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_18, Py_True}; #if CYTHON_VECTORCALL __pyx_t_21 = __pyx_mstate_global->__pyx_tuple[58]; if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 3350, __pyx_L1_error) __Pyx_INCREF(__pyx_t_21); #else { PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_frozen}; __pyx_t_21 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 3350, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_21); } #endif __pyx_t_19 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_25, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_21); __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3350, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); } __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_16, __pyx_t_4}; __pyx_t_20 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_19, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3350, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); } if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ServerInfo, __pyx_t_20) < (0)) __PYX_ERR(0, 3351, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+03351: class ServerInfo:
__pyx_t_17 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_mstate_global->__pyx_empty_tuple, __pyx_mstate_global->__pyx_n_u_ServerInfo, __pyx_mstate_global->__pyx_n_u_ServerInfo, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Snapshot_of_the_server_s_SERVER); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3351, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_4 = __Pyx_PyDict_NewPresized(8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3351, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_role, __pyx_mstate_global->__pyx_n_u_ServerRole) < (0)) __PYX_ERR(0, 3351, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_role_byte, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 3351, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_epoch, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 3351, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_capabilities, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 3351, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_server_wall_ns, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 3351, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_cluster_id, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 3351, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_node_id, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 3351, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_zone_id, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 3351, __pyx_L1_error) if (__Pyx_SetNameInClass(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_4) < (0)) __PYX_ERR(0, 3351, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* … */ __pyx_t_4 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_mstate_global->__pyx_n_u_ServerInfo, __pyx_mstate_global->__pyx_empty_tuple, __pyx_t_17, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3351, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4); #endif
03352: """
03353: Snapshot of the server's ``SERVER_INFO`` handshake, as advertised on
03354: the connection :meth:`QuestDB.server_info` sampled. Fields mirror the
03355: Rust reader's ``ServerInfo``.
03356: """
03357: #: Cluster role; :attr:`ServerRole.Other` for unrecognised role bytes.
03358: role: ServerRole
03359: #: Raw wire role byte; disambiguates ``role == ServerRole.Other``.
03360: role_byte: int
03361: #: Monotonic generation counter; increases on failover/role
03362: #: transitions, useful for fencing replayed batches.
03363: epoch: int
03364: #: Bitset of QWP capability flags negotiated with the server.
03365: capabilities: int
03366: #: Server wall-clock at handshake, nanoseconds since the Unix epoch
03367: #: (UTC). Useful for clock-skew detection.
03368: server_wall_ns: int
03369: cluster_id: str
03370: node_id: str
03371: #: Zone identifier, present iff the server advertised ``CAP_ZONE`` in
03372: #: ``capabilities``; ``None`` otherwise. Compared case-insensitively
03373: #: against the client's ``zone=`` connect-string knob during failover.
03374: zone_id: Optional[str]
03375:
03376:
+03377: def _sender_error_from_raw(raw):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_20_sender_error_from_raw(PyObject *__pyx_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_20_sender_error_from_raw = {"_sender_error_from_raw", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_20_sender_error_from_raw, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_20_sender_error_from_raw(PyObject *__pyx_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_raw = 0;
#if !CYTHON_VECTORCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_sender_error_from_raw (wrapper)", 0);
#if !CYTHON_VECTORCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_raw,0};
PyObject* values[1] = {0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 3377, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3377, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_sender_error_from_raw", 0) < (0)) __PYX_ERR(0, 3377, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_sender_error_from_raw", 1, 1, 1, i); __PYX_ERR(0, 3377, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3377, __pyx_L3_error)
}
__pyx_v_raw = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("_sender_error_from_raw", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3377, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client._sender_error_from_raw", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_19_sender_error_from_raw(__pyx_self, __pyx_v_raw);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_19_sender_error_from_raw(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_raw) {
PyObject *__pyx_v_category = NULL;
PyObject *__pyx_v_applied_policy = NULL;
PyObject *__pyx_v_status = NULL;
PyObject *__pyx_v_message = NULL;
PyObject *__pyx_v_message_sequence = NULL;
PyObject *__pyx_v_from_fsn = NULL;
PyObject *__pyx_v_to_fsn = NULL;
PyObject *__pyx_v_py_category = NULL;
PyObject *__pyx_v_entry = NULL;
PyObject *__pyx_v_py_policy = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_AddTraceback("questdb._client._sender_error_from_raw", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_category);
__Pyx_XDECREF(__pyx_v_applied_policy);
__Pyx_XDECREF(__pyx_v_status);
__Pyx_XDECREF(__pyx_v_message);
__Pyx_XDECREF(__pyx_v_message_sequence);
__Pyx_XDECREF(__pyx_v_from_fsn);
__Pyx_XDECREF(__pyx_v_to_fsn);
__Pyx_XDECREF(__pyx_v_py_category);
__Pyx_XDECREF(__pyx_v_entry);
__Pyx_XDECREF(__pyx_v_py_policy);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_20_sender_error_from_raw, 0, __pyx_mstate_global->__pyx_n_u_sender_error_from_raw, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[113])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3377, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
#endif
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_sender_error_from_raw, __pyx_t_17) < (0)) __PYX_ERR(0, 3377, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+03378: if raw is None or isinstance(raw, SenderError):
__pyx_t_2 = (__pyx_v_raw == Py_None);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_SenderError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3378, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_2 = PyObject_IsInstance(__pyx_v_raw, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 3378, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+03379: return raw
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_raw);
__pyx_r = __pyx_v_raw;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
03380:
03381: (
+03382: category,
__pyx_v_category = __pyx_t_3; __pyx_t_3 = 0; __pyx_v_applied_policy = __pyx_t_4; __pyx_t_4 = 0; __pyx_v_status = __pyx_t_5; __pyx_t_5 = 0; __pyx_v_message = __pyx_t_6; __pyx_t_6 = 0; __pyx_v_message_sequence = __pyx_t_7; __pyx_t_7 = 0; __pyx_v_from_fsn = __pyx_t_8; __pyx_t_8 = 0; __pyx_v_to_fsn = __pyx_t_9; __pyx_t_9 = 0;
03383: applied_policy,
03384: status,
03385: message,
03386: message_sequence,
03387: from_fsn,
03388: to_fsn,
+03389: ) = raw
if ((likely(PyTuple_CheckExact(__pyx_v_raw))) || (PyList_CheckExact(__pyx_v_raw))) { PyObject* sequence = __pyx_v_raw; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 7)) { if (size > 7) __Pyx_RaiseTooManyValuesError(7); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 3382, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = PyTuple_GET_ITEM(sequence, 3); __Pyx_INCREF(__pyx_t_6); __pyx_t_7 = PyTuple_GET_ITEM(sequence, 4); __Pyx_INCREF(__pyx_t_7); __pyx_t_8 = PyTuple_GET_ITEM(sequence, 5); __Pyx_INCREF(__pyx_t_8); __pyx_t_9 = PyTuple_GET_ITEM(sequence, 6); __Pyx_INCREF(__pyx_t_9); } else { __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3382, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3382, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyList_GET_ITEM_REF(sequence, 2, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3382, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyList_GET_ITEM_REF(sequence, 3, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3382, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyList_GET_ITEM_REF(sequence, 4, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3382, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyList_GET_ITEM_REF(sequence, 5, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3382, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyList_GET_ITEM_REF(sequence, 6, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3382, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_9); } #else { Py_ssize_t i; PyObject** temps[7] = {&__pyx_t_3,&__pyx_t_4,&__pyx_t_5,&__pyx_t_6,&__pyx_t_7,&__pyx_t_8,&__pyx_t_9}; for (i=0; i < 7; i++) { PyObject* item = __Pyx_PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 3382, __pyx_L1_error) __Pyx_GOTREF(item); *(temps[i]) = item; } } #endif } else { Py_ssize_t index = -1; PyObject** temps[7] = {&__pyx_t_3,&__pyx_t_4,&__pyx_t_5,&__pyx_t_6,&__pyx_t_7,&__pyx_t_8,&__pyx_t_9}; __pyx_t_10 = PyObject_GetIter(__pyx_v_raw); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3382, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_10); for (index=0; index < 7; index++) { PyObject* item = __pyx_t_11(__pyx_t_10); if (unlikely(!item)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(item); *(temps[index]) = item; } if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 7) < (0)) __PYX_ERR(0, 3382, __pyx_L1_error) __pyx_t_11 = NULL; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; goto __pyx_L7_unpacking_done; __pyx_L6_unpacking_failed:; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_11 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 3382, __pyx_L1_error) __pyx_L7_unpacking_done:; }
03390:
+03391: py_category = SenderErrorCategory.Unknown
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3391, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_Unknown); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3391, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_v_py_category = __pyx_t_8; __pyx_t_8 = 0;
+03392: for entry in SenderErrorCategory:
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3392, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); if (likely(PyList_CheckExact(__pyx_t_8)) || PyTuple_CheckExact(__pyx_t_8)) { __pyx_t_9 = __pyx_t_8; __Pyx_INCREF(__pyx_t_9); __pyx_t_12 = 0; __pyx_t_13 = NULL; } else { __pyx_t_12 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3392, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_13 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_9); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3392, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; for (;;) { if (likely(!__pyx_t_13)) { if (likely(PyList_CheckExact(__pyx_t_9))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_9); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 3392, __pyx_L1_error) #endif if (__pyx_t_12 >= __pyx_temp) break; } __pyx_t_8 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_9, __pyx_t_12, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_12; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_9); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 3392, __pyx_L1_error) #endif if (__pyx_t_12 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_8 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_12)); #else __pyx_t_8 = __Pyx_PySequence_ITEM(__pyx_t_9, __pyx_t_12); #endif ++__pyx_t_12; } if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3392, __pyx_L1_error) } else { __pyx_t_8 = __pyx_t_13(__pyx_t_9); if (unlikely(!__pyx_t_8)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 3392, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_8); __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_8); __pyx_t_8 = 0; /* … */ } __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L11_for_end; __pyx_L9_break:; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L11_for_end; __pyx_L11_for_end:;
+03393: if entry.c_value == category:
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_entry, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3393, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_8, __pyx_v_category, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3393, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_1) { /* … */ }
+03394: py_category = entry
__Pyx_INCREF(__pyx_v_entry); __Pyx_DECREF_SET(__pyx_v_py_category, __pyx_v_entry);
+03395: break
goto __pyx_L9_break;
03396:
+03397: py_policy = SenderErrorPolicy.Terminal
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3397, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_Terminal); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3397, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_v_py_policy = __pyx_t_8; __pyx_t_8 = 0;
+03398: for entry in SenderErrorPolicy:
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3398, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); if (likely(PyList_CheckExact(__pyx_t_8)) || PyTuple_CheckExact(__pyx_t_8)) { __pyx_t_9 = __pyx_t_8; __Pyx_INCREF(__pyx_t_9); __pyx_t_12 = 0; __pyx_t_13 = NULL; } else { __pyx_t_12 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3398, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_13 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_9); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3398, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; for (;;) { if (likely(!__pyx_t_13)) { if (likely(PyList_CheckExact(__pyx_t_9))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_9); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 3398, __pyx_L1_error) #endif if (__pyx_t_12 >= __pyx_temp) break; } __pyx_t_8 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_9, __pyx_t_12, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_12; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_9); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 3398, __pyx_L1_error) #endif if (__pyx_t_12 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_8 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_12)); #else __pyx_t_8 = __Pyx_PySequence_ITEM(__pyx_t_9, __pyx_t_12); #endif ++__pyx_t_12; } if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3398, __pyx_L1_error) } else { __pyx_t_8 = __pyx_t_13(__pyx_t_9); if (unlikely(!__pyx_t_8)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 3398, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_8); __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_8); __pyx_t_8 = 0; /* … */ } __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L15_for_end; __pyx_L13_break:; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L15_for_end; __pyx_L15_for_end:;
+03399: if entry.c_value == applied_policy:
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_entry, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3399, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_8, __pyx_v_applied_policy, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3399, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_1) { /* … */ }
+03400: py_policy = entry
__Pyx_INCREF(__pyx_v_entry); __Pyx_DECREF_SET(__pyx_v_py_policy, __pyx_v_entry);
+03401: break
goto __pyx_L13_break;
03402:
+03403: return SenderError(
__pyx_t_8 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_SenderError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3403, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7);
03404: py_category,
03405: py_policy,
03406: status,
03407: message,
03408: message_sequence,
03409: from_fsn,
+03410: to_fsn)
__pyx_t_14 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_8); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_14 = 0; } #endif { PyObject *__pyx_callargs[8] = {__pyx_t_8, __pyx_v_py_category, __pyx_v_py_policy, __pyx_v_status, __pyx_v_message, __pyx_v_message_sequence, __pyx_v_from_fsn, __pyx_v_to_fsn}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_14, (8-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3403, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_9; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_9 = 0; goto __pyx_L0;
03411:
03412:
+03413: def _default_error_handler(error):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_22_default_error_handler(PyObject *__pyx_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_22_default_error_handler = {"_default_error_handler", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_22_default_error_handler, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_22_default_error_handler(PyObject *__pyx_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_error = 0;
#if !CYTHON_VECTORCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_default_error_handler (wrapper)", 0);
#if !CYTHON_VECTORCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_error,0};
PyObject* values[1] = {0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 3413, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3413, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_default_error_handler", 0) < (0)) __PYX_ERR(0, 3413, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_default_error_handler", 1, 1, 1, i); __PYX_ERR(0, 3413, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 3413, __pyx_L3_error)
}
__pyx_v_error = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("_default_error_handler", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3413, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client._default_error_handler", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_21_default_error_handler(__pyx_self, __pyx_v_error);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_21_default_error_handler(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_error) {
PyObject *__pyx_v_level = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_AddTraceback("questdb._client._default_error_handler", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_level);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_22_default_error_handler, 0, __pyx_mstate_global->__pyx_n_u_default_error_handler, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[114])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3413, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
#endif
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_default_error_handler, __pyx_t_17) < (0)) __PYX_ERR(0, 3413, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
03414: level = (
+03415: logging.ERROR
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3415, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ERROR); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3415, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_1 = __pyx_t_2; __pyx_t_2 = 0; } else {
+03416: if error.applied_policy is SenderErrorPolicy.Terminal
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_applied_policy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3416, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3416, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Terminal); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3416, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = (__pyx_t_2 == __pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_5) {
+03417: else logging.WARNING)
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3417, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_WARNING); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3417, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_1 = __pyx_t_4; __pyx_t_4 = 0; } __pyx_v_level = __pyx_t_1; __pyx_t_1 = 0;
+03418: logging.getLogger("questdb").log(
__pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3418, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3418, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_n_u_questdb}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3418, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_4 = __pyx_t_2; __Pyx_INCREF(__pyx_t_4);
03419: level,
03420: "QWP/WebSocket server rejection: "
03421: "category=%s policy=%s status=%s fsn=[%s,%s] seq=%s message=%s",
+03422: error.category.tag,
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_category); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3422, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_tag); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3422, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+03423: error.applied_policy.tag,
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_applied_policy); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3423, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_tag); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3423, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+03424: error.status,
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_status); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3424, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7);
+03425: error.from_fsn,
__pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_from_fsn); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3425, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9);
+03426: error.to_fsn,
__pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_to_fsn); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3426, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10);
+03427: error.message_sequence,
__pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_message_sequence); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3427, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11);
+03428: error.message)
__pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_message); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3428, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_8 = 0; { PyObject *__pyx_callargs[10] = {__pyx_t_4, __pyx_v_level, __pyx_mstate_global->__pyx_kp_u_QWP_WebSocket_server_rejection_c, __pyx_t_3, __pyx_t_6, __pyx_t_7, __pyx_t_9, __pyx_t_10, __pyx_t_11, __pyx_t_12}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_log, __pyx_callargs+__pyx_t_8, (10-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3418, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
03429:
03430:
+03431: cdef void _sender_error_dispatch(
static void __pyx_f_7questdb_7_client__sender_error_dispatch(void *__pyx_v_user_data, struct line_sender_qwpws_error_view const *__pyx_v_view) {
struct __pyx_obj_7questdb_7_client__DispatchContext *__pyx_v_context = 0;
int __pyx_v_entered;
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_WriteUnraisable("questdb._client._sender_error_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_context);
__Pyx_RefNannyFinishContext();
__Pyx_PyGILState_Release(__pyx_gilstate_save);
}
03432: void* user_data,
03433: const line_sender_qwpws_error_view* view) noexcept with gil:
+03434: cdef _DispatchContext context = <_DispatchContext>user_data
__pyx_t_1 = ((PyObject *)__pyx_v_user_data);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_context = ((struct __pyx_obj_7questdb_7_client__DispatchContext *)__pyx_t_1);
__pyx_t_1 = 0;
+03435: cdef bint entered = False
__pyx_v_entered = 0;
+03436: try:
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L11_try_end;
__pyx_L6_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L8_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L4_error;
__pyx_L7_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
__pyx_L11_try_end:;
}
}
+03437: _enter_dispatch(context.owner_token)
__pyx_t_1 = __pyx_v_context->owner_token;
__Pyx_INCREF(__pyx_t_1);
__pyx_f_7questdb_7_client__enter_dispatch(__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3437, __pyx_L6_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+03438: entered = True
__pyx_v_entered = 1;
+03439: context.error_handler(_sender_error_from_raw(
__pyx_t_5 = NULL;
__Pyx_INCREF(__pyx_v_context->error_handler);
__pyx_t_6 = __pyx_v_context->error_handler;
__pyx_t_8 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_sender_error_from_raw); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3439, __pyx_L6_error)
__Pyx_GOTREF(__pyx_t_9);
+03440: c_sender_error_view_to_raw(view[0])))
__pyx_t_10 = __pyx_f_7questdb_7_client_c_sender_error_view_to_raw((__pyx_v_view[0])); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3440, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_8); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_11 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_10}; __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3439, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_t_11 = 1; #if CYTHON_UNPACK_METHODS if (likely(PyMethod_Check(__pyx_t_6))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_11 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_7}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3439, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+03441: except BaseException:
__pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_12) { __Pyx_AddTraceback("questdb._client._sender_error_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 3441, __pyx_L8_except_error) __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_7);
+03442: logging.getLogger("questdb").exception(
__pyx_t_8 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3442, __pyx_L8_except_error)
__Pyx_GOTREF(__pyx_t_13);
__pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3442, __pyx_L8_except_error)
__Pyx_GOTREF(__pyx_t_14);
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
__pyx_t_11 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_14))) {
__pyx_t_8 = PyMethod_GET_SELF(__pyx_t_14);
assert(__pyx_t_8);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_14);
__Pyx_INCREF(__pyx_t_8);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_14, __pyx__function);
__pyx_t_11 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_mstate_global->__pyx_n_u_questdb};
__pyx_t_10 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_14, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3442, __pyx_L8_except_error)
__Pyx_GOTREF(__pyx_t_10);
}
__pyx_t_9 = __pyx_t_10;
__Pyx_INCREF(__pyx_t_9);
__pyx_t_11 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_mstate_global->__pyx_kp_u_QWP_WebSocket_error_handler_fail};
__pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_exception, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3442, __pyx_L8_except_error)
__Pyx_GOTREF(__pyx_t_5);
}
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L7_exception_handled;
}
goto __pyx_L8_except_error;
03443: "QWP/WebSocket error handler failed")
03444: finally:
+03445: if entered:
/*finally:*/ {
/*normal exit:*/{
if (__pyx_v_entered) {
/* … */
}
goto __pyx_L5;
}
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
if ( unlikely(__Pyx_GetException(&__pyx_t_4, &__pyx_t_3, &__pyx_t_2) < 0)) __Pyx_ErrFetch(&__pyx_t_4, &__pyx_t_3, &__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__pyx_t_12 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_16 = __pyx_filename;
{
if (__pyx_v_entered) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_ErrRestore(__pyx_t_4, __pyx_t_3, __pyx_t_2);
__pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_16;
goto __pyx_L1_error;
__pyx_L16_error:;
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
goto __pyx_L1_error;
}
__pyx_L5:;
}
+03446: _exit_dispatch(context.owner_token)
__pyx_t_7 = __pyx_v_context->owner_token;
__Pyx_INCREF(__pyx_t_7);
__pyx_f_7questdb_7_client__exit_dispatch(__pyx_t_7); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3446, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
__pyx_t_7 = __pyx_v_context->owner_token;
__Pyx_INCREF(__pyx_t_7);
__pyx_f_7questdb_7_client__exit_dispatch(__pyx_t_7); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3446, __pyx_L16_error)
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
03447:
03448:
+03449: cdef void _sender_error_trampoline(
static void __pyx_f_7questdb_7_client__sender_error_trampoline(void *__pyx_v_user_data, struct line_sender_qwpws_error_view const *__pyx_v_view) {
/* … */
/* function exit code */
__pyx_L0:;
}
03450: void* user_data,
03451: const line_sender_qwpws_error_view* view) noexcept nogil:
03452: # No object locals here: the finalizing early return must not touch
03453: # the GIL, which a Cython epilogue with object cleanup would.
+03454: if qdb_py_is_finalizing():
__pyx_t_1 = qdb_py_is_finalizing();
if (__pyx_t_1) {
/* … */
}
+03455: return
{
}
goto __pyx_L0;
+03456: _sender_error_dispatch(user_data, view)
__pyx_f_7questdb_7_client__sender_error_dispatch(__pyx_v_user_data, __pyx_v_view);
03457:
03458:
+03459: class TlsCa(TaggedEnum):
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3459, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); { PyObject* __pyx_temp[1] = {__pyx_t_17}; __pyx_t_4 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3459, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_17 = __Pyx_PEP560_update_bases(__pyx_t_4); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3459, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_20 = __Pyx_CalculateMetaclass(NULL, __pyx_t_17); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3459, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __pyx_t_19 = __Pyx_Py3MetaclassPrepare(__pyx_t_20, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_TlsCa, __pyx_mstate_global->__pyx_n_u_TlsCa, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Verification_mechanism_for_the); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3459, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__pyx_t_17 != __pyx_t_4) { if (unlikely((PyDict_SetItemString(__pyx_t_19, "__orig_bases__", __pyx_t_4) < 0))) __PYX_ERR(0, 3459, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* … */ __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_TlsCa, __pyx_t_17, __pyx_t_19, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3459, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_TlsCa, __pyx_t_4) < (0)) __PYX_ERR(0, 3459, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
03460: """
03461: Verification mechanism for the server's certificate.
03462:
03463: Here ``webpki`` refers to the
03464: `WebPKI library <https://github.com/rustls/webpki-roots>`_ and
03465: ``os`` refers to the operating system's certificate store.
03466:
03467: See :ref:`sender_conf_tls` for more information.
03468: """
+03469: WebpkiRoots = ('webpki_roots', line_sender_ca_webpki_roots)
__pyx_t_4 = __Pyx_PyLong_From_enum__line_sender_ca(line_sender_ca_webpki_roots); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3469, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_webpki_roots, __pyx_t_4}; __pyx_t_16 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3469, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_WebpkiRoots, __pyx_t_16) < (0)) __PYX_ERR(0, 3469, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+03470: OsRoots = ('os_roots', line_sender_ca_os_roots)
__pyx_t_16 = __Pyx_PyLong_From_enum__line_sender_ca(line_sender_ca_os_roots); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3470, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_os_roots, __pyx_t_16}; __pyx_t_4 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3470, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_OsRoots, __pyx_t_4) < (0)) __PYX_ERR(0, 3470, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+03471: WebpkiAndOsRoots = ('webpki_and_os_roots', line_sender_ca_webpki_and_os_roots)
__pyx_t_4 = __Pyx_PyLong_From_enum__line_sender_ca(line_sender_ca_webpki_and_os_roots); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3471, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_webpki_and_os_roots, __pyx_t_4}; __pyx_t_16 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3471, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_WebpkiAndOsRoots, __pyx_t_16) < (0)) __PYX_ERR(0, 3471, __pyx_L1_error) __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+03472: PemFile = ('pem_file', line_sender_ca_pem_file)
__pyx_t_16 = __Pyx_PyLong_From_enum__line_sender_ca(line_sender_ca_pem_file); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3472, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_pem_file, __pyx_t_16}; __pyx_t_4 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3472, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_PemFile, __pyx_t_4) < (0)) __PYX_ERR(0, 3472, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
03473:
03474:
+03475: cdef object c_parse_conf_err_to_py(questdb_conf_str_parse_err* err):
static PyObject *__pyx_f_7questdb_7_client_c_parse_conf_err_to_py(struct questdb_conf_str_parse_err *__pyx_v_err) {
PyObject *__pyx_v_msg = 0;
PyObject *__pyx_v_py_err = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client.c_parse_conf_err_to_py", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_msg);
__Pyx_XDECREF(__pyx_v_py_err);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+03476: cdef str msg = PyUnicode_FromStringAndSize(
__pyx_t_1 = PyUnicode_FromStringAndSize(__pyx_v_err->msg, ((Py_ssize_t)__pyx_v_err->msg_len)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3476, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_msg = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
03477: err.msg, <Py_ssize_t>err.msg_len)
+03478: cdef object py_err = QuestDBError(QuestDBErrorCode.ConfigError, msg)
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3478, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3478, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3478, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_5, __pyx_v_msg}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3478, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_py_err = __pyx_t_1; __pyx_t_1 = 0;
+03479: questdb_conf_str_parse_err_free(err)
questdb_conf_str_parse_err_free(__pyx_v_err);
+03480: return py_err
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_py_err);
__pyx_r = __pyx_v_py_err;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
03481:
03482:
+03483: cdef object parse_conf_str(
static PyObject *__pyx_f_7questdb_7_client_parse_conf_str(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_conf_str) {
size_t __pyx_v_c_len1;
char const *__pyx_v_c_buf1;
size_t __pyx_v_c_len2;
char const *__pyx_v_c_buf2;
PyObject *__pyx_v_service = 0;
struct questdb_conf_str_iter *__pyx_v_c_iter;
PyObject *__pyx_v_key = 0;
PyObject *__pyx_v_value = 0;
PyObject *__pyx_v_params = 0;
struct line_sender_utf8 __pyx_v_c_conf_str_utf8;
struct questdb_conf_str_parse_err *__pyx_v_err;
struct questdb_conf_str *__pyx_v_c_conf_str;
PyObject *__pyx_v_type_mappings = NULL;
PyObject *__pyx_v_typed_params = NULL;
PyObject *__pyx_v_converter = NULL;
PyObject *__pyx_v_e = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_XDECREF(__pyx_t_19);
__Pyx_XDECREF(__pyx_t_20);
__Pyx_XDECREF(__pyx_t_21);
__Pyx_XDECREF(__pyx_t_22);
__Pyx_XDECREF(__pyx_t_23);
__Pyx_XDECREF(__pyx_t_24);
__Pyx_XDECREF(__pyx_t_27);
__Pyx_AddTraceback("questdb._client.parse_conf_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_service);
__Pyx_XDECREF(__pyx_v_key);
__Pyx_XDECREF(__pyx_v_value);
__Pyx_XDECREF(__pyx_v_params);
__Pyx_XDECREF(__pyx_v_type_mappings);
__Pyx_XDECREF(__pyx_v_typed_params);
__Pyx_XDECREF(__pyx_v_converter);
__Pyx_XDECREF(__pyx_v_e);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
03484: qdb_pystr_buf* b,
03485: str conf_str):
03486: """
03487: Parse a config string to a tuple of (Protocol, dict[str, str]).
03488: """
03489: cdef size_t c_len1
03490: cdef const char* c_buf1
03491: cdef size_t c_len2
03492: cdef const char* c_buf2
03493: cdef str service
03494: cdef questdb_conf_str_iter* c_iter
03495: cdef str key
03496: cdef str value
+03497: cdef dict params = {}
__pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3497, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_params = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
03498: cdef line_sender_utf8 c_conf_str_utf8
03499: cdef questdb_conf_str_parse_err* err
03500: cdef questdb_conf_str* c_conf_str
+03501: str_to_utf8(b, <PyObject*>conf_str, &c_conf_str_utf8)
__pyx_t_2 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_conf_str), (&__pyx_v_c_conf_str_utf8)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 3501, __pyx_L1_error)
+03502: c_conf_str = questdb_conf_str_parse(
__pyx_v_c_conf_str = questdb_conf_str_parse(__pyx_v_c_conf_str_utf8.buf, __pyx_v_c_conf_str_utf8.len, (&__pyx_v_err));
03503: c_conf_str_utf8.buf,
03504: c_conf_str_utf8.len,
03505: &err)
+03506: if c_conf_str == NULL:
__pyx_t_3 = (__pyx_v_c_conf_str == NULL);
if (unlikely(__pyx_t_3)) {
/* … */
}
+03507: raise c_parse_conf_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_parse_conf_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3507, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 3507, __pyx_L1_error)
03508:
+03509: c_iter = NULL
__pyx_v_c_iter = NULL;
+03510: try:
/*try:*/ {
+03511: c_buf1 = questdb_conf_str_service(c_conf_str, &c_len1)
__pyx_v_c_buf1 = questdb_conf_str_service(__pyx_v_c_conf_str, (&__pyx_v_c_len1));
+03512: service = PyUnicode_FromStringAndSize(c_buf1, <Py_ssize_t>c_len1)
__pyx_t_1 = PyUnicode_FromStringAndSize(__pyx_v_c_buf1, ((Py_ssize_t)__pyx_v_c_len1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3512, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_service = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
03513:
+03514: c_iter = questdb_conf_str_iter_pairs(c_conf_str)
__pyx_v_c_iter = questdb_conf_str_iter_pairs(__pyx_v_c_conf_str);
+03515: while questdb_conf_str_iter_next(c_iter, &c_buf1, &c_len1, &c_buf2, &c_len2):
while (1) {
__pyx_t_3 = questdb_conf_str_iter_next(__pyx_v_c_iter, (&__pyx_v_c_buf1), (&__pyx_v_c_len1), (&__pyx_v_c_buf2), (&__pyx_v_c_len2));
if (!__pyx_t_3) break;
+03516: key = PyUnicode_FromStringAndSize(c_buf1, <Py_ssize_t>c_len1)
__pyx_t_1 = PyUnicode_FromStringAndSize(__pyx_v_c_buf1, ((Py_ssize_t)__pyx_v_c_len1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3516, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_key, ((PyObject*)__pyx_t_1)); __pyx_t_1 = 0;
+03517: value = PyUnicode_FromStringAndSize(c_buf2, <Py_ssize_t>c_len2)
__pyx_t_1 = PyUnicode_FromStringAndSize(__pyx_v_c_buf2, ((Py_ssize_t)__pyx_v_c_len2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3517, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_value, ((PyObject*)__pyx_t_1)); __pyx_t_1 = 0;
+03518: params[key] = value
if (unlikely((PyDict_SetItem(__pyx_v_params, __pyx_v_key, __pyx_v_value) < 0))) __PYX_ERR(0, 3518, __pyx_L5_error) } }
03519: finally:
+03520: if c_iter != NULL:
/*finally:*/ {
/*normal exit:*/{
__pyx_t_3 = (__pyx_v_c_iter != NULL);
if (__pyx_t_3) {
/* … */
}
/* … */
__pyx_t_3 = (__pyx_v_c_iter != NULL);
if (__pyx_t_3) {
/* … */
}
+03521: questdb_conf_str_iter_free(c_iter)
questdb_conf_str_iter_free(__pyx_v_c_iter);
/* … */
questdb_conf_str_iter_free(__pyx_v_c_iter);
+03522: questdb_conf_str_free(c_conf_str)
questdb_conf_str_free(__pyx_v_c_conf_str);
goto __pyx_L6;
}
__pyx_L5_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
{
/* … */
questdb_conf_str_free(__pyx_v_c_conf_str);
}
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
goto __pyx_L1_error;
}
__pyx_L6:;
}
03523:
03524: # We now need to parse the various values in the dict from their
03525: # string values to their Python types, as expected by the overrides
03526: # API of Sender.from_conf and Sender.from_env.
03527: # Note that some of these values, such as `tls_ca` or `auto_flush`
03528: # are kept as strings and are parsed by Sender._set_sender_fields.
03529: type_mappings = {
+03530: 'bind_interface': str,
__pyx_t_1 = __Pyx_PyDict_NewPresized(25); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3530, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_bind_interface, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03531: 'max_datagram_size': int,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_max_datagram_size, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03532: 'multicast_ttl': int,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_multicast_ttl, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03533: 'username': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_username, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03534: 'password': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_password, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03535: 'token': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03536: 'token_x': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token_x, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03537: 'token_y': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token_y, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03538: 'auth_timeout': int,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auth_timeout, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03539: 'tls_verify': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_verify, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03540: 'tls_ca': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_ca, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03541: 'tls_roots': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_roots, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03542: 'tls_roots_password': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_roots_password, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03543: 'max_buf_size': int,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_max_buf_size, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03544: 'retry_timeout': int,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_retry_timeout, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03545: 'retry_max_backoff_millis': int,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_retry_max_backoff_millis, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03546: 'request_min_throughput': int,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_request_min_throughput, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03547: 'request_timeout': int,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_request_timeout, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03548: 'auto_flush': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03549: 'auto_flush_rows': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03550: 'auto_flush_bytes': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03551: 'auto_flush_interval': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_interval, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03552: 'init_buf_size': int,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_init_buf_size, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03553: 'max_name_len': int,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_max_name_len, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error)
+03554: 'qwp_ws_progress': str,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 3530, __pyx_L1_error) __pyx_v_type_mappings = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
03555: }
+03556: typed_params = {}
__pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3556, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_typed_params = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
+03557: for key, value in params.items():
__pyx_t_13 = 0; __pyx_t_15 = __Pyx_dict_iterator(__pyx_v_params, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_14), (&__pyx_t_5)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3557, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = __pyx_t_15; __pyx_t_15 = 0; while (1) { __pyx_t_4 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_14, &__pyx_t_13, &__pyx_t_15, &__pyx_t_16, NULL, __pyx_t_5); if (unlikely(__pyx_t_4 == 0)) break; if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 3557, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_GOTREF(__pyx_t_16); if (!(likely(PyUnicode_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_15))) __PYX_ERR(0, 3557, __pyx_L1_error) if (!(likely(PyUnicode_CheckExact(__pyx_t_16))||((__pyx_t_16) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_16))) __PYX_ERR(0, 3557, __pyx_L1_error) __Pyx_XDECREF_SET(__pyx_v_key, ((PyObject*)__pyx_t_15)); __pyx_t_15 = 0; __Pyx_XDECREF_SET(__pyx_v_value, ((PyObject*)__pyx_t_16)); __pyx_t_16 = 0;
+03558: converter = type_mappings.get(key, str)
__pyx_t_16 = __Pyx_PyDict_GetItemDefault(__pyx_v_type_mappings, __pyx_v_key, ((PyObject *)(&PyUnicode_Type))); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3558, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_XDECREF_SET(__pyx_v_converter, __pyx_t_16); __pyx_t_16 = 0;
+03559: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
goto __pyx_L22_try_end;
__pyx_L15_error:;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
/* … */
__pyx_L17_except_error:;
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ExceptionReset(__pyx_t_12, __pyx_t_11, __pyx_t_10);
goto __pyx_L1_error;
__pyx_L22_try_end:;
}
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+03560: typed_params[key] = converter(value)
__pyx_t_15 = NULL;
__Pyx_INCREF(__pyx_v_converter);
__pyx_t_17 = __pyx_v_converter;
__pyx_t_18 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_17))) {
__pyx_t_15 = PyMethod_GET_SELF(__pyx_t_17);
assert(__pyx_t_15);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_17);
__Pyx_INCREF(__pyx_t_15);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_17, __pyx__function);
__pyx_t_18 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_v_value};
__pyx_t_16 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_18, (2-__pyx_t_18) | (__pyx_t_18*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3560, __pyx_L15_error)
__Pyx_GOTREF(__pyx_t_16);
}
if (unlikely((PyDict_SetItem(__pyx_v_typed_params, __pyx_v_key, __pyx_t_16) < 0))) __PYX_ERR(0, 3560, __pyx_L15_error)
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+03561: except (ValueError, TypeError) as e:
__pyx_t_4 = __Pyx_PyErr_ExceptionMatches2(((PyObject *)(((PyTypeObject*)PyExc_ValueError))), ((PyObject *)(((PyTypeObject*)PyExc_TypeError))));
if (__pyx_t_4) {
__Pyx_AddTraceback("questdb._client.parse_conf_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_16, &__pyx_t_17, &__pyx_t_15) < 0) __PYX_ERR(0, 3561, __pyx_L17_except_error)
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_INCREF(__pyx_t_17);
__pyx_v_e = __pyx_t_17;
/*try:*/ {
/* … */
/*finally:*/ {
__pyx_L28_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
__Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
__Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
__Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
__Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
__Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
__Pyx_ExceptionSwap(&__pyx_t_29, &__pyx_t_30, &__pyx_t_31);
if ( unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_29);
__Pyx_XGOTREF(__pyx_t_30);
__Pyx_XGOTREF(__pyx_t_31);
__pyx_t_4 = __pyx_lineno; __pyx_t_28 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
{
__Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
}
__Pyx_XGIVEREF(__pyx_t_29);
__Pyx_XGIVEREF(__pyx_t_30);
__Pyx_XGIVEREF(__pyx_t_31);
__Pyx_ExceptionReset(__pyx_t_29, __pyx_t_30, __pyx_t_31);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ErrRestore(__pyx_t_9, __pyx_t_8, __pyx_t_7);
__pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0;
__pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_28; __pyx_filename = __pyx_t_6;
goto __pyx_L17_except_error;
}
}
}
goto __pyx_L17_except_error;
+03562: raise QuestDBError(
__pyx_t_20 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 3562, __pyx_L28_error)
__Pyx_GOTREF(__pyx_t_21);
+03563: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 3563, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_22); __pyx_t_23 = __Pyx_PyObject_GetAttrStr(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 3563, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_23); __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
+03564: f'Invalid value for config key {key!r}: {value!r}') from e
__pyx_t_22 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_key), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 3564, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_22); __pyx_t_24 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_value), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 3564, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_24); __pyx_t_25[0] = __pyx_mstate_global->__pyx_kp_u_Invalid_value_for_config_key; __pyx_t_25[1] = __pyx_t_22; __pyx_t_25[2] = __pyx_mstate_global->__pyx_kp_u__2; __pyx_t_25[3] = __pyx_t_24; __pyx_t_26 = 31; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_26 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_25[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_25[3]); #endif __pyx_t_4 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_4 |= __Pyx_PyUnicode_KIND_04(__pyx_t_25[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_25[3]); #endif __pyx_t_27 = __Pyx_PyUnicode_Join(__pyx_t_25, 4, __pyx_t_26, __pyx_t_4); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 3564, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_27); __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0; __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0; __pyx_t_18 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_21))) { __pyx_t_20 = PyMethod_GET_SELF(__pyx_t_21); assert(__pyx_t_20); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_21); __Pyx_INCREF(__pyx_t_20); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_21, __pyx__function); __pyx_t_18 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_20, __pyx_t_23, __pyx_t_27}; __pyx_t_19 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_21, __pyx_callargs+__pyx_t_18, (3-__pyx_t_18) | (__pyx_t_18*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0; __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0; __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3562, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_19); } __Pyx_Raise(__pyx_t_19, 0, 0, __pyx_v_e); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __PYX_ERR(0, 3562, __pyx_L28_error) }
+03565: if service == 'udps':
__pyx_t_3 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_service, __pyx_mstate_global->__pyx_n_u_udps, Py_EQ); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 3565, __pyx_L1_error) if (unlikely(__pyx_t_3)) { /* … */ }
+03566: raise QuestDBError(
__pyx_t_15 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3566, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
+03567: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3567, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3567, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_18 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_17))) { __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_17); assert(__pyx_t_15); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_17); __Pyx_INCREF(__pyx_t_15); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_17, __pyx__function); __pyx_t_18 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_19, __pyx_mstate_global->__pyx_kp_u_TLS_is_not_supported_for_UDP}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_18, (3-__pyx_t_18) | (__pyx_t_18*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3566, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 3566, __pyx_L1_error)
03568: 'TLS is not supported for UDP.')
+03569: return (Protocol.parse(service), typed_params)
__pyx_t_17 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3569, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_parse); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3569, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __pyx_t_18 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_15))) { __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_15); assert(__pyx_t_17); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_15); __Pyx_INCREF(__pyx_t_17); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_15, __pyx__function); __pyx_t_18 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_v_service}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_15, __pyx_callargs+__pyx_t_18, (2-__pyx_t_18) | (__pyx_t_18*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3569, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3569, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_GIVEREF(__pyx_t_1); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 3569, __pyx_L1_error); __Pyx_INCREF(__pyx_v_typed_params); __Pyx_GIVEREF(__pyx_v_typed_params); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_v_typed_params) != (0)) __PYX_ERR(0, 3569, __pyx_L1_error); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_15; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_15 = 0; goto __pyx_L0;
03570:
03571:
+03572: cdef str conf_str_value(object value):
static PyObject *__pyx_f_7questdb_7_client_conf_str_value(PyObject *__pyx_v_value) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.conf_str_value", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+03573: return str(value).replace(';', ';;')
__pyx_t_1 = __Pyx_PyObject_Unicode(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3573, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyUnicode_Replace(((PyObject*)__pyx_t_1), __pyx_mstate_global->__pyx_kp_u__28, __pyx_mstate_global->__pyx_kp_u__29, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3573, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = ((PyObject*)__pyx_t_2); } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
03574:
03575:
+03576: cdef bint _dataframe_columnar_has_single_logical_chunk(
static int __pyx_f_7questdb_7_client__dataframe_columnar_has_single_logical_chunk(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
03577: col_t* col,
03578: size_t row_count) noexcept nogil:
+03579: if col.setup.chunks.n_chunks != 1:
__pyx_t_1 = (__pyx_v_col->setup->chunks.n_chunks != 1);
if (__pyx_t_1) {
/* … */
}
+03580: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+03581: if col.setup.chunks.chunks == NULL:
__pyx_t_1 = (__pyx_v_col->setup->chunks.chunks == NULL);
if (__pyx_t_1) {
/* … */
}
+03582: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+03583: return col.setup.chunks.chunks[0].length == <int64_t>row_count
{
__pyx_r = ((__pyx_v_col->setup->chunks.chunks[0]).length == ((int64_t)__pyx_v_row_count));
}
goto __pyx_L0;
03584:
03585:
+03586: cdef bint _dataframe_columnar_has_single_contiguous_chunk(
static int __pyx_f_7questdb_7_client__dataframe_columnar_has_single_contiguous_chunk(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count) {
struct ArrowArray *__pyx_v_arr;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
03587: col_t* col,
03588: size_t row_count) noexcept nogil:
03589: cdef ArrowArray* arr
+03590: if not _dataframe_columnar_has_single_logical_chunk(col, row_count):
__pyx_t_1 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_single_logical_chunk(__pyx_v_col, __pyx_v_row_count));
if (__pyx_t_1) {
/* … */
}
+03591: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+03592: arr = &col.setup.chunks.chunks[0]
__pyx_v_arr = (&(__pyx_v_col->setup->chunks.chunks[0]));
03593: # pyarrow allocates exactly `n_buffers` pointers, so `buffers[1]` is
03594: # past the allocation for a struct array (1) or a null array (0).
03595: return (
+03596: arr.offset == 0 and
__pyx_t_2 = (__pyx_v_arr->offset == 0);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
+03597: arr.n_buffers >= 2 and
__pyx_t_2 = (__pyx_v_arr->n_buffers >= 2);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
+03598: arr.buffers != NULL and
__pyx_t_2 = (__pyx_v_arr->buffers != NULL);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
+03599: arr.buffers[1] != NULL)
__pyx_t_2 = ((__pyx_v_arr->buffers[1]) != NULL);
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
03600:
03601:
+03602: cdef bint _dataframe_columnar_i64_has_nat(
static int __pyx_f_7questdb_7_client__dataframe_columnar_i64_has_nat(int64_t const *__pyx_v_data, size_t __pyx_v_row_count) {
size_t __pyx_v_row_index;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
03603: const int64_t* data,
03604: size_t row_count) noexcept nogil:
03605: cdef size_t row_index
+03606: for row_index in range(row_count):
__pyx_t_1 = __pyx_v_row_count;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_row_index = __pyx_t_3;
+03607: if data[row_index] == _NAT:
__pyx_t_4 = ((__pyx_v_data[__pyx_v_row_index]) == __pyx_v_7questdb_7_client__NAT);
if (__pyx_t_4) {
/* … */
}
}
+03608: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+03609: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
03610:
03611:
+03612: cdef bint _dataframe_columnar_col_has_nat(
static int __pyx_f_7questdb_7_client__dataframe_columnar_col_has_nat(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
03613: col_t* col,
03614: size_t row_count) noexcept nogil:
+03615: if not col.setup.nat_scan_done:
__pyx_t_1 = (!__pyx_v_col->setup->nat_scan_done);
if (__pyx_t_1) {
/* … */
}
+03616: col.setup.nat_found = _dataframe_columnar_i64_has_nat(
__pyx_v_col->setup->nat_found = __pyx_f_7questdb_7_client__dataframe_columnar_i64_has_nat(((int64_t const *)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1])), __pyx_v_row_count);
03617: <const int64_t*>col.setup.chunks.chunks[0].buffers[1],
03618: row_count)
+03619: col.setup.nat_scan_done = True
__pyx_v_col->setup->nat_scan_done = 1;
+03620: return col.setup.nat_found
{
__pyx_r = __pyx_v_col->setup->nat_found;
}
goto __pyx_L0;
03621:
03622:
+03623: cdef bint _dataframe_columnar_i64_has_negative(
static int __pyx_f_7questdb_7_client__dataframe_columnar_i64_has_negative(int64_t const *__pyx_v_data, size_t __pyx_v_row_count) {
size_t __pyx_v_row_index;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
03624: const int64_t* data,
03625: size_t row_count) noexcept nogil:
03626: cdef size_t row_index
+03627: for row_index in range(row_count):
__pyx_t_1 = __pyx_v_row_count;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_row_index = __pyx_t_3;
+03628: if data[row_index] < 0:
__pyx_t_4 = ((__pyx_v_data[__pyx_v_row_index]) < 0);
if (__pyx_t_4) {
/* … */
}
}
+03629: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+03630: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
03631:
03632:
+03633: cdef const qwp_validity* _dataframe_columnar_validity(
static struct qwp_validity const *__pyx_f_7questdb_7_client__dataframe_columnar_validity(struct ArrowArray *__pyx_v_arr, size_t __pyx_v_row_offset, size_t __pyx_v_row_count, struct qwp_validity *__pyx_v_validity) {
struct qwp_validity const *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_validity", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
03634: ArrowArray* arr,
03635: size_t row_offset,
03636: size_t row_count,
03637: qwp_validity* validity) except? NULL:
+03638: if arr.null_count == 0:
__pyx_t_1 = (__pyx_v_arr->null_count == 0);
if (__pyx_t_1) {
/* … */
}
+03639: return NULL
{
__pyx_r = NULL;
}
goto __pyx_L0;
+03640: if row_offset % 8 != 0:
__pyx_t_1 = ((__pyx_v_row_offset % 8) != 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+03641: raise RuntimeError(
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Columnar_validity_slices_must_st};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3641, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 3641, __pyx_L1_error)
03642: 'Columnar validity slices must start at byte-aligned row offsets.')
+03643: validity.bits = (<const uint8_t*>arr.buffers[0]) + (row_offset // 8)
__pyx_v_validity->bits = (((uint8_t const *)(__pyx_v_arr->buffers[0])) + (__pyx_v_row_offset / 8));
+03644: validity.bit_len = row_count
__pyx_v_validity->bit_len = __pyx_v_row_count;
+03645: return validity
{
__pyx_r = __pyx_v_validity;
}
goto __pyx_L0;
03646:
03647:
+03648: cdef bint _dataframe_columnar_has_validity(
static int __pyx_f_7questdb_7_client__dataframe_columnar_has_validity(struct ArrowArray *__pyx_v_arr) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
03649: ArrowArray* arr) noexcept nogil:
03650: # A null array carries no buffer pointers at all, so the bitmap
03651: # read is bounded by `n_buffers` before it happens. This is the
03652: # gate `_dataframe_columnar_validity` relies on having run.
+03653: return arr.null_count == 0 or (
__pyx_t_2 = (__pyx_v_arr->null_count == 0);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L3_bool_binop_done;
}
+03654: arr.n_buffers >= 1
__pyx_t_2 = (__pyx_v_arr->n_buffers >= 1);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L3_bool_binop_done;
}
+03655: and arr.buffers != NULL
__pyx_t_2 = (__pyx_v_arr->buffers != NULL);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L3_bool_binop_done;
}
+03656: and arr.buffers[0] != NULL)
__pyx_t_2 = ((__pyx_v_arr->buffers[0]) != NULL);
__pyx_t_1 = __pyx_t_2;
__pyx_L3_bool_binop_done:;
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
03657:
03658:
+03659: cdef bint _dataframe_columnar_has_utf8_values(
static int __pyx_f_7questdb_7_client__dataframe_columnar_has_utf8_values(struct ArrowArray *__pyx_v_arr, int __pyx_v_large_offsets) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
03660: ArrowArray* arr, bint large_offsets) noexcept nogil:
+03661: if not (arr.n_buffers >= 3 and
__pyx_t_2 = (__pyx_v_arr->n_buffers >= 3);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
/* … */
__pyx_t_2 = (!__pyx_t_1);
if (__pyx_t_2) {
/* … */
}
+03662: arr.buffers != NULL and
__pyx_t_2 = (__pyx_v_arr->buffers != NULL);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
+03663: arr.buffers[1] != NULL):
__pyx_t_2 = ((__pyx_v_arr->buffers[1]) != NULL); __pyx_t_1 = __pyx_t_2; __pyx_L4_bool_binop_done:;
+03664: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+03665: if arr.length == 0 or arr.buffers[2] != NULL:
__pyx_t_1 = (__pyx_v_arr->length == 0);
if (!__pyx_t_1) {
} else {
__pyx_t_2 = __pyx_t_1;
goto __pyx_L8_bool_binop_done;
}
__pyx_t_1 = ((__pyx_v_arr->buffers[2]) != NULL);
__pyx_t_2 = __pyx_t_1;
__pyx_L8_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
+03666: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
03667: # NULL byte buffer is valid only with zero data bytes (all-null/empty).
+03668: if large_offsets:
if (__pyx_v_large_offsets) {
/* … */
}
+03669: return (<const int64_t*>arr.buffers[1])[arr.offset + arr.length] == 0
{
__pyx_r = ((((int64_t const *)(__pyx_v_arr->buffers[1]))[(__pyx_v_arr->offset + __pyx_v_arr->length)]) == 0);
}
goto __pyx_L0;
+03670: return (<const int32_t*>arr.buffers[1])[arr.offset + arr.length] == 0
{
__pyx_r = ((((int32_t const *)(__pyx_v_arr->buffers[1]))[(__pyx_v_arr->offset + __pyx_v_arr->length)]) == 0);
}
goto __pyx_L0;
03671:
03672:
+03673: cdef bint _dataframe_columnar_has_utf8_dictionary(
static int __pyx_f_7questdb_7_client__dataframe_columnar_has_utf8_dictionary(struct ArrowArray *__pyx_v_arr) {
struct ArrowArray *__pyx_v_dictionary;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
03674: ArrowArray* arr) noexcept nogil:
+03675: cdef ArrowArray* dictionary = arr.dictionary
__pyx_t_1 = __pyx_v_arr->dictionary; __pyx_v_dictionary = __pyx_t_1;
+03676: if dictionary == NULL:
__pyx_t_2 = (__pyx_v_dictionary == NULL);
if (__pyx_t_2) {
/* … */
}
+03677: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
03678: return (
+03679: dictionary.offset == 0 and
__pyx_t_3 = (__pyx_v_dictionary->offset == 0);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L4_bool_binop_done;
}
+03680: dictionary.n_buffers >= 3 and
__pyx_t_3 = (__pyx_v_dictionary->n_buffers >= 3);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L4_bool_binop_done;
}
+03681: dictionary.buffers != NULL and
__pyx_t_3 = (__pyx_v_dictionary->buffers != NULL);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L4_bool_binop_done;
}
+03682: dictionary.buffers[1] != NULL and
__pyx_t_3 = ((__pyx_v_dictionary->buffers[1]) != NULL);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L4_bool_binop_done;
}
+03683: (dictionary.length == 0 or dictionary.buffers[2] != NULL))
__pyx_t_3 = (__pyx_v_dictionary->length == 0);
if (!__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_3 = ((__pyx_v_dictionary->buffers[2]) != NULL);
__pyx_t_2 = __pyx_t_3;
__pyx_L4_bool_binop_done:;
{
__pyx_r = __pyx_t_2;
}
goto __pyx_L0;
03684:
03685:
+03686: cdef bint _dataframe_columnar_plan_has_validity(
static int __pyx_f_7questdb_7_client__dataframe_columnar_plan_has_validity(struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan) {
size_t __pyx_v_col_index;
struct ArrowArray *__pyx_v_arr;
struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
03687: dataframe_plan_t* plan) noexcept nogil:
03688: """
03689: True when chunk row boundaries must be byte-aligned (multiples of 8).
03690: Triggers for:
03691: - Any Arrow column whose `null_count != 0` (the encoder reads a
03692: validity bitmap and our slicing requires byte-alignment).
03693: - Any PyObject source. The planner can't see the nulls until the
03694: build phase walks the column; we conservatively assume they
03695: might be present and require alignment.
03696: - col_source_bool_pyobj specifically packs its VALUES into an
03697: LSB-first bitmap; the emit shift `row_offset // 8` requires
03698: alignment whether or not nulls are present.
03699: """
03700: cdef size_t col_index
03701: cdef ArrowArray* arr
03702: cdef col_t* col
+03703: for col_index in range(plan.col_count):
__pyx_t_1 = __pyx_v_plan->col_count;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_col_index = __pyx_t_3;
+03704: col = &plan.cols.d[col_index]
__pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_col_index]));
+03705: if _is_pyobj_source(col.setup.source):
__pyx_t_4 = __pyx_f_7questdb_7_client__is_pyobj_source(__pyx_v_col->setup->source);
if (__pyx_t_4) {
/* … */
}
+03706: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+03707: arr = &col.setup.chunks.chunks[0]
__pyx_v_arr = (&(__pyx_v_col->setup->chunks.chunks[0]));
+03708: if arr.null_count != 0:
__pyx_t_4 = (__pyx_v_arr->null_count != 0);
if (__pyx_t_4) {
/* … */
}
}
+03709: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+03710: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
03711:
03712:
+03713: cdef size_t _dataframe_columnar_rows_per_chunk(
static size_t __pyx_f_7questdb_7_client__dataframe_columnar_rows_per_chunk(struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan, size_t __pyx_v_max_rows_per_chunk) {
size_t __pyx_v_rows_per_chunk;
size_t __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
03714: dataframe_plan_t* plan,
03715: size_t max_rows_per_chunk) noexcept nogil:
03716: # Clamp to a hard safety upper bound and align to 8 rows when the plan
03717: # carries a validity bitmap (chunk boundary must be byte-aligned).
+03718: cdef size_t rows_per_chunk = max_rows_per_chunk
__pyx_v_rows_per_chunk = __pyx_v_max_rows_per_chunk;
+03719: if rows_per_chunk > 1000000:
__pyx_t_1 = (__pyx_v_rows_per_chunk > 0xF4240);
if (__pyx_t_1) {
/* … */
}
+03720: rows_per_chunk = 1000000
__pyx_v_rows_per_chunk = 0xF4240;
+03721: if rows_per_chunk == 0:
__pyx_t_1 = (__pyx_v_rows_per_chunk == 0);
if (__pyx_t_1) {
/* … */
}
+03722: rows_per_chunk = 1
__pyx_v_rows_per_chunk = 1;
+03723: if _dataframe_columnar_plan_has_validity(plan):
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_plan_has_validity(__pyx_v_plan);
if (__pyx_t_1) {
/* … */
}
+03724: if rows_per_chunk < 8 and rows_per_chunk < plan.row_count:
__pyx_t_2 = (__pyx_v_rows_per_chunk < 8);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L7_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_rows_per_chunk < __pyx_v_plan->row_count);
__pyx_t_1 = __pyx_t_2;
__pyx_L7_bool_binop_done:;
if (__pyx_t_1) {
/* … */
goto __pyx_L6;
}
+03725: rows_per_chunk = 8
__pyx_v_rows_per_chunk = 8;
+03726: elif rows_per_chunk > 8:
__pyx_t_1 = (__pyx_v_rows_per_chunk > 8);
if (__pyx_t_1) {
/* … */
}
__pyx_L6:;
+03727: rows_per_chunk -= rows_per_chunk % 8
__pyx_v_rows_per_chunk = (__pyx_v_rows_per_chunk - (__pyx_v_rows_per_chunk % 8));
+03728: if rows_per_chunk == 0:
__pyx_t_1 = (__pyx_v_rows_per_chunk == 0);
if (__pyx_t_1) {
/* … */
}
+03729: rows_per_chunk = 8
__pyx_v_rows_per_chunk = 8;
+03730: return rows_per_chunk
{
__pyx_r = __pyx_v_rows_per_chunk;
}
goto __pyx_L0;
03731:
03732:
+03733: cdef object _dataframe_columnar_global_failure(str reason):
static PyObject *__pyx_f_7questdb_7_client__dataframe_columnar_global_failure(PyObject *__pyx_v_reason) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_global_failure", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
03734: return {
+03735: 'column': None,
__pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3735, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_column_2, Py_None) < (0)) __PYX_ERR(0, 3735, __pyx_L1_error)
+03736: 'target': None,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_target, Py_None) < (0)) __PYX_ERR(0, 3735, __pyx_L1_error)
+03737: 'source_code': None,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_source_code, Py_None) < (0)) __PYX_ERR(0, 3735, __pyx_L1_error)
+03738: 'reason': reason,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_reason, __pyx_v_reason) < (0)) __PYX_ERR(0, 3735, __pyx_L1_error) { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
03739: }
03740:
03741:
+03742: cdef object _dataframe_columnar_col_failure(
static PyObject *__pyx_f_7questdb_7_client__dataframe_columnar_col_failure(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, PyObject *__pyx_v_reason) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_col_failure", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
03743: object df,
03744: col_t* col,
03745: str reason):
03746: return {
+03747: 'column': df.columns[col.setup.orig_index],
__pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3747, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3747, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_2, __pyx_v_col->setup->orig_index, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3747, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_column_2, __pyx_t_3) < (0)) __PYX_ERR(0, 3747, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+03748: 'target': _TARGET_NAMES[col.setup.target],
if (unlikely(__pyx_v_7questdb_7_client__TARGET_NAMES == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
__PYX_ERR(0, 3748, __pyx_L1_error)
}
__pyx_t_3 = __Pyx_PyLong_From_enum____pyx_t_7questdb_7_client_col_target_t(__pyx_v_col->setup->target); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3748, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_7questdb_7_client__TARGET_NAMES, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3748, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_target, __pyx_t_2) < (0)) __PYX_ERR(0, 3747, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+03749: 'source_code': <int>col.setup.source,
__pyx_t_2 = __Pyx_PyLong_From_int(((int)__pyx_v_col->setup->source)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3749, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_source_code, __pyx_t_2) < (0)) __PYX_ERR(0, 3747, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+03750: 'reason': reason,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_reason, __pyx_v_reason) < (0)) __PYX_ERR(0, 3747, __pyx_L1_error) { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
03751: }
03752:
03753:
+03754: cdef object _dataframe_columnar_plan_normalizations(
static PyObject *__pyx_f_7questdb_7_client__dataframe_columnar_plan_normalizations(CYTHON_UNUSED PyObject *__pyx_v_df, CYTHON_UNUSED struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan) {
PyObject *__pyx_v_normalizations = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_plan_normalizations", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_normalizations);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
03755: object df,
03756: dataframe_plan_t* plan):
+03757: cdef list normalizations = []
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3757, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_normalizations = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
+03758: return normalizations
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_normalizations);
__pyx_r = __pyx_v_normalizations;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
03759:
03760:
+03761: cdef object _dataframe_columnar_plan_failures(
static PyObject *__pyx_f_7questdb_7_client__dataframe_columnar_plan_failures(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan) {
PyObject *__pyx_v_failures = 0;
size_t __pyx_v_col_index;
size_t __pyx_v_field_count;
struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col;
int64_t const *__pyx_v_ts_data;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_plan_failures", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_failures);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
03762: object df,
03763: dataframe_plan_t* plan):
+03764: cdef list failures = []
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3764, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_failures = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
03765: cdef size_t col_index
+03766: cdef size_t field_count = 0
__pyx_v_field_count = 0;
03767: cdef col_t* col
03768: cdef const int64_t* ts_data
03769:
+03770: if (plan.col_count == 0) or (plan.row_count == 0):
__pyx_t_3 = (__pyx_v_plan->col_count == 0);
if (!__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_3 = (__pyx_v_plan->row_count == 0);
__pyx_t_2 = __pyx_t_3;
__pyx_L4_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
+03771: return failures
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_failures);
__pyx_r = __pyx_v_failures;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
03772:
+03773: if plan.c_table_name.buf == NULL:
__pyx_t_2 = (__pyx_v_plan->c_table_name.buf == NULL);
if (__pyx_t_2) {
/* … */
}
+03774: failures.append(_dataframe_columnar_global_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_global_failure(__pyx_mstate_global->__pyx_kp_u_v1_requires_a_fixed_table_name_t); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3774, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3774, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
03775: 'v1 requires a fixed table_name; table_name_col is not supported.'))
03776:
+03777: if (plan.at_value != _AT_IS_SET_BY_COLUMN
__pyx_t_3 = (__pyx_v_plan->at_value != __pyx_v_7questdb_7_client__AT_IS_SET_BY_COLUMN);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L8_bool_binop_done;
}
/* … */
if (__pyx_t_2) {
/* … */
}
+03778: and plan.at_value != _AT_IS_SERVER_NOW
__pyx_t_3 = (__pyx_v_plan->at_value != __pyx_v_7questdb_7_client__AT_IS_SERVER_NOW);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L8_bool_binop_done;
}
+03779: and plan.at_value < 0):
__pyx_t_3 = (__pyx_v_plan->at_value < 0); __pyx_t_2 = __pyx_t_3; __pyx_L8_bool_binop_done:;
+03780: failures.append(_dataframe_columnar_global_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_global_failure(__pyx_mstate_global->__pyx_kp_u_v1_requires_at_to_be_a_non_null); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3780, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3780, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
03781: 'v1 requires at to be a non-null DataFrame timestamp column, '
03782: 'a fixed timestamp shared by every row, or the explicit '
03783: 'ServerTimestamp sentinel.'))
03784:
+03785: for col_index in range(plan.col_count):
__pyx_t_5 = __pyx_v_plan->col_count;
__pyx_t_6 = __pyx_t_5;
for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
__pyx_v_col_index = __pyx_t_7;
+03786: col = &plan.cols.d[col_index]
__pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_col_index]));
+03787: if col.setup.target == col_target_t.col_target_skip:
__pyx_t_2 = (__pyx_v_col->setup->target == __pyx_e_7questdb_7_client_col_target_skip);
if (__pyx_t_2) {
/* … */
}
+03788: continue
goto __pyx_L11_continue;
+03789: if col.setup.target == col_target_t.col_target_table:
__pyx_t_2 = (__pyx_v_col->setup->target == __pyx_e_7questdb_7_client_col_target_table);
if (__pyx_t_2) {
/* … */
}
+03790: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_table_name_columns_are_not_suppo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3790, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3790, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
03791: df, col, 'table-name columns are not supported in v1.'))
+03792: continue
goto __pyx_L11_continue;
+03793: if col.setup.target != col_target_t.col_target_at:
__pyx_t_2 = (__pyx_v_col->setup->target != __pyx_e_7questdb_7_client_col_target_at);
if (__pyx_t_2) {
/* … */
}
+03794: field_count += 1
__pyx_v_field_count = (__pyx_v_field_count + 1);
+03795: if col.setup.target == col_target_t.col_target_column_arrow:
__pyx_t_2 = (__pyx_v_col->setup->target == __pyx_e_7questdb_7_client_col_target_column_arrow);
if (__pyx_t_2) {
/* … */
goto __pyx_L16;
}
03796: # Generic Arrow passthrough is opaque to this planner. The Rust
03797: # importer validates the type-specific buffer layout, validity,
03798: # children and logical offset. This side only needs the one array
03799: # that the per-column import handle accepts, spanning every row in
03800: # the pandas frame.
+03801: if not _dataframe_columnar_has_single_logical_chunk(
__pyx_t_2 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_single_logical_chunk(__pyx_v_col, __pyx_v_plan->row_count));
if (__pyx_t_2) {
/* … */
}
03802: col, plan.row_count):
+03803: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_requires_one_Arrow_chunk_span); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3803, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3803, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
03804: df, col,
03805: 'v1 requires one Arrow chunk spanning the whole column.'))
+03806: continue
goto __pyx_L11_continue;
03807: else:
03808: # Direct encoders below address buffers[0]/buffers[1] themselves,
03809: # so they require a zero-offset value buffer and a readable
03810: # validity bitmap. Arrow passthrough deliberately does not.
+03811: if not _dataframe_columnar_has_single_contiguous_chunk(
/*else*/ {
/* … */
__pyx_t_2 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_single_contiguous_chunk(__pyx_v_col, __pyx_v_plan->row_count));
/* … */
if (__pyx_t_2) {
/* … */
}
03812: col, plan.row_count):
+03813: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_requires_one_contiguous_zero); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3813, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3813, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
03814: df, col,
03815: 'v1 requires one contiguous zero-offset buffer.'))
+03816: continue
goto __pyx_L11_continue;
+03817: if not _dataframe_columnar_has_validity(
__pyx_t_2 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_validity((&(__pyx_v_col->setup->chunks.chunks[0]))));
if (__pyx_t_2) {
/* … */
}
}
__pyx_L16:;
03818: &col.setup.chunks.chunks[0]):
+03819: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_requires_a_zero_offset_validi); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3819, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3819, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
03820: df, col, 'v1 requires a zero-offset validity bitmap when '
03821: 'nulls are present.'))
+03822: continue
goto __pyx_L11_continue;
03823:
+03824: if col.setup.target == col_target_t.col_target_column_bool:
switch (__pyx_v_col->setup->target) {
case __pyx_e_7questdb_7_client_col_target_column_bool:
/* … */
break;
case __pyx_e_7questdb_7_client_col_target_column_i64:
+03825: if col.setup.source not in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_bool_pyobj:
/* … */
__pyx_t_2 = 0;
break;
default:
__pyx_t_2 = 1;
break;
}
__pyx_t_3 = __pyx_t_2;
if (__pyx_t_3) {
/* … */
}
+03826: col_source_t.col_source_bool_pyobj,
case __pyx_e_7questdb_7_client_col_source_bool_numpy:
03827: col_source_t.col_source_bool_numpy):
+03828: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_object_dtype_bo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3828, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3828, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
03829: df,
03830: col,
03831: 'v1 only supports object-dtype bool or NumPy bool '
03832: 'columns; Arrow nullable bool not yet supported.'))
+03833: elif col.setup.target == col_target_t.col_target_column_i64:
break;
case __pyx_e_7questdb_7_client_col_target_column_f64:
+03834: if col.setup.source not in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_i64_numpy:
/* … */
__pyx_t_3 = 0;
break;
default:
__pyx_t_3 = 1;
break;
}
__pyx_t_2 = __pyx_t_3;
if (__pyx_t_2) {
/* … */
}
+03835: col_source_t.col_source_i64_numpy,
case __pyx_e_7questdb_7_client_col_source_i8_numpy:
+03836: col_source_t.col_source_i8_numpy,
case __pyx_e_7questdb_7_client_col_source_i16_numpy:
+03837: col_source_t.col_source_i16_numpy,
case __pyx_e_7questdb_7_client_col_source_i32_numpy:
+03838: col_source_t.col_source_i32_numpy,
case __pyx_e_7questdb_7_client_col_source_u8_numpy:
+03839: col_source_t.col_source_u8_numpy,
case __pyx_e_7questdb_7_client_col_source_u16_numpy:
+03840: col_source_t.col_source_u16_numpy,
case __pyx_e_7questdb_7_client_col_source_u32_numpy:
+03841: col_source_t.col_source_u32_numpy,
case __pyx_e_7questdb_7_client_col_source_u64_numpy:
+03842: col_source_t.col_source_u64_numpy,
case __pyx_e_7questdb_7_client_col_source_u32_arrow:
+03843: col_source_t.col_source_u32_arrow,
case __pyx_e_7questdb_7_client_col_source_i64_arrow:
+03844: col_source_t.col_source_i64_arrow,
case __pyx_e_7questdb_7_client_col_source_int_pyobj:
03845: col_source_t.col_source_int_pyobj):
+03846: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_NumPy_signed_un); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3846, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3846, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
03847: df,
03848: col,
03849: 'v1 only supports NumPy signed/unsigned int columns, '
03850: 'Arrow uint32/int64 columns, or object-dtype int '
03851: 'columns.'))
+03852: elif col.setup.target == col_target_t.col_target_column_f64:
break;
case __pyx_e_7questdb_7_client_col_target_column_ts:
+03853: if col.setup.source not in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_f64_numpy:
/* … */
__pyx_t_2 = 0;
break;
default:
__pyx_t_2 = 1;
break;
}
__pyx_t_3 = __pyx_t_2;
if (__pyx_t_3) {
/* … */
}
+03854: col_source_t.col_source_f64_numpy,
case __pyx_e_7questdb_7_client_col_source_f32_numpy:
+03855: col_source_t.col_source_f32_numpy,
case __pyx_e_7questdb_7_client_col_source_f64_arrow:
+03856: col_source_t.col_source_f64_arrow,
case __pyx_e_7questdb_7_client_col_source_float_pyobj:
03857: col_source_t.col_source_float_pyobj):
+03858: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_NumPy_float32_f); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3858, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3858, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
03859: df,
03860: col,
03861: 'v1 only supports NumPy float32/float64, Arrow '
03862: 'float64, or object-dtype float columns.'))
+03863: elif col.setup.target == col_target_t.col_target_column_ts:
break;
case __pyx_e_7questdb_7_client_col_target_column_str:
+03864: if col.setup.source not in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_dt64ns_numpy:
/* … */
__pyx_t_3 = 0;
break;
default:
__pyx_t_3 = 1;
break;
}
__pyx_t_2 = __pyx_t_3;
if (__pyx_t_2) {
/* … */
goto __pyx_L23;
}
+03865: col_source_t.col_source_dt64ns_numpy,
case __pyx_e_7questdb_7_client_col_source_dt64us_numpy:
+03866: col_source_t.col_source_dt64us_numpy,
case __pyx_e_7questdb_7_client_col_source_dt64ns_tz_arrow:
+03867: col_source_t.col_source_dt64ns_tz_arrow,
case __pyx_e_7questdb_7_client_col_source_dt64us_tz_arrow:
+03868: col_source_t.col_source_dt64us_tz_arrow,
case __pyx_e_7questdb_7_client_col_source_datetime_pyobj:
03869: col_source_t.col_source_datetime_pyobj):
+03870: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_NumPy_datetime6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3870, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3870, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
03871: df,
03872: col,
03873: 'v1 only supports NumPy datetime64[ns/us], '
03874: 'tz-aware datetime64/timestamp[pyarrow], or '
03875: 'object-dtype datetime timestamp field columns.'))
+03876: elif (col.setup.source == col_source_t.col_source_dt64ns_numpy
__pyx_t_3 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_dt64ns_numpy);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L24_bool_binop_done;
}
/* … */
if (__pyx_t_2) {
/* … */
}
__pyx_L23:;
+03877: and _PYARROW is None):
__pyx_t_3 = (__pyx_v_7questdb_7_client__PYARROW == Py_None);
__pyx_t_2 = __pyx_t_3;
__pyx_L24_bool_binop_done:;
03878: # NaT in a datetime64[ns] field is INT64_MIN nanoseconds;
03879: # the zero-copy ns->micros wire conversion would corrupt
03880: # that null sentinel into a bogus 1677 timestamp. With
03881: # pyarrow, _dataframe_columnar_promote_cols already
03882: # re-exported any NaT-carrying column through Arrow (and
03883: # imported pyarrow doing so), leaving nothing to reject.
+03884: if _dataframe_columnar_col_has_nat(col, plan.row_count):
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_col_has_nat(__pyx_v_col, __pyx_v_plan->row_count);
if (__pyx_t_2) {
/* … */
}
+03885: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_datetime64_ns_timestamp_field); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3885, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3885, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
03886: df,
03887: col,
03888: 'v1 datetime64[ns] timestamp field columns cannot '
03889: 'contain NaT without pyarrow; install pyarrow, or '
03890: 'use datetime64[us] or an object-dtype datetime '
03891: 'column for NULL timestamps.'))
+03892: elif col.setup.target == col_target_t.col_target_column_str:
break;
case __pyx_e_7questdb_7_client_col_target_symbol:
+03893: if col.setup.source == col_source_t.col_source_str_pyobj:
__pyx_t_2 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_str_pyobj);
if (__pyx_t_2) {
goto __pyx_L27;
}
03894: # PyObject sources are validated by the pre-build phase
03895: # at row level (one walk catches all rows). The planner
03896: # has nothing more to check here.
03897: pass
+03898: elif col.setup.source in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_str_i8_cat:
/* … */
__pyx_t_2 = 1;
break;
default:
__pyx_t_2 = 0;
break;
}
__pyx_t_3 = __pyx_t_2;
if (__pyx_t_3) {
/* … */
goto __pyx_L27;
}
+03899: col_source_t.col_source_str_i8_cat,
case __pyx_e_7questdb_7_client_col_source_str_i16_cat:
+03900: col_source_t.col_source_str_i16_cat,
case __pyx_e_7questdb_7_client_col_source_str_i32_cat:
03901: col_source_t.col_source_str_i32_cat):
+03902: if not _dataframe_columnar_has_utf8_dictionary(
__pyx_t_3 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_utf8_dictionary((&(__pyx_v_col->setup->chunks.chunks[0]))));
if (__pyx_t_3) {
/* … */
}
03903: &col.setup.chunks.chunks[0]):
+03904: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_requires_Arrow_UTF_8_or_Large); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3904, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3904, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
03905: df,
03906: col,
03907: 'v1 requires Arrow UTF-8 or LargeUtf8 dictionary '
03908: 'offsets and byte buffers for categorical columns.'))
+03909: elif col.setup.source not in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_str_utf8_arrow:
/* … */
__pyx_t_3 = 0;
break;
default:
__pyx_t_3 = 1;
break;
}
__pyx_t_2 = __pyx_t_3;
if (__pyx_t_2) {
/* … */
goto __pyx_L27;
}
+03910: col_source_t.col_source_str_utf8_arrow,
case __pyx_e_7questdb_7_client_col_source_str_lrg_utf8_arrow:
03911: col_source_t.col_source_str_lrg_utf8_arrow):
+03912: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_string_pyarrow); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3912, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3912, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
03913: df,
03914: col,
03915: 'v1 only supports string[pyarrow] columns backed by '
03916: 'Arrow UTF-8 or LargeUtf8, pandas string Categorical, '
03917: 'or object-dtype str.'))
+03918: elif not _dataframe_columnar_has_utf8_values(
__pyx_t_2 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_utf8_values((&(__pyx_v_col->setup->chunks.chunks[0])), (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_str_lrg_utf8_arrow)));
if (__pyx_t_2) {
/* … */
}
__pyx_L27:;
03919: &col.setup.chunks.chunks[0],
03920: col.setup.source ==
03921: col_source_t.col_source_str_lrg_utf8_arrow):
+03922: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_requires_Arrow_UTF_8_or_Large_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3922, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3922, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
03923: df,
03924: col,
03925: 'v1 requires Arrow UTF-8 or LargeUtf8 offsets and byte buffers.'))
+03926: elif col.setup.target == col_target_t.col_target_symbol:
break;
case __pyx_e_7questdb_7_client_col_target_at:
+03927: if col.setup.source in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_str_i8_cat:
/* … */
break;
case __pyx_e_7questdb_7_client_col_source_str_utf8_arrow:
+03928: col_source_t.col_source_str_i8_cat,
case __pyx_e_7questdb_7_client_col_source_str_i16_cat:
+03929: col_source_t.col_source_str_i16_cat,
case __pyx_e_7questdb_7_client_col_source_str_i32_cat:
03930: col_source_t.col_source_str_i32_cat):
+03931: if not _dataframe_columnar_has_utf8_dictionary(
__pyx_t_2 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_utf8_dictionary((&(__pyx_v_col->setup->chunks.chunks[0]))));
if (__pyx_t_2) {
/* … */
}
03932: &col.setup.chunks.chunks[0]):
+03933: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_requires_Arrow_UTF_8_or_Large_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3933, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3933, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
03934: df,
03935: col,
03936: 'v1 requires Arrow UTF-8 or LargeUtf8 dictionary '
03937: 'offsets and byte buffers for categorical symbols.'))
+03938: elif col.setup.source in (
break;
default:
+03939: col_source_t.col_source_str_utf8_arrow,
case __pyx_e_7questdb_7_client_col_source_str_lrg_utf8_arrow:
03940: col_source_t.col_source_str_lrg_utf8_arrow):
+03941: if not _dataframe_columnar_has_utf8_values(
__pyx_t_2 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_utf8_values((&(__pyx_v_col->setup->chunks.chunks[0])), (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_str_lrg_utf8_arrow)));
if (__pyx_t_2) {
/* … */
}
03942: &col.setup.chunks.chunks[0],
03943: col.setup.source ==
03944: col_source_t.col_source_str_lrg_utf8_arrow):
+03945: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_requires_Arrow_UTF_8_or_Large_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3945, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3945, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
03946: df,
03947: col,
03948: 'v1 requires Arrow UTF-8 or LargeUtf8 offsets and '
03949: 'byte buffers.'))
03950: else:
+03951: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_pandas_string_C); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3951, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3951, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; break; }
03952: df,
03953: col,
03954: 'v1 only supports pandas string Categorical or '
03955: 'string[pyarrow] symbol columns.'))
+03956: elif col.setup.target == col_target_t.col_target_at:
break;
case __pyx_e_7questdb_7_client_col_target_column_decimal:
+03957: if col.setup.source not in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_dt64ns_numpy:
/* … */
__pyx_t_2 = 0;
break;
default:
__pyx_t_2 = 1;
break;
}
__pyx_t_3 = __pyx_t_2;
if (__pyx_t_3) {
/* … */
goto __pyx_L31;
}
+03958: col_source_t.col_source_dt64ns_numpy,
case __pyx_e_7questdb_7_client_col_source_dt64us_numpy:
+03959: col_source_t.col_source_dt64us_numpy,
case __pyx_e_7questdb_7_client_col_source_dt64ns_tz_arrow:
+03960: col_source_t.col_source_dt64ns_tz_arrow,
case __pyx_e_7questdb_7_client_col_source_dt64us_tz_arrow:
+03961: col_source_t.col_source_dt64us_tz_arrow,
case __pyx_e_7questdb_7_client_col_source_dt64ms_tz_arrow:
+03962: col_source_t.col_source_dt64ms_tz_arrow,
case __pyx_e_7questdb_7_client_col_source_dt64s_tz_arrow:
03963: col_source_t.col_source_dt64s_tz_arrow):
+03964: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_NumPy_datetime6_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3964, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3964, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
03965: df,
03966: col,
03967: 'v1 only supports NumPy datetime64[ns/us] or '
03968: 'tz-aware datetime64/timestamp[pyarrow] '
03969: 'designated timestamp columns.'))
+03970: elif (col.setup.source in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_dt64ns_tz_arrow:
/* … */
__pyx_t_2 = 1;
break;
default:
__pyx_t_2 = 0;
break;
}
__pyx_t_8 = __pyx_t_2;
if (__pyx_t_8) {
} else {
__pyx_t_3 = __pyx_t_8;
goto __pyx_L32_bool_binop_done;
}
/* … */
if (__pyx_t_3) {
/* … */
goto __pyx_L31;
}
+03971: col_source_t.col_source_dt64ns_tz_arrow,
case __pyx_e_7questdb_7_client_col_source_dt64us_tz_arrow:
+03972: col_source_t.col_source_dt64us_tz_arrow,
case __pyx_e_7questdb_7_client_col_source_dt64ms_tz_arrow:
+03973: col_source_t.col_source_dt64ms_tz_arrow,
case __pyx_e_7questdb_7_client_col_source_dt64s_tz_arrow:
03974: col_source_t.col_source_dt64s_tz_arrow)
+03975: and col.setup.chunks.chunks[0].null_count != 0):
__pyx_t_8 = ((__pyx_v_col->setup->chunks.chunks[0]).null_count != 0);
__pyx_t_3 = __pyx_t_8;
__pyx_L32_bool_binop_done:;
+03976: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_designated_timestamp_columns); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3976, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3976, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
03977: df,
03978: col,
03979: 'v1 designated timestamp columns cannot contain nulls.'))
03980: else:
+03981: ts_data = <const int64_t*>col.setup.chunks.chunks[0].buffers[1]
/*else*/ {
__pyx_v_ts_data = ((int64_t const *)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
+03982: if _dataframe_columnar_i64_has_nat(ts_data, plan.row_count):
__pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_columnar_i64_has_nat(__pyx_v_ts_data, __pyx_v_plan->row_count);
if (__pyx_t_3) {
/* … */
goto __pyx_L34;
}
+03983: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_designated_timestamp_columns_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3983, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3983, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
03984: df,
03985: col,
03986: 'v1 designated timestamp columns cannot contain NaT.'))
+03987: elif _dataframe_columnar_i64_has_negative(
__pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_columnar_i64_has_negative(__pyx_v_ts_data, __pyx_v_plan->row_count);
if (__pyx_t_3) {
/* … */
}
__pyx_L34:;
}
__pyx_L31:;
03988: ts_data, plan.row_count):
+03989: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_designated_timestamp_columns_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3989, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3989, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
03990: df,
03991: col,
03992: 'v1 designated timestamp columns cannot contain '
03993: 'timestamps before the Unix epoch.'))
+03994: elif col.setup.target == col_target_t.col_target_column_decimal:
break;
case __pyx_e_7questdb_7_client_col_target_column_i8:
+03995: if col.setup.source == col_source_t.col_source_decimal_pyobj:
__pyx_t_3 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_decimal_pyobj);
if (__pyx_t_3) {
/* … */
goto __pyx_L35;
}
03996: # _dataframe_columnar_promote_cols re-exports these through
03997: # Arrow; reaching this branch means pyarrow is unavailable.
+03998: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_object_dtype_Decimal_columns_req); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3998, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3998, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
03999: df,
04000: col,
04001: 'object-dtype Decimal columns require pyarrow on the '
04002: 'columnar path; install pyarrow, or back the column '
04003: 'with an Arrow decimal type.'))
+04004: elif col.setup.source not in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_decimal32_arrow:
/* … */
__pyx_t_3 = 0;
break;
default:
__pyx_t_3 = 1;
break;
}
__pyx_t_8 = __pyx_t_3;
if (__pyx_t_8) {
/* … */
}
__pyx_L35:;
+04005: col_source_t.col_source_decimal32_arrow,
case __pyx_e_7questdb_7_client_col_source_decimal64_arrow:
+04006: col_source_t.col_source_decimal64_arrow,
case __pyx_e_7questdb_7_client_col_source_decimal128_arrow:
+04007: col_source_t.col_source_decimal128_arrow,
case __pyx_e_7questdb_7_client_col_source_decimal256_arrow:
04008: col_source_t.col_source_decimal256_arrow):
+04009: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_Arrow_backed_de); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4009, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4009, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04010: df,
04011: col,
04012: 'v1 only supports Arrow-backed decimal columns '
04013: '(pyarrow decimal32/64/128/256).'))
+04014: elif col.setup.target in (
break;
default:
+04015: col_target_t.col_target_column_i8,
case __pyx_e_7questdb_7_client_col_target_column_i16:
+04016: col_target_t.col_target_column_i16,
case __pyx_e_7questdb_7_client_col_target_column_i32:
+04017: col_target_t.col_target_column_i32,
case __pyx_e_7questdb_7_client_col_target_column_f32:
+04018: col_target_t.col_target_column_f32,
case __pyx_e_7questdb_7_client_col_target_column_uuid:
+04019: col_target_t.col_target_column_uuid,
case __pyx_e_7questdb_7_client_col_target_column_ipv4:
+04020: col_target_t.col_target_column_ipv4,
case __pyx_e_7questdb_7_client_col_target_column_binary:
+04021: col_target_t.col_target_column_binary,
case __pyx_e_7questdb_7_client_col_target_column_arrow:
04022: col_target_t.col_target_column_arrow):
04023: # Column-QWP-only targets reached via `_FIELD_TARGETS_QWP`.
04024: # Routing has already held each one's source to its set in
04025: # `_TARGET_TO_SOURCES`, and the append handles every member
04026: # of that set. The contiguous-buffer +
04027: # validity checks above cover layout; the per-type FFI
04028: # handles the wire encoding. col_target_column_arrow delegates
04029: # type validation to the Rust importer.
04030: pass
04031: else:
+04032: failures.append(_dataframe_columnar_col_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, ((PyObject*)__pyx_t_9)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4032, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4032, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; break; } __pyx_L11_continue:; }
04033: df,
04034: col,
+04035: f'v1 does not support {_TARGET_NAMES[col.setup.target]} '
if (unlikely(__pyx_v_7questdb_7_client__TARGET_NAMES == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
__PYX_ERR(0, 4035, __pyx_L1_error)
}
__pyx_t_1 = __Pyx_PyLong_From_enum____pyx_t_7questdb_7_client_col_target_t(__pyx_v_col->setup->target); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4035, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_9 = __Pyx_PyDict_GetItem(__pyx_v_7questdb_7_client__TARGET_NAMES, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4035, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_t_9, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4035, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__pyx_t_10[0] = __pyx_mstate_global->__pyx_kp_u_v1_does_not_support;
__pyx_t_10[1] = __pyx_t_1;
__pyx_t_10[2] = __pyx_mstate_global->__pyx_kp_u_columns_3;
__pyx_t_11 = 29;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10[1]);
#endif
__pyx_t_12 = 0;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_12 |= __Pyx_PyUnicode_KIND_04(__pyx_t_10[1]);
#endif
__pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_10, 3, __pyx_t_11, __pyx_t_12);
if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4035, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04036: 'columns.'))
04037:
+04038: if field_count == 0:
__pyx_t_8 = (__pyx_v_field_count == 0);
if (__pyx_t_8) {
/* … */
}
+04039: failures.append(_dataframe_columnar_global_failure(
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_global_failure(__pyx_mstate_global->__pyx_kp_u_v1_requires_at_least_one_non_tim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4039, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4039, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
04040: 'v1 requires at least one non-timestamp data column.'))
04041:
+04042: return failures
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_failures);
__pyx_r = __pyx_v_failures;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
04043:
04044:
+04045: cdef void_int _dataframe_columnar_validate_plan(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_validate_plan(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan) {
PyObject *__pyx_v_failures = 0;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_validate_plan", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_failures);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
04046: object df,
04047: dataframe_plan_t* plan) except -1:
+04048: cdef object failures = _dataframe_columnar_plan_failures(df, plan)
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_plan_failures(__pyx_v_df, __pyx_v_plan); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4048, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_failures = __pyx_t_1; __pyx_t_1 = 0;
+04049: if failures:
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_failures); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 4049, __pyx_L1_error) if (unlikely(__pyx_t_2)) { /* … */ }
+04050: raise UnsupportedDataFrameShapeError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4050, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
04051: 'DataFrame is not supported by QuestDB.dataframe() columnar v1.',
+04052: failures)
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_DataFrame_is_not_supported_by_Qu, __pyx_v_failures};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4050, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 4050, __pyx_L1_error)
04053:
04054:
+04055: cdef object _dataframe_columnar_ndarray_col_to_arrow(object df, col_t* col):
static PyObject *__pyx_f_7questdb_7_client__dataframe_columnar_ndarray_col_to_arrow(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col) {
PyObject *__pyx_v_series = 0;
PyObject *__pyx_v_cell = 0;
PyArrayObject *__pyx_v_arr;
int __pyx_v_nested;
PyObject *__pyx_v_col_name = 0;
PyObject *__pyx_9genexpr16__pyx_v_cell = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_ndarray_col_to_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_series);
__Pyx_XDECREF(__pyx_v_cell);
__Pyx_XDECREF(__pyx_v_col_name);
__Pyx_XDECREF(__pyx_9genexpr16__pyx_v_cell);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+04056: cdef object series = df.iloc[:, col.setup.orig_index]
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4056, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_v_col->setup->orig_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4056, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4056, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 4056, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2) != (0)) __PYX_ERR(0, 4056, __pyx_L1_error); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4056, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_series = __pyx_t_2; __pyx_t_2 = 0;
04057: cdef object cell
04058: cdef PyArrayObject* arr
+04059: cdef bint nested = False
__pyx_v_nested = 0;
+04060: cdef object col_name = df.columns[col.setup.orig_index]
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4060, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_2, __pyx_v_col->setup->orig_index, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4060, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_col_name = __pyx_t_3; __pyx_t_3 = 0;
+04061: for cell in series:
if (likely(PyList_CheckExact(__pyx_v_series)) || PyTuple_CheckExact(__pyx_v_series)) { __pyx_t_3 = __pyx_v_series; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_series); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4061, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4061, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_5)) { if (likely(PyList_CheckExact(__pyx_t_3))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 4061, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } __pyx_t_2 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_3, __pyx_t_4, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_4; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 4061, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_2 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4)); #else __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4); #endif ++__pyx_t_4; } if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4061, __pyx_L1_error) } else { __pyx_t_2 = __pyx_t_5(__pyx_t_3); if (unlikely(!__pyx_t_2)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 4061, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_2); __Pyx_XDECREF_SET(__pyx_v_cell, __pyx_t_2); __pyx_t_2 = 0; /* … */ __pyx_L3_continue:; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+04062: if _dataframe_is_null_pyobj(<PyObject*>cell):
__pyx_t_6 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(((PyObject *)__pyx_v_cell));
if (__pyx_t_6) {
/* … */
}
+04063: continue
goto __pyx_L3_continue;
+04064: if not PyArray_CheckExact(<PyObject*>cell):
__pyx_t_6 = (!PyArray_CheckExact(((PyObject *)__pyx_v_cell)));
if (unlikely(__pyx_t_6)) {
/* … */
}
+04065: raise QuestDBError(
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4065, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
+04066: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4066, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4066, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+04067: f'Bad column {col_name!r}: mixed object cells; expected '
__pyx_t_8 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4067, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); /* … */ __pyx_t_13 = 88; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12[3]); #endif __pyx_t_14 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_14 |= __Pyx_PyUnicode_KIND_04(__pyx_t_12[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_12[3]); #endif __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_12, 5, __pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4067, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_15 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_15 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_9, __pyx_t_10}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_15, (3-__pyx_t_15) | (__pyx_t_15*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4065, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 4065, __pyx_L1_error)
04068: f'every non-null cell to be a numpy array, got '
+04069: f'{_fqn(type(cell))}.')
__pyx_t_10 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_cell)))); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4069, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = __Pyx_PyUnicode_Unicode(__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4069, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_12[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_12[1] = __pyx_t_8; __pyx_t_12[2] = __pyx_mstate_global->__pyx_kp_u_mixed_object_cells_expected_eve; __pyx_t_12[3] = __pyx_t_11; __pyx_t_12[4] = __pyx_mstate_global->__pyx_kp_u__3;
+04070: arr = <PyArrayObject*>cell
__pyx_v_arr = ((PyArrayObject *)__pyx_v_cell);
+04071: if PyArray_TYPE(arr) != NPY_DOUBLE:
__pyx_t_6 = (PyArray_TYPE(__pyx_v_arr) != NPY_DOUBLE);
if (unlikely(__pyx_t_6)) {
/* … */
}
+04072: raise QuestDBError(
__pyx_t_7 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4072, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
+04073: QuestDBErrorCode.ArrayError,
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4073, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_ArrayError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4073, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+04074: f'Bad column {col_name!r}: Only float64 numpy arrays are '
__pyx_t_9 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4074, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); /* … */ __pyx_t_13 = 65; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16[3]); #endif __pyx_t_14 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_14 |= __Pyx_PyUnicode_KIND_04(__pyx_t_16[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_16[3]); #endif __pyx_t_11 = __Pyx_PyUnicode_Join(__pyx_t_16, 4, __pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4074, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_15 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_10))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_10); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_10); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_10, __pyx__function); __pyx_t_15 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_1, __pyx_t_11}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_10, __pyx_callargs+__pyx_t_15, (3-__pyx_t_15) | (__pyx_t_15*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4072, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 4072, __pyx_L1_error)
+04075: f'supported, got dtype: {cell.dtype}')
__pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_cell, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4075, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_8 = __Pyx_PyObject_FormatSimple(__pyx_t_11, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4075, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_16[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_16[1] = __pyx_t_9; __pyx_t_16[2] = __pyx_mstate_global->__pyx_kp_u_Only_float64_numpy_arrays_are_s; __pyx_t_16[3] = __pyx_t_8;
+04076: if PyArray_NDIM(arr) > 1:
__pyx_t_6 = (PyArray_NDIM(__pyx_v_arr) > 1);
if (__pyx_t_6) {
/* … */
}
+04077: nested = True
__pyx_v_nested = 1;
+04078: if not nested:
__pyx_t_6 = (!__pyx_v_nested);
if (__pyx_t_6) {
/* … */
}
+04079: return _PYARROW.Array.from_pandas(series)
__pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Array); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4079, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_2 = __pyx_t_10; __Pyx_INCREF(__pyx_t_2); __pyx_t_15 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_series}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_pandas, __pyx_callargs+__pyx_t_15, (2-__pyx_t_15) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4079, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
04080: # pyarrow cannot convert multi-dimensional ndarray cells directly
04081: # ("Can only convert 1-dimensional array values"); nested python
04082: # lists infer to the equivalent nested list<...<double>>.
+04083: return _PYARROW.array([
__pyx_t_10 = __pyx_v_7questdb_7_client__PYARROW; __Pyx_INCREF(__pyx_t_10); { /* enter inner scope */ __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4083, __pyx_L13_error) __Pyx_GOTREF(__pyx_t_2);
+04084: None if _dataframe_is_null_pyobj(<PyObject*>cell) else cell.tolist()
__pyx_t_6 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(((PyObject *)__pyx_9genexpr16__pyx_v_cell));
if (__pyx_t_6) {
__Pyx_INCREF(Py_None);
__pyx_t_1 = Py_None;
} else {
__pyx_t_8 = __pyx_9genexpr16__pyx_v_cell;
__Pyx_INCREF(__pyx_t_8);
__pyx_t_15 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL};
__pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_tolist, __pyx_callargs+__pyx_t_15, (1-__pyx_t_15) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4084, __pyx_L13_error)
__Pyx_GOTREF(__pyx_t_7);
}
__pyx_t_1 = __pyx_t_7;
__pyx_t_7 = 0;
}
__Pyx_GIVEREF(__pyx_t_1);
if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_t_2, __pyx_t_1))) __PYX_ERR(0, 4083, __pyx_L13_error)
__pyx_t_1 = 0;
+04085: for cell in series])
if (likely(PyList_CheckExact(__pyx_v_series)) || PyTuple_CheckExact(__pyx_v_series)) { __pyx_t_11 = __pyx_v_series; __Pyx_INCREF(__pyx_t_11); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_11 = PyObject_GetIter(__pyx_v_series); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4085, __pyx_L13_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_11); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4085, __pyx_L13_error) } for (;;) { if (likely(!__pyx_t_5)) { if (likely(PyList_CheckExact(__pyx_t_11))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_11); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 4085, __pyx_L13_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } __pyx_t_1 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_11, __pyx_t_4, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_4; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_11); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 4085, __pyx_L13_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_11, __pyx_t_4)); #else __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_11, __pyx_t_4); #endif ++__pyx_t_4; } if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4085, __pyx_L13_error) } else { __pyx_t_1 = __pyx_t_5(__pyx_t_11); if (unlikely(!__pyx_t_1)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 4085, __pyx_L13_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_9genexpr16__pyx_v_cell, __pyx_t_1); __pyx_t_1 = 0; /* … */ } __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_XDECREF(__pyx_9genexpr16__pyx_v_cell); __pyx_9genexpr16__pyx_v_cell = 0; goto __pyx_L17_exit_scope; __pyx_L13_error:; __Pyx_XDECREF(__pyx_9genexpr16__pyx_v_cell); __pyx_9genexpr16__pyx_v_cell = 0; goto __pyx_L1_error; __pyx_L17_exit_scope:; } /* exit inner scope */ __pyx_t_15 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_t_2}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_array, __pyx_callargs+__pyx_t_15, (2-__pyx_t_15) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4083, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
04086:
04087:
+04088: cdef object _dataframe_columnar_col_from_pandas(object df, col_t* col):
static PyObject *__pyx_f_7questdb_7_client__dataframe_columnar_col_from_pandas(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col) {
PyObject *__pyx_v_e = NULL;
PyObject *__pyx_v_col_name = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_col_from_pandas", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_e);
__Pyx_XDECREF(__pyx_v_col_name);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
04089: # Re-export a pandas column as a pyarrow Array: pyarrow infers the
04090: # Arrow type (decimal width/scale, timestamp unit, ...) and carries a
04091: # validity bitmap for nulls, which the Rust Arrow importer then encodes.
+04092: try:
{
/*try:*/ {
/* … */
}
__pyx_L3_error:;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L5_except_error:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L1_error;
__pyx_L7_try_return:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L0;
}
+04093: return _PYARROW.Array.from_pandas(df.iloc[:, col.setup.orig_index])
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Array); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4093, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __pyx_t_6; __Pyx_INCREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4093, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyLong_FromSize_t(__pyx_v_col->setup->orig_index); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4093, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4093, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 4093, __pyx_L3_error); __Pyx_GIVEREF(__pyx_t_8); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_8) != (0)) __PYX_ERR(0, 4093, __pyx_L3_error); __pyx_t_8 = 0; __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4093, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_10 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_8}; __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_pandas, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4093, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_4); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_4; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_4 = 0; goto __pyx_L7_try_return;
+04094: except (TypeError, ValueError) as e:
__pyx_t_11 = __Pyx_PyErr_ExceptionMatches2(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), ((PyObject *)(((PyTypeObject*)PyExc_ValueError))));
if (__pyx_t_11) {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_col_from_pandas", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_8) < 0) __PYX_ERR(0, 4094, __pyx_L5_except_error)
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_INCREF(__pyx_t_6);
__pyx_v_e = __pyx_t_6;
/*try:*/ {
/* … */
/*finally:*/ {
__pyx_L14_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_ExceptionSwap(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25);
if ( unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
__Pyx_XGOTREF(__pyx_t_20);
__Pyx_XGOTREF(__pyx_t_21);
__Pyx_XGOTREF(__pyx_t_22);
__Pyx_XGOTREF(__pyx_t_23);
__Pyx_XGOTREF(__pyx_t_24);
__Pyx_XGOTREF(__pyx_t_25);
__pyx_t_11 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
{
__Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
}
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_XGIVEREF(__pyx_t_24);
__Pyx_XGIVEREF(__pyx_t_25);
__Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25);
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_XGIVEREF(__pyx_t_21);
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_ErrRestore(__pyx_t_20, __pyx_t_21, __pyx_t_22);
__pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0;
__pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19;
goto __pyx_L5_except_error;
}
}
}
goto __pyx_L5_except_error;
+04095: col_name = df.columns[col.setup.orig_index]
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4095, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_5, __pyx_v_col->setup->orig_index, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4095, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_col_name = __pyx_t_9; __pyx_t_9 = 0;
+04096: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4096, __pyx_L14_error)
__Pyx_GOTREF(__pyx_t_7);
+04097: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4097, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4097, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+04098: f'Bad column {col_name!r}: {e}') from e
__pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4098, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_v_e, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4098, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_15[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_15[1] = __pyx_t_12; __pyx_t_15[2] = __pyx_mstate_global->__pyx_kp_u__2; __pyx_t_15[3] = __pyx_t_14; __pyx_t_16 = 13; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_16 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15[3]); #endif __pyx_t_11 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_11 |= __Pyx_PyUnicode_KIND_04(__pyx_t_15[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_15[3]); #endif __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_15, 4, __pyx_t_16, __pyx_t_11); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4098, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_13, __pyx_t_17}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4096, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_9); } __Pyx_Raise(__pyx_t_9, 0, 0, __pyx_v_e); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __PYX_ERR(0, 4096, __pyx_L14_error) }
04099:
04100:
+04101: cdef void_int _dataframe_columnar_promote_cols(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_promote_cols(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan) {
size_t __pyx_v_col_index;
struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col;
struct ArrowArray *__pyx_v_chunk;
PyObject *__pyx_v_arrow_array = 0;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_promote_cols", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_arrow_array);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
04102: object df,
04103: dataframe_plan_t* plan) except -1:
04104: # Some column shapes have no contiguous native buffer the columnar wire
04105: # can emit directly. Re-export each as an Arrow array and let the Rust
04106: # Arrow importer classify it — the same route the all-Arrow capsule path
04107: # takes:
04108: # - object-dtype numpy-array cells -> list<double> (ARRAY(DOUBLE));
04109: # - object-dtype Decimal -> DECIMAL (width/scale inferred);
04110: # - datetime64[ns] timestamp fields carrying NaT, whose INT64_MIN null
04111: # sentinel the zero-copy ns->us path would corrupt into a 1677 value.
04112: cdef size_t col_index
04113: cdef col_t* col
04114: cdef ArrowArray* chunk
04115: cdef object arrow_array
+04116: for col_index in range(plan.col_count):
__pyx_t_1 = __pyx_v_plan->col_count;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_col_index = __pyx_t_3;
+04117: col = &plan.cols.d[col_index]
__pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_col_index]));
+04118: if col.setup.source == col_source_t.col_source_arr_f64_numpyobj:
__pyx_t_4 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_arr_f64_numpyobj);
if (__pyx_t_4) {
/* … */
goto __pyx_L5;
}
+04119: _dataframe_require_pyarrow()
__pyx_t_5 = __pyx_f_7questdb_7_client__dataframe_require_pyarrow(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4119, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+04120: arrow_array = _dataframe_columnar_ndarray_col_to_arrow(df, col)
__pyx_t_5 = __pyx_f_7questdb_7_client__dataframe_columnar_ndarray_col_to_arrow(__pyx_v_df, __pyx_v_col); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_XDECREF_SET(__pyx_v_arrow_array, __pyx_t_5); __pyx_t_5 = 0;
+04121: elif col.setup.source == col_source_t.col_source_decimal_pyobj:
__pyx_t_4 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_decimal_pyobj);
if (__pyx_t_4) {
/* … */
goto __pyx_L5;
}
+04122: if not _dataframe_try_import_pyarrow():
__pyx_t_4 = __pyx_f_7questdb_7_client__dataframe_try_import_pyarrow(); if (unlikely(__pyx_t_4 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4122, __pyx_L1_error) __pyx_t_6 = (!__pyx_t_4); if (__pyx_t_6) { /* … */ }
+04123: continue
goto __pyx_L3_continue;
+04124: arrow_array = _dataframe_columnar_col_from_pandas(df, col)
__pyx_t_5 = __pyx_f_7questdb_7_client__dataframe_columnar_col_from_pandas(__pyx_v_df, __pyx_v_col); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4124, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_XDECREF_SET(__pyx_v_arrow_array, __pyx_t_5); __pyx_t_5 = 0;
+04125: elif (col.setup.target == col_target_t.col_target_column_ts
__pyx_t_4 = (__pyx_v_col->setup->target == __pyx_e_7questdb_7_client_col_target_column_ts);
if (__pyx_t_4) {
} else {
__pyx_t_6 = __pyx_t_4;
goto __pyx_L7_bool_binop_done;
}
/* … */
if (__pyx_t_6) {
/* … */
goto __pyx_L5;
}
+04126: and col.setup.source == col_source_t.col_source_dt64ns_numpy
__pyx_t_4 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_dt64ns_numpy);
if (__pyx_t_4) {
} else {
__pyx_t_6 = __pyx_t_4;
goto __pyx_L7_bool_binop_done;
}
+04127: and _dataframe_columnar_has_single_contiguous_chunk(
__pyx_t_4 = __pyx_f_7questdb_7_client__dataframe_columnar_has_single_contiguous_chunk(__pyx_v_col, __pyx_v_plan->row_count);
if (__pyx_t_4) {
} else {
__pyx_t_6 = __pyx_t_4;
goto __pyx_L7_bool_binop_done;
}
04128: col, plan.row_count)
+04129: and _dataframe_columnar_col_has_nat(col, plan.row_count)):
__pyx_t_4 = __pyx_f_7questdb_7_client__dataframe_columnar_col_has_nat(__pyx_v_col, __pyx_v_plan->row_count);
__pyx_t_6 = __pyx_t_4;
__pyx_L7_bool_binop_done:;
+04130: if not _dataframe_try_import_pyarrow():
__pyx_t_6 = __pyx_f_7questdb_7_client__dataframe_try_import_pyarrow(); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4130, __pyx_L1_error) __pyx_t_4 = (!__pyx_t_6); if (__pyx_t_4) { /* … */ }
+04131: continue
goto __pyx_L3_continue;
+04132: arrow_array = _dataframe_columnar_col_from_pandas(df, col)
__pyx_t_5 = __pyx_f_7questdb_7_client__dataframe_columnar_col_from_pandas(__pyx_v_df, __pyx_v_col); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4132, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_XDECREF_SET(__pyx_v_arrow_array, __pyx_t_5); __pyx_t_5 = 0;
04133: else:
+04134: continue
/*else*/ {
goto __pyx_L3_continue;
}
__pyx_L5:;
+04135: chunk = &col.setup.chunks.chunks[0]
__pyx_v_chunk = (&(__pyx_v_col->setup->chunks.chunks[0]));
+04136: if chunk.release != NULL:
__pyx_t_4 = (__pyx_v_chunk->release != NULL);
if (__pyx_t_4) {
/* … */
}
+04137: chunk.release(chunk)
__pyx_v_chunk->release(__pyx_v_chunk);
+04138: memset(chunk, 0, sizeof(ArrowArray))
(void)(memset(__pyx_v_chunk, 0, (sizeof(struct ArrowArray))));
+04139: if col.setup.arrow_schema.release != NULL:
__pyx_t_4 = (__pyx_v_col->setup->arrow_schema.release != NULL);
if (__pyx_t_4) {
/* … */
}
+04140: col.setup.arrow_schema.release(&col.setup.arrow_schema)
__pyx_v_col->setup->arrow_schema.release((&__pyx_v_col->setup->arrow_schema));
+04141: arrow_array._export_to_c(
__pyx_t_7 = __pyx_v_arrow_array;
__Pyx_INCREF(__pyx_t_7);
+04142: <uintptr_t>chunk, <uintptr_t>&col.setup.arrow_schema)
__pyx_t_8 = __Pyx_PyLong_FromSize_t(((uintptr_t)__pyx_v_chunk)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4142, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyLong_FromSize_t(((uintptr_t)(&__pyx_v_col->setup->arrow_schema))); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4142, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = 0; { PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_8, __pyx_t_9}; __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_export_to_c, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4141, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+04143: col.setup.source = col_source_t.col_source_arrow_passthrough
__pyx_v_col->setup->source = __pyx_e_7questdb_7_client_col_source_arrow_passthrough;
+04144: col.setup.target = col_target_t.col_target_column_arrow
__pyx_v_col->setup->target = __pyx_e_7questdb_7_client_col_target_column_arrow;
__pyx_L3_continue:;
}
04145:
04146:
+04147: cdef bint _is_pyobj_source(col_source_t source) noexcept nogil:
static int __pyx_f_7questdb_7_client__is_pyobj_source(enum __pyx_t_7questdb_7_client_col_source_t __pyx_v_source) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
04148: return (
+04149: source == col_source_t.col_source_str_pyobj or
switch (__pyx_v_source) {
case __pyx_e_7questdb_7_client_col_source_str_pyobj:
case __pyx_e_7questdb_7_client_col_source_int_pyobj:
/* … */
__pyx_t_1 = 1;
break;
default:
__pyx_t_1 = 0;
break;
}
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
+04150: source == col_source_t.col_source_int_pyobj or
case __pyx_e_7questdb_7_client_col_source_float_pyobj:
+04151: source == col_source_t.col_source_float_pyobj or
case __pyx_e_7questdb_7_client_col_source_bool_pyobj:
+04152: source == col_source_t.col_source_bool_pyobj or
case __pyx_e_7questdb_7_client_col_source_uuid_pyobj:
+04153: source == col_source_t.col_source_uuid_pyobj or
case __pyx_e_7questdb_7_client_col_source_ipv4_pyobj:
+04154: source == col_source_t.col_source_ipv4_pyobj or
case __pyx_e_7questdb_7_client_col_source_datetime_pyobj:
+04155: source == col_source_t.col_source_datetime_pyobj or
case __pyx_e_7questdb_7_client_col_source_bytes_pyobj:
04156: source == col_source_t.col_source_bytes_pyobj)
04157:
04158:
+04159: cdef inline void _pyobj_set_validity_bit(uint8_t* bitmap, size_t row) noexcept nogil:
static CYTHON_INLINE void __pyx_f_7questdb_7_client__pyobj_set_validity_bit(uint8_t *__pyx_v_bitmap, size_t __pyx_v_row) {
/* … */
/* function exit code */
}
+04160: bitmap[row >> 3] |= <uint8_t>(1 << (row & 7))
__pyx_t_1 = (__pyx_v_row >> 3); (__pyx_v_bitmap[__pyx_t_1]) = ((__pyx_v_bitmap[__pyx_t_1]) | ((uint8_t)(1 << (__pyx_v_row & 7))));
04161:
04162:
+04163: cdef pyobj_built_t* _dataframe_columnar_build_str_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_str_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
PyObject **__pyx_v_access;
PyObject *__pyx_v_cell;
PyObject *__pyx_v_cell_ref = 0;
size_t __pyx_v_i;
Py_ssize_t __pyx_v_utf8_len;
char const *__pyx_v_utf8_buf;
size_t __pyx_v_validity_bytes;
size_t __pyx_v_bytes_cap;
uint8_t *__pyx_v_new_bytes;
size_t __pyx_v_bytes_used;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_XDECREF(__pyx_t_19);
__Pyx_XDECREF(__pyx_t_20);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_str_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_cell_ref);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
04164: col_t* col,
04165: size_t row_count,
04166: object df_col_name) except NULL:
04167: """
04168: Walk a PyObject column once and produce Arrow-Utf8-shaped buffers
04169: (int32 offsets + uint8 bytes + LSB-packed validity). Encoding uses
04170: CPython's `PyUnicode_AsUTF8AndSize`, which rejects lone surrogates,
04171: so every emitted buffer is valid UTF-8.
04172: """
+04173: cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
__pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+04174: if b == NULL:
__pyx_t_1 = (__pyx_v_b == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04175: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4175, __pyx_L1_error)
+04176: b.row_count = row_count
__pyx_v_b->row_count = __pyx_v_row_count;
04177:
+04178: cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
__pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
04179: cdef PyObject* cell
04180: # Owns the cell for as long as `cell` points at it. Code the cell
04181: # runs while it is read, such as a `__class__` lookup inside
04182: # `isinstance` or a property, can replace it in the frame's array
04183: # and so drop the array's reference to it.
04184: cdef object cell_ref
04185: cdef size_t i
04186: cdef Py_ssize_t utf8_len
04187: cdef const char* utf8_buf
+04188: cdef size_t validity_bytes = (row_count + 7) // 8
__pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
+04189: cdef size_t bytes_cap = 16
__pyx_v_bytes_cap = 16;
04190: cdef uint8_t* new_bytes
+04191: cdef size_t bytes_used = 0
__pyx_v_bytes_used = 0;
04192:
+04193: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L9_try_end:;
}
+04194: b.str_offsets = <int32_t*>calloc(row_count + 1, sizeof(int32_t))
__pyx_v_b->str_offsets = ((int32_t *)calloc((__pyx_v_row_count + 1), (sizeof(int32_t))));
+04195: if b.str_offsets == NULL:
__pyx_t_1 = (__pyx_v_b->str_offsets == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04196: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4196, __pyx_L4_error)
+04197: if validity_bytes > 0:
__pyx_t_1 = (__pyx_v_validity_bytes > 0);
if (__pyx_t_1) {
/* … */
}
+04198: b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
__pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04199: if b.validity == NULL:
__pyx_t_1 = (__pyx_v_b->validity == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04200: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4200, __pyx_L4_error)
+04201: b.str_bytes = <uint8_t*>malloc(bytes_cap)
__pyx_v_b->str_bytes = ((uint8_t *)malloc(__pyx_v_bytes_cap));
+04202: if b.str_bytes == NULL:
__pyx_t_1 = (__pyx_v_b->str_bytes == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04203: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4203, __pyx_L4_error)
04204:
+04205: for i in range(row_count):
__pyx_t_5 = __pyx_v_row_count;
__pyx_t_6 = __pyx_t_5;
for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
__pyx_v_i = __pyx_t_7;
+04206: cell_ref = <object>access[i]
__pyx_t_8 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
__Pyx_INCREF(__pyx_t_8);
__Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_8);
__pyx_t_8 = 0;
+04207: cell = <PyObject*>cell_ref
__pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+04208: if PyUnicode_CheckExact(cell):
__pyx_t_1 = PyUnicode_CheckExact(__pyx_v_cell);
if (__pyx_t_1) {
/* … */
goto __pyx_L16;
}
+04209: utf8_buf = PyUnicode_AsUTF8AndSize(cell, &utf8_len)
__pyx_t_9 = PyUnicode_AsUTF8AndSize(__pyx_v_cell, (&__pyx_v_utf8_len)); if (unlikely(__pyx_t_9 == ((void *)NULL))) __PYX_ERR(0, 4209, __pyx_L4_error)
__pyx_v_utf8_buf = __pyx_t_9;
+04210: if bytes_used + <size_t>utf8_len > <size_t>2_147_483_647:
__pyx_t_1 = ((__pyx_v_bytes_used + ((size_t)__pyx_v_utf8_len)) > ((size_t)0x7FFFFFFF));
if (unlikely(__pyx_t_1)) {
/* … */
}
+04211: raise QuestDBError(
__pyx_t_10 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4211, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_11);
+04212: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4212, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4212, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+04213: f'Bad column {df_col_name!r}: column total UTF-8 '
__pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4213, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_14[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_14[1] = __pyx_t_12; __pyx_t_14[2] = __pyx_mstate_global->__pyx_kp_u_column_total_UTF_8_bytes_exceed; __pyx_t_15 = 94; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14[1]); #endif __pyx_t_16 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_16 |= __Pyx_PyUnicode_KIND_04(__pyx_t_14[1]); #endif __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_14, 3, __pyx_t_15, __pyx_t_16); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4213, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_18 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_11))) { __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11); assert(__pyx_t_10); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11); __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_11, __pyx__function); __pyx_t_18 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_10, __pyx_t_13, __pyx_t_17}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_18, (3-__pyx_t_18) | (__pyx_t_18*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4211, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 4211, __pyx_L4_error)
04214: 'bytes exceeds the QWP wire varchar offset table '
04215: 'limit (2 GiB).')
+04216: while bytes_used + <size_t>utf8_len > bytes_cap:
while (1) {
__pyx_t_1 = ((__pyx_v_bytes_used + ((size_t)__pyx_v_utf8_len)) > __pyx_v_bytes_cap);
if (!__pyx_t_1) break;
+04217: bytes_cap *= 2
__pyx_v_bytes_cap = (__pyx_v_bytes_cap * 2);
+04218: new_bytes = <uint8_t*>realloc(b.str_bytes, bytes_cap)
__pyx_v_new_bytes = ((uint8_t *)realloc(__pyx_v_b->str_bytes, __pyx_v_bytes_cap));
+04219: if new_bytes == NULL:
__pyx_t_1 = (__pyx_v_new_bytes == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04220: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4220, __pyx_L4_error)
+04221: b.str_bytes = new_bytes
__pyx_v_b->str_bytes = __pyx_v_new_bytes;
}
+04222: if utf8_len > 0:
__pyx_t_1 = (__pyx_v_utf8_len > 0);
if (__pyx_t_1) {
/* … */
}
+04223: memcpy(b.str_bytes + bytes_used, utf8_buf, <size_t>utf8_len)
(void)(memcpy((__pyx_v_b->str_bytes + __pyx_v_bytes_used), __pyx_v_utf8_buf, ((size_t)__pyx_v_utf8_len)));
+04224: bytes_used += <size_t>utf8_len
__pyx_v_bytes_used = (__pyx_v_bytes_used + ((size_t)__pyx_v_utf8_len));
+04225: b.str_offsets[i + 1] = <int32_t>bytes_used
(__pyx_v_b->str_offsets[(__pyx_v_i + 1)]) = ((int32_t)__pyx_v_bytes_used);
+04226: if b.validity != NULL:
__pyx_t_1 = (__pyx_v_b->validity != NULL);
if (__pyx_t_1) {
/* … */
}
+04227: _pyobj_set_validity_bit(b.validity, i)
__pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+04228: elif _dataframe_is_null_pyobj(cell):
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L16;
}
+04229: b.str_offsets[i + 1] = <int32_t>bytes_used
(__pyx_v_b->str_offsets[(__pyx_v_i + 1)]) = ((int32_t)__pyx_v_bytes_used);
+04230: b.has_nulls = True
__pyx_v_b->has_nulls = 1;
04231: else:
+04232: raise QuestDBError(
/*else*/ {
__pyx_t_11 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4232, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_17);
+04233: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4233, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4233, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+04234: f'Bad column {df_col_name!r} at row {i}: expected str, '
__pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4234, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_12 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4234, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); /* … */ __pyx_t_15 = 40; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_15 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_21[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_21[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_21[5]); #endif __pyx_t_16 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_16 |= __Pyx_PyUnicode_KIND_04(__pyx_t_21[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_21[5]); #endif __pyx_t_19 = __Pyx_PyUnicode_Join(__pyx_t_21, 7, __pyx_t_15, __pyx_t_16); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4234, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __pyx_t_18 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_17))) { __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_17); assert(__pyx_t_11); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_17); __Pyx_INCREF(__pyx_t_11); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_17, __pyx__function); __pyx_t_18 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_t_10, __pyx_t_19}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_18, (3-__pyx_t_18) | (__pyx_t_18*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4232, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 4232, __pyx_L4_error) } __pyx_L16:; }
+04235: f'got {_fqn(type(<object>cell))}.')
__pyx_t_19 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4235, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_20 = __Pyx_PyUnicode_Unicode(__pyx_t_19); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 4235, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_20); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __pyx_t_21[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_21[1] = __pyx_t_13; __pyx_t_21[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_21[3] = __pyx_t_12; __pyx_t_21[4] = __pyx_mstate_global->__pyx_kp_u_expected_str_got; __pyx_t_21[5] = __pyx_t_20; __pyx_t_21[6] = __pyx_mstate_global->__pyx_kp_u__3;
04236:
+04237: b.str_bytes_len = bytes_used
__pyx_v_b->str_bytes_len = __pyx_v_bytes_used;
04238:
04239: # If the column turned out to be all-valid, drop the bitmap so
04240: # the FFI takes the no-validity hot path.
+04241: if not b.has_nulls and b.validity != NULL:
__pyx_t_22 = (!__pyx_v_b->has_nulls);
if (__pyx_t_22) {
} else {
__pyx_t_1 = __pyx_t_22;
goto __pyx_L24_bool_binop_done;
}
__pyx_t_22 = (__pyx_v_b->validity != NULL);
__pyx_t_1 = __pyx_t_22;
__pyx_L24_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+04242: free(b.validity)
free(__pyx_v_b->validity);
+04243: b.validity = NULL
__pyx_v_b->validity = NULL;
+04244: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_str_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_17, &__pyx_t_19) < 0) __PYX_ERR(0, 4244, __pyx_L6_except_error)
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_19);
+04245: pyobj_built_free(b)
__pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04246: raise
__Pyx_GIVEREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_17); __Pyx_XGIVEREF(__pyx_t_19); __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_17, __pyx_t_19); __pyx_t_8 = 0; __pyx_t_17 = 0; __pyx_t_19 = 0; __PYX_ERR(0, 4246, __pyx_L6_except_error) }
04247:
+04248: return b
{
__pyx_r = __pyx_v_b;
}
goto __pyx_L0;
04249:
04250:
+04251: cdef pyobj_built_t* _dataframe_columnar_build_int_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_int_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
PyObject **__pyx_v_access;
PyObject *__pyx_v_cell;
PyObject *__pyx_v_cell_ref = 0;
uint8_t *__pyx_v_values;
size_t __pyx_v_validity_bytes;
size_t __pyx_v_i;
int64_t __pyx_v_value;
int __pyx_v_overflow;
size_t __pyx_v_elem_size;
int64_t __pyx_v_narrow_max;
PyObject *__pyx_v_narrow_type = 0;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_XDECREF(__pyx_t_21);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_int_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_cell_ref);
__Pyx_XDECREF(__pyx_v_narrow_type);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
04252: col_t* col,
04253: size_t row_count,
04254: object df_col_name) except NULL:
04255: """
04256: Walk a PyObject int column once and produce a contiguous buffer +
04257: LSB-packed validity bitmap. Null cells leave the slot at 0 with the
04258: validity bit cleared.
04259:
04260: The slot is an int64 unless an IPV4 or CHAR round-trip claim
04261: narrows it to the 32- or 16-bit unsigned width that wire type
04262: needs; a GEOHASH claim keeps the int64 slot and carries its
04263: precision separately. Each is stored through its own pointer type,
04264: so the buffer holds native-order values whichever width it is.
04265:
04266: Null detection: ``None``, ``pd.NA``, and ``float('nan')`` all count
04267: as null — the NaN-as-null rule matches the row-path behaviour
04268: (`_dataframe_is_null_pyobj` in dataframe.pxi). A non-NaN float in
04269: an int-sniffed column raises ``QuestDBError`` with the row index;
04270: we accept the asymmetry because column-wide sniff has already
04271: locked the source type from the first non-null cell.
04272: """
+04273: cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
__pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+04274: if b == NULL:
__pyx_t_1 = (__pyx_v_b == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04275: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4275, __pyx_L1_error)
+04276: b.row_count = row_count
__pyx_v_b->row_count = __pyx_v_row_count;
04277:
+04278: cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
__pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
04279: cdef PyObject* cell
04280: # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
04281: cdef object cell_ref
+04282: cdef uint8_t* values = NULL
__pyx_v_values = NULL;
+04283: cdef size_t validity_bytes = (row_count + 7) // 8
__pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
04284: cdef size_t i
04285: cdef int64_t value
+04286: cdef int overflow = 0
__pyx_v_overflow = 0;
+04287: cdef size_t elem_size = 8
__pyx_v_elem_size = 8;
+04288: cdef int64_t narrow_max = 0
__pyx_v_narrow_max = 0;
+04289: cdef str narrow_type = None
__Pyx_INCREF(Py_None);
__pyx_v_narrow_type = ((PyObject*)Py_None);
04290:
+04291: if col.setup.has_override:
if (__pyx_v_col->setup->has_override) {
/* … */
}
+04292: if col.setup.override_dtype == qwp_numpy_dtype.qwp_numpy_u32_ipv4:
switch (__pyx_v_col->setup->override_dtype) {
case qwp_numpy_u32_ipv4:
/* … */
break;
case qwp_numpy_u16_char:
+04293: elem_size = 4
__pyx_v_elem_size = 4;
+04294: narrow_max = 0xFFFFFFFF
__pyx_v_narrow_max = 0xFFFFFFFF;
+04295: narrow_type = 'IPV4'
__Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_IPV4); __Pyx_DECREF_SET(__pyx_v_narrow_type, __pyx_mstate_global->__pyx_n_u_IPV4);
+04296: elif col.setup.override_dtype == qwp_numpy_dtype.qwp_numpy_u16_char:
break;
default: break;
}
+04297: elem_size = 2
__pyx_v_elem_size = 2;
+04298: narrow_max = 0xFFFF
__pyx_v_narrow_max = 0xFFFF;
+04299: narrow_type = 'CHAR'
__Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_CHAR); __Pyx_DECREF_SET(__pyx_v_narrow_type, __pyx_mstate_global->__pyx_n_u_CHAR);
04300: # GEOHASH has no per-value range check here, by design. That is
04301: # the documented bulk GEOHASH contract (`QuestDB.dataframe`,
04302: # docs/sender.rst): every DataFrame input shape -- NumPy, Arrow
04303: # and this object route -- takes a value as a raw bit pattern,
04304: # checks only the precision and the carrier width, and leaves
04305: # the values to the caller. The native encoder follows the same
04306: # rule and writes the low ceil(precision / 8) bytes, so a value
04307: # with bits above the precision lands as a different GEOHASH or
04308: # as NULL.
04309: #
04310: # The check would cost nothing in this per-cell loop. It is left
04311: # out so that one frame gets one answer: a masked pandas column
04312: # arrives here as Python ints, and plain `to_pandas()` returns a
04313: # GEOHASH column as a masked column when it holds a null and as
04314: # a NumPy column when it does not. A check on this route alone
04315: # would refuse an edited frame whose column holds a null and
04316: # write the same frame without one. IPV4 and CHAR get a range
04317: # check because their NumPy and Arrow carriers, uint32 and
04318: # uint16, cannot hold an out-of-range value either, so it gives
04319: # this route the same range as theirs.
04320: #
04321: # `test_roundtrip_claim_forwards_arbitrary_geohash_values` pins
04322: # this on every shape. Changing it changes the public contract,
04323: # docs and CHANGELOG included; it is not a local fix.
04324:
+04325: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L10_try_end;
__pyx_L5_error:;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L7_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L10_try_end:;
}
+04326: values = <uint8_t*>calloc(
__pyx_v_values = ((uint8_t *)calloc(__pyx_t_5, (sizeof(uint8_t))));
+04327: row_count * elem_size if row_count > 0 else elem_size,
__pyx_t_1 = (__pyx_v_row_count > 0);
if (__pyx_t_1) {
__pyx_t_5 = (__pyx_v_row_count * __pyx_v_elem_size);
} else {
__pyx_t_5 = __pyx_v_elem_size;
}
04328: sizeof(uint8_t))
+04329: if values == NULL:
__pyx_t_1 = (__pyx_v_values == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04330: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4330, __pyx_L5_error)
+04331: b.data = <void*>values
__pyx_v_b->data = ((void *)__pyx_v_values);
+04332: if validity_bytes > 0:
__pyx_t_1 = (__pyx_v_validity_bytes > 0);
if (__pyx_t_1) {
/* … */
}
+04333: b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
__pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04334: if b.validity == NULL:
__pyx_t_1 = (__pyx_v_b->validity == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04335: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4335, __pyx_L5_error)
+04336: for i in range(row_count):
__pyx_t_5 = __pyx_v_row_count;
__pyx_t_6 = __pyx_t_5;
for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
__pyx_v_i = __pyx_t_7;
+04337: cell_ref = <object>access[i]
__pyx_t_8 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
__Pyx_INCREF(__pyx_t_8);
__Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_8);
__pyx_t_8 = 0;
+04338: cell = <PyObject*>cell_ref
__pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
04339: # PyBool_Check goes BEFORE PyLong_CheckExact because Python
04340: # bools are subclasses of int and PyLong_CheckExact returns
04341: # false for them; treat them as int (matches row-path).
+04342: if PyBool_Check(cell):
__pyx_t_1 = PyBool_Check(__pyx_v_cell);
if (__pyx_t_1) {
/* … */
goto __pyx_L16;
}
+04343: value = 1 if cell == Py_True else 0
__pyx_t_1 = (__pyx_v_cell == Py_True);
if (__pyx_t_1) {
__pyx_t_9 = 1;
} else {
__pyx_t_9 = 0;
}
__pyx_v_value = __pyx_t_9;
+04344: elif PyLong_CheckExact(cell):
__pyx_t_1 = PyLong_CheckExact(__pyx_v_cell);
if (__pyx_t_1) {
/* … */
goto __pyx_L16;
}
+04345: value = <int64_t>PyLong_AsLongLongAndOverflow(
__pyx_t_10 = PyLong_AsLongLongAndOverflow(((PyObject *)__pyx_v_cell), (&__pyx_v_overflow)); if (unlikely(__pyx_t_10 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 4345, __pyx_L5_error) __pyx_v_value = ((int64_t)__pyx_t_10);
04346: <object>cell, &overflow)
+04347: if overflow != 0:
__pyx_t_1 = (__pyx_v_overflow != 0);
if (__pyx_t_1) {
/* … */
}
+04348: if narrow_type is not None:
__pyx_t_1 = (__pyx_v_narrow_type != ((PyObject*)Py_None));
if (unlikely(__pyx_t_1)) {
/* … */
}
+04349: raise QuestDBError(
__pyx_t_11 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4349, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_12);
+04350: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4350, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4350, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+04351: f'Bad column {df_col_name!r} at row {i}: '
__pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4351, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_15 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4351, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_15); /* … */ __pyx_t_19 = 56; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH for (Py_ssize_t i=1; i <= 7; i += 2) { Py_ssize_t l = __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18[i]); __pyx_t_19 += l; } #endif __pyx_t_20 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_20 |= __Pyx_PyUnicode_KIND_04(__pyx_t_18[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_18[5]); #endif __pyx_t_21 = __Pyx_PyUnicode_Join(__pyx_t_18, 9, __pyx_t_19, __pyx_t_20); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 4351, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_21); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_22 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_12))) { __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_12); assert(__pyx_t_11); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_12); __Pyx_INCREF(__pyx_t_11); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_12, __pyx__function); __pyx_t_22 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_t_14, __pyx_t_21}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_22, (3-__pyx_t_22) | (__pyx_t_22*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4349, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 4349, __pyx_L5_error)
+04352: f'{narrow_type} values must be in the range '
__pyx_t_16 = __Pyx_PyUnicode_Unicode(__pyx_v_narrow_type); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4352, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_16);
+04353: f'0 .. {narrow_max}.')
__pyx_t_17 = __Pyx_PyUnicode_From_int64_t(__pyx_v_narrow_max, 0, ' ', 'd'); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4353, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_18[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_18[1] = __pyx_t_13; __pyx_t_18[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_18[3] = __pyx_t_15; __pyx_t_18[4] = __pyx_mstate_global->__pyx_kp_u__2; __pyx_t_18[5] = __pyx_t_16; __pyx_t_18[6] = __pyx_mstate_global->__pyx_kp_u_values_must_be_in_the_range_0; __pyx_t_18[7] = __pyx_t_17; __pyx_t_18[8] = __pyx_mstate_global->__pyx_kp_u__3;
+04354: if overflow < 0:
__pyx_t_1 = (__pyx_v_overflow < 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04355: raise QuestDBError(
__pyx_t_12 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 4355, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_21);
+04356: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4356, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4356, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+04357: f'Bad column {df_col_name!r} at row {i}: '
__pyx_t_14 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4357, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_17 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4357, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_23[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_23[1] = __pyx_t_14; __pyx_t_23[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_23[3] = __pyx_t_17; __pyx_t_23[4] = __pyx_mstate_global->__pyx_kp_u_integer_is_below_the_minimum_fo; __pyx_t_19 = 131; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_19 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_23[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_23[3]); #endif __pyx_t_20 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_20 |= __Pyx_PyUnicode_KIND_04(__pyx_t_23[1]); #endif __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_23, 5, __pyx_t_19, __pyx_t_20); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4357, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_22 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_21))) { __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_21); assert(__pyx_t_12); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_21); __Pyx_INCREF(__pyx_t_12); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_21, __pyx__function); __pyx_t_22 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_t_11, __pyx_t_16}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_21, __pyx_callargs+__pyx_t_22, (3-__pyx_t_22) | (__pyx_t_22*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4355, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 4355, __pyx_L5_error)
04358: f'integer is below the minimum for a LONG '
04359: f'column (-2**63). LONG256 is unsigned and '
04360: f'cannot store negative values.')
+04361: raise QuestDBError(
__pyx_t_21 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4361, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_16);
+04362: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4362, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4362, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+04363: f'Bad column {df_col_name!r} at row {i}: integer '
__pyx_t_11 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4363, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_17 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4363, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_17); /* … */ __pyx_t_19 = 224; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_19 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_24[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_24[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_24[5]); #endif __pyx_t_20 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_20 |= __Pyx_PyUnicode_KIND_04(__pyx_t_24[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_24[5]); #endif __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_24, 7, __pyx_t_19, __pyx_t_20); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4363, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __pyx_t_22 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_16))) { __pyx_t_21 = PyMethod_GET_SELF(__pyx_t_16); assert(__pyx_t_21); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_16); __Pyx_INCREF(__pyx_t_21); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_16, __pyx__function); __pyx_t_22 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_21, __pyx_t_12, __pyx_t_15}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_16, __pyx_callargs+__pyx_t_22, (3-__pyx_t_22) | (__pyx_t_22*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4361, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 4361, __pyx_L5_error)
04364: f'out of range for a LONG column '
04365: f'(-2**63 .. 2**63-1). A 256-bit value needs a '
04366: f'LONG256 column, which this column claims with '
04367: f"df.attrs['questdb'] = {{'version': 1, "
+04368: f"'columns': {{{df_col_name!r}: "
__pyx_t_14 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4368, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_24[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_24[1] = __pyx_t_11; __pyx_t_24[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_24[3] = __pyx_t_17; __pyx_t_24[4] = __pyx_mstate_global->__pyx_kp_u_integer_out_of_range_for_a_LONG_2; __pyx_t_24[5] = __pyx_t_14; __pyx_t_24[6] = __pyx_mstate_global->__pyx_kp_u_kind_long256;
04369: f"{{'kind': 'long256'}}}}}}.")
+04370: elif _dataframe_is_null_pyobj(cell):
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
if (likely(__pyx_t_1)) {
/* … */
}
+04371: b.has_nulls = True
__pyx_v_b->has_nulls = 1;
+04372: continue
goto __pyx_L14_continue;
04373: else:
+04374: raise QuestDBError(
/*else*/ {
__pyx_t_16 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4374, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_15);
+04375: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4375, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_21 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 4375, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_21); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+04376: f'Bad column {df_col_name!r} at row {i}: expected int, '
__pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4376, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_14 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4376, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_14); /* … */ __pyx_t_19 = 40; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_19 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_24[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_24[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_24[5]); #endif __pyx_t_20 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_20 |= __Pyx_PyUnicode_KIND_04(__pyx_t_24[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_24[5]); #endif __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_24, 7, __pyx_t_19, __pyx_t_20); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4376, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_22 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_15))) { __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_15); assert(__pyx_t_16); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_15); __Pyx_INCREF(__pyx_t_16); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_15, __pyx__function); __pyx_t_22 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_16, __pyx_t_21, __pyx_t_17}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_15, __pyx_callargs+__pyx_t_22, (3-__pyx_t_22) | (__pyx_t_22*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4374, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 4374, __pyx_L5_error) } __pyx_L16:;
+04377: f'got {_fqn(type(<object>cell))}.')
__pyx_t_17 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4377, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_11 = __Pyx_PyUnicode_Unicode(__pyx_t_17); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4377, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_24[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_24[1] = __pyx_t_12; __pyx_t_24[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_24[3] = __pyx_t_14; __pyx_t_24[4] = __pyx_mstate_global->__pyx_kp_u_expected_int_got; __pyx_t_24[5] = __pyx_t_11; __pyx_t_24[6] = __pyx_mstate_global->__pyx_kp_u__3;
04378:
+04379: if narrow_type is not None and (value < 0 or value > narrow_max):
__pyx_t_25 = (__pyx_v_narrow_type != ((PyObject*)Py_None));
if (__pyx_t_25) {
} else {
__pyx_t_1 = __pyx_t_25;
goto __pyx_L21_bool_binop_done;
}
__pyx_t_25 = (__pyx_v_value < 0);
if (!__pyx_t_25) {
} else {
__pyx_t_1 = __pyx_t_25;
goto __pyx_L21_bool_binop_done;
}
__pyx_t_25 = (__pyx_v_value > __pyx_v_narrow_max);
__pyx_t_1 = __pyx_t_25;
__pyx_L21_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+04380: raise QuestDBError(
__pyx_t_15 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4380, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_17);
+04381: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 4381, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_21); __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4381, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
+04382: f'Bad column {df_col_name!r} at row {i}: '
__pyx_t_21 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 4382, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_21); __pyx_t_11 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4382, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_11); /* … */ __pyx_t_19 = 56; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH for (Py_ssize_t i=1; i <= 7; i += 2) { Py_ssize_t l = __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18[i]); __pyx_t_19 += l; } #endif __pyx_t_20 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_20 |= __Pyx_PyUnicode_KIND_04(__pyx_t_18[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_18[5]); #endif __pyx_t_13 = __Pyx_PyUnicode_Join(__pyx_t_18, 9, __pyx_t_19, __pyx_t_20); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4382, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_22 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_17))) { __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_17); assert(__pyx_t_15); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_17); __Pyx_INCREF(__pyx_t_15); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_17, __pyx__function); __pyx_t_22 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_16, __pyx_t_13}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_22, (3-__pyx_t_22) | (__pyx_t_22*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4380, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 4380, __pyx_L5_error)
+04383: f'{narrow_type} values must be in the range '
__pyx_t_14 = __Pyx_PyUnicode_Unicode(__pyx_v_narrow_type); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4383, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_14);
+04384: f'0 .. {narrow_max}.')
__pyx_t_12 = __Pyx_PyUnicode_From_int64_t(__pyx_v_narrow_max, 0, ' ', 'd'); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4384, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_18[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_18[1] = __pyx_t_21; __pyx_t_18[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_18[3] = __pyx_t_11; __pyx_t_18[4] = __pyx_mstate_global->__pyx_kp_u__2; __pyx_t_18[5] = __pyx_t_14; __pyx_t_18[6] = __pyx_mstate_global->__pyx_kp_u_values_must_be_in_the_range_0; __pyx_t_18[7] = __pyx_t_12; __pyx_t_18[8] = __pyx_mstate_global->__pyx_kp_u__3;
+04385: if elem_size == 4:
switch (__pyx_v_elem_size) {
case 4:
/* … */
break;
case 2:
+04386: (<uint32_t*>values)[i] = <uint32_t>value
(((uint32_t *)__pyx_v_values)[__pyx_v_i]) = ((uint32_t)__pyx_v_value);
+04387: elif elem_size == 2:
break;
default:
+04388: (<uint16_t*>values)[i] = <uint16_t>value
(((uint16_t *)__pyx_v_values)[__pyx_v_i]) = ((uint16_t)__pyx_v_value);
04389: else:
+04390: (<int64_t*>values)[i] = value
(((int64_t *)__pyx_v_values)[__pyx_v_i]) = __pyx_v_value;
break;
}
+04391: if b.validity != NULL:
__pyx_t_1 = (__pyx_v_b->validity != NULL);
if (__pyx_t_1) {
/* … */
}
__pyx_L14_continue:;
}
+04392: _pyobj_set_validity_bit(b.validity, i)
__pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
04393:
+04394: if not b.has_nulls and b.validity != NULL:
__pyx_t_25 = (!__pyx_v_b->has_nulls);
if (__pyx_t_25) {
} else {
__pyx_t_1 = __pyx_t_25;
goto __pyx_L26_bool_binop_done;
}
__pyx_t_25 = (__pyx_v_b->validity != NULL);
__pyx_t_1 = __pyx_t_25;
__pyx_L26_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+04395: free(b.validity)
free(__pyx_v_b->validity);
+04396: b.validity = NULL
__pyx_v_b->validity = NULL;
+04397: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_int_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_17, &__pyx_t_13) < 0) __PYX_ERR(0, 4397, __pyx_L7_except_error)
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_13);
+04398: pyobj_built_free(b)
__pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04399: raise
__Pyx_GIVEREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_17); __Pyx_XGIVEREF(__pyx_t_13); __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_17, __pyx_t_13); __pyx_t_8 = 0; __pyx_t_17 = 0; __pyx_t_13 = 0; __PYX_ERR(0, 4399, __pyx_L7_except_error) }
04400:
+04401: return b
{
__pyx_r = __pyx_v_b;
}
goto __pyx_L0;
04402:
04403:
+04404: cdef object _LONG256_LIMIT = 1 << 256
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_large_0x1000000000000000_xxx_000000000000000000); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__LONG256_LIMIT); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__LONG256_LIMIT, __pyx_mstate_global->__pyx_int_large_0x1000000000000000_xxx_000000000000000000); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_large_0x1000000000000000_xxx_000000000000000000);
04405:
04406:
+04407: cdef pyobj_built_t* _dataframe_columnar_build_long256_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_long256_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
PyObject **__pyx_v_access;
PyObject *__pyx_v_cell;
PyObject *__pyx_v_cell_ref = 0;
uint8_t *__pyx_v_buf;
size_t __pyx_v_buf_bytes;
size_t __pyx_v_validity_bytes;
size_t __pyx_v_i;
PyObject *__pyx_v_py_cell = 0;
PyObject *__pyx_v_le_bytes = 0;
PyObject *__pyx_v_int_to_bytes = 0;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_18);
__Pyx_XDECREF(__pyx_t_21);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_long256_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_cell_ref);
__Pyx_XDECREF(__pyx_v_py_cell);
__Pyx_XDECREF(__pyx_v_le_bytes);
__Pyx_XDECREF(__pyx_v_int_to_bytes);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
04408: col_t* col,
04409: size_t row_count,
04410: object df_col_name) except NULL:
04411: """
04412: Walk a PyObject int column claimed as LONG256 and produce 32 bytes
04413: per row + LSB-packed validity bitmap.
04414:
04415: ``qwp_numpy_s32`` puts the row on the wire verbatim, and the wire
04416: order for LONG256 is little-endian — the same order
04417: ``QueryResult.to_pandas()`` read the integer out of, so a value that
04418: came from a query goes back unchanged.
04419: """
+04420: cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
__pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+04421: if b == NULL:
__pyx_t_1 = (__pyx_v_b == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04422: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4422, __pyx_L1_error)
+04423: b.row_count = row_count
__pyx_v_b->row_count = __pyx_v_row_count;
04424:
+04425: cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
__pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
04426: cdef PyObject* cell
04427: # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
04428: cdef object cell_ref
+04429: cdef uint8_t* buf = NULL
__pyx_v_buf = NULL;
+04430: cdef size_t buf_bytes = row_count * 32 if row_count > 0 else 32
__pyx_t_1 = (__pyx_v_row_count > 0);
if (__pyx_t_1) {
__pyx_t_2 = (__pyx_v_row_count * 32);
} else {
__pyx_t_2 = 32;
}
__pyx_v_buf_bytes = __pyx_t_2;
+04431: cdef size_t validity_bytes = (row_count + 7) // 8
__pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
04432: cdef size_t i
04433: cdef object py_cell
04434: cdef bytes le_bytes
04435: # Called unbound so that an `int` subclass overriding `to_bytes`
04436: # cannot hand back something other than the 32 bytes the column
04437: # write copies.
+04438: cdef object int_to_bytes = int.to_bytes
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)(&PyLong_Type)), __pyx_mstate_global->__pyx_n_u_to_bytes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4438, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_int_to_bytes = __pyx_t_3; __pyx_t_3 = 0;
04439:
+04440: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
goto __pyx_L1_error;
__pyx_L9_try_end:;
}
+04441: buf = <uint8_t*>calloc(buf_bytes, sizeof(uint8_t))
__pyx_v_buf = ((uint8_t *)calloc(__pyx_v_buf_bytes, (sizeof(uint8_t))));
+04442: if buf == NULL:
__pyx_t_1 = (__pyx_v_buf == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04443: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4443, __pyx_L4_error)
+04444: b.data = <void*>buf
__pyx_v_b->data = ((void *)__pyx_v_buf);
+04445: if validity_bytes > 0:
__pyx_t_1 = (__pyx_v_validity_bytes > 0);
if (__pyx_t_1) {
/* … */
}
+04446: b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
__pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04447: if b.validity == NULL:
__pyx_t_1 = (__pyx_v_b->validity == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04448: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4448, __pyx_L4_error)
+04449: for i in range(row_count):
__pyx_t_2 = __pyx_v_row_count;
__pyx_t_7 = __pyx_t_2;
for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
__pyx_v_i = __pyx_t_8;
+04450: cell_ref = <object>access[i]
__pyx_t_3 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
__Pyx_INCREF(__pyx_t_3);
__Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_3);
__pyx_t_3 = 0;
+04451: cell = <PyObject*>cell_ref
__pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+04452: if PyLong_CheckExact(cell):
__pyx_t_1 = PyLong_CheckExact(__pyx_v_cell);
if (__pyx_t_1) {
/* … */
goto __pyx_L15;
}
+04453: py_cell = <object>cell
__pyx_t_3 = ((PyObject *)__pyx_v_cell);
__Pyx_INCREF(__pyx_t_3);
__Pyx_XDECREF_SET(__pyx_v_py_cell, __pyx_t_3);
__pyx_t_3 = 0;
+04454: if py_cell < 0 or py_cell >= _LONG256_LIMIT:
__pyx_t_9 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_py_cell, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 4454, __pyx_L4_error) if (!__pyx_t_9) { } else { __pyx_t_1 = __pyx_t_9; goto __pyx_L17_bool_binop_done; } __pyx_t_9 = __Pyx_PyObject_CompareBoolGe_object_object(__pyx_v_py_cell, __pyx_v_7questdb_7_client__LONG256_LIMIT, Py_GE); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 4454, __pyx_L4_error) __pyx_t_1 = __pyx_t_9; __pyx_L17_bool_binop_done:; if (unlikely(__pyx_t_1)) { /* … */ }
+04455: raise QuestDBError(
__pyx_t_10 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4455, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_11);
+04456: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4456, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4456, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+04457: f'Bad column {df_col_name!r} at row {i}: LONG256 '
__pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4457, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_14 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4457, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_15[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_15[1] = __pyx_t_12; __pyx_t_15[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_15[3] = __pyx_t_14; __pyx_t_15[4] = __pyx_mstate_global->__pyx_kp_u_LONG256_is_unsigned_and_256_bit; __pyx_t_16 = 114; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_16 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15[3]); #endif __pyx_t_17 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_17 |= __Pyx_PyUnicode_KIND_04(__pyx_t_15[1]); #endif __pyx_t_18 = __Pyx_PyUnicode_Join(__pyx_t_15, 5, __pyx_t_16, __pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4457, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __pyx_t_19 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_11))) { __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11); assert(__pyx_t_10); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11); __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_11, __pyx__function); __pyx_t_19 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_10, __pyx_t_13, __pyx_t_18}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_19, (3-__pyx_t_19) | (__pyx_t_19*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4455, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 4455, __pyx_L4_error)
04458: f'is unsigned and 256 bits wide, so the value '
04459: f'must be in the range 0 <= value < 2**256.')
+04460: le_bytes = int_to_bytes(py_cell, 32, 'little')
__pyx_t_11 = NULL;
__Pyx_INCREF(__pyx_v_int_to_bytes);
__pyx_t_18 = __pyx_v_int_to_bytes;
__pyx_t_19 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_18))) {
__pyx_t_11 = PyMethod_GET_SELF(__pyx_t_18);
assert(__pyx_t_11);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_18);
__Pyx_INCREF(__pyx_t_11);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_18, __pyx__function);
__pyx_t_19 = 0;
}
#endif
{
PyObject *__pyx_callargs[4] = {__pyx_t_11, __pyx_v_py_cell, __pyx_mstate_global->__pyx_int_32, __pyx_mstate_global->__pyx_n_u_little};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_18, __pyx_callargs+__pyx_t_19, (4-__pyx_t_19) | (__pyx_t_19*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4460, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_3);
}
if (!(likely(PyBytes_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_3))) __PYX_ERR(0, 4460, __pyx_L4_error)
__Pyx_XDECREF_SET(__pyx_v_le_bytes, ((PyObject*)__pyx_t_3));
__pyx_t_3 = 0;
+04461: memcpy(buf + i * 32, PyBytes_AsString(le_bytes), 32)
__pyx_t_20 = PyBytes_AsString(__pyx_v_le_bytes); if (unlikely(__pyx_t_20 == ((void *)NULL))) __PYX_ERR(0, 4461, __pyx_L4_error) (void)(memcpy((__pyx_v_buf + (__pyx_v_i * 32)), __pyx_t_20, 32));
+04462: if b.validity != NULL:
__pyx_t_1 = (__pyx_v_b->validity != NULL);
if (__pyx_t_1) {
/* … */
}
+04463: _pyobj_set_validity_bit(b.validity, i)
__pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+04464: elif _dataframe_is_null_pyobj(cell):
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L15;
}
+04465: b.has_nulls = True
__pyx_v_b->has_nulls = 1;
04466: else:
+04467: raise QuestDBError(
/*else*/ {
__pyx_t_18 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4467, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_11);
+04468: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4468, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4468, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+04469: f'Bad column {df_col_name!r} at row {i}: expected int, '
__pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4469, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4469, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_14); /* … */ __pyx_t_16 = 40; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_16 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_22[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_22[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_22[5]); #endif __pyx_t_17 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_17 |= __Pyx_PyUnicode_KIND_04(__pyx_t_22[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_22[5]); #endif __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_22, 7, __pyx_t_16, __pyx_t_17); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4469, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; __pyx_t_19 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_11))) { __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_11); assert(__pyx_t_18); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11); __Pyx_INCREF(__pyx_t_18); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_11, __pyx__function); __pyx_t_19 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_18, __pyx_t_10, __pyx_t_12}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_19, (3-__pyx_t_19) | (__pyx_t_19*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4467, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 4467, __pyx_L4_error) } __pyx_L15:; }
+04470: f'got {_fqn(type(<object>cell))}.')
__pyx_t_12 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4470, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_21 = __Pyx_PyUnicode_Unicode(__pyx_t_12); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 4470, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_21); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_22[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_22[1] = __pyx_t_13; __pyx_t_22[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_22[3] = __pyx_t_14; __pyx_t_22[4] = __pyx_mstate_global->__pyx_kp_u_expected_int_got; __pyx_t_22[5] = __pyx_t_21; __pyx_t_22[6] = __pyx_mstate_global->__pyx_kp_u__3;
04471:
+04472: if not b.has_nulls and b.validity != NULL:
__pyx_t_9 = (!__pyx_v_b->has_nulls);
if (__pyx_t_9) {
} else {
__pyx_t_1 = __pyx_t_9;
goto __pyx_L21_bool_binop_done;
}
__pyx_t_9 = (__pyx_v_b->validity != NULL);
__pyx_t_1 = __pyx_t_9;
__pyx_L21_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+04473: free(b.validity)
free(__pyx_v_b->validity);
+04474: b.validity = NULL
__pyx_v_b->validity = NULL;
+04475: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_long256_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_11, &__pyx_t_12) < 0) __PYX_ERR(0, 4475, __pyx_L6_except_error)
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
+04476: pyobj_built_free(b)
__pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04477: raise
__Pyx_GIVEREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_11); __Pyx_XGIVEREF(__pyx_t_12); __Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_11, __pyx_t_12); __pyx_t_3 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __PYX_ERR(0, 4477, __pyx_L6_except_error) }
04478:
+04479: return b
{
__pyx_r = __pyx_v_b;
}
goto __pyx_L0;
04480:
04481:
+04482: cdef pyobj_built_t* _dataframe_columnar_build_float_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_float_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
PyObject **__pyx_v_access;
PyObject *__pyx_v_cell;
PyObject *__pyx_v_cell_ref = 0;
double *__pyx_v_values;
size_t __pyx_v_validity_bytes;
size_t __pyx_v_i;
double __pyx_v_value;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_float_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_cell_ref);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
04483: col_t* col,
04484: size_t row_count,
04485: object df_col_name) except NULL:
04486: """
04487: Walk a PyObject float column once and produce a contiguous double
04488: buffer + LSB-packed validity bitmap.
04489: """
+04490: cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
__pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+04491: if b == NULL:
__pyx_t_1 = (__pyx_v_b == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04492: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4492, __pyx_L1_error)
+04493: b.row_count = row_count
__pyx_v_b->row_count = __pyx_v_row_count;
04494:
+04495: cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
__pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
04496: cdef PyObject* cell
04497: # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
04498: cdef object cell_ref
+04499: cdef double* values = NULL
__pyx_v_values = NULL;
+04500: cdef size_t validity_bytes = (row_count + 7) // 8
__pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
04501: cdef size_t i
04502: cdef double value
04503:
+04504: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L9_try_end:;
}
+04505: values = <double*>calloc(row_count if row_count > 0 else 1,
__pyx_t_1 = (__pyx_v_row_count > 0);
if (__pyx_t_1) {
__pyx_t_5 = __pyx_v_row_count;
} else {
__pyx_t_5 = 1;
}
/* … */
__pyx_v_values = ((double *)calloc(__pyx_t_5, (sizeof(double))));
04506: sizeof(double))
+04507: if values == NULL:
__pyx_t_1 = (__pyx_v_values == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04508: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4508, __pyx_L4_error)
+04509: b.data = <void*>values
__pyx_v_b->data = ((void *)__pyx_v_values);
+04510: if validity_bytes > 0:
__pyx_t_1 = (__pyx_v_validity_bytes > 0);
if (__pyx_t_1) {
/* … */
}
+04511: b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
__pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04512: if b.validity == NULL:
__pyx_t_1 = (__pyx_v_b->validity == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04513: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4513, __pyx_L4_error)
+04514: for i in range(row_count):
__pyx_t_5 = __pyx_v_row_count;
__pyx_t_6 = __pyx_t_5;
for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
__pyx_v_i = __pyx_t_7;
+04515: cell_ref = <object>access[i]
__pyx_t_8 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
__Pyx_INCREF(__pyx_t_8);
__Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_8);
__pyx_t_8 = 0;
+04516: cell = <PyObject*>cell_ref
__pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+04517: if PyFloat_CheckExact(cell):
__pyx_t_1 = PyFloat_CheckExact(__pyx_v_cell);
if (__pyx_t_1) {
/* … */
goto __pyx_L15;
}
+04518: value = PyFloat_AS_DOUBLE(cell)
__pyx_v_value = PyFloat_AS_DOUBLE(__pyx_v_cell);
+04519: if isnan(value):
__pyx_t_1 = isnan(__pyx_v_value);
if (__pyx_t_1) {
/* … */
goto __pyx_L16;
}
04520: # pandas NaN-as-null convention matches the row-path.
+04521: b.has_nulls = True
__pyx_v_b->has_nulls = 1;
04522: else:
+04523: values[i] = value
/*else*/ {
(__pyx_v_values[__pyx_v_i]) = __pyx_v_value;
+04524: if b.validity != NULL:
__pyx_t_1 = (__pyx_v_b->validity != NULL);
if (__pyx_t_1) {
/* … */
}
}
__pyx_L16:;
+04525: _pyobj_set_validity_bit(b.validity, i)
__pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+04526: elif PyLong_CheckExact(cell) or PyBool_Check(cell):
__pyx_t_9 = PyLong_CheckExact(__pyx_v_cell); if (!__pyx_t_9) { } else { __pyx_t_1 = __pyx_t_9; goto __pyx_L18_bool_binop_done; } __pyx_t_9 = PyBool_Check(__pyx_v_cell); __pyx_t_1 = __pyx_t_9; __pyx_L18_bool_binop_done:; if (__pyx_t_1) { /* … */ goto __pyx_L15; }
04527: # Accept widening of int / bool to float, matching how
04528: # Python implicitly converts when you do float(x).
+04529: values[i] = PyFloat_AsDouble(cell)
__pyx_t_10 = PyFloat_AsDouble(__pyx_v_cell); if (unlikely(__PYX_CHECK_FLOAT_EXCEPTION(__pyx_t_10, ((double)(-1.0))) && PyErr_Occurred())) __PYX_ERR(0, 4529, __pyx_L4_error) (__pyx_v_values[__pyx_v_i]) = __pyx_t_10;
+04530: if b.validity != NULL:
__pyx_t_1 = (__pyx_v_b->validity != NULL);
if (__pyx_t_1) {
/* … */
}
+04531: _pyobj_set_validity_bit(b.validity, i)
__pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+04532: elif _dataframe_is_null_pyobj(cell):
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L15;
}
+04533: b.has_nulls = True
__pyx_v_b->has_nulls = 1;
04534: else:
+04535: raise QuestDBError(
/*else*/ {
__pyx_t_11 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4535, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_12);
+04536: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4536, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4536, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+04537: f'Bad column {df_col_name!r} at row {i}: expected float, '
__pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4537, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_15 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4537, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_15); /* … */ __pyx_t_19 = 42; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_19 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18[5]); #endif __pyx_t_20 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_20 |= __Pyx_PyUnicode_KIND_04(__pyx_t_18[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_18[5]); #endif __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_18, 7, __pyx_t_19, __pyx_t_20); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4537, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_21 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_12))) { __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_12); assert(__pyx_t_11); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_12); __Pyx_INCREF(__pyx_t_11); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_12, __pyx__function); __pyx_t_21 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_t_14, __pyx_t_16}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_21, (3-__pyx_t_21) | (__pyx_t_21*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4535, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 4535, __pyx_L4_error) } __pyx_L15:; }
+04538: f'got {_fqn(type(<object>cell))}.')
__pyx_t_16 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4538, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_17 = __Pyx_PyUnicode_Unicode(__pyx_t_16); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4538, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_18[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_18[1] = __pyx_t_13; __pyx_t_18[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_18[3] = __pyx_t_15; __pyx_t_18[4] = __pyx_mstate_global->__pyx_kp_u_expected_float_got; __pyx_t_18[5] = __pyx_t_17; __pyx_t_18[6] = __pyx_mstate_global->__pyx_kp_u__3;
04539:
+04540: if not b.has_nulls and b.validity != NULL:
__pyx_t_9 = (!__pyx_v_b->has_nulls);
if (__pyx_t_9) {
} else {
__pyx_t_1 = __pyx_t_9;
goto __pyx_L22_bool_binop_done;
}
__pyx_t_9 = (__pyx_v_b->validity != NULL);
__pyx_t_1 = __pyx_t_9;
__pyx_L22_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+04541: free(b.validity)
free(__pyx_v_b->validity);
+04542: b.validity = NULL
__pyx_v_b->validity = NULL;
+04543: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_float_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_12, &__pyx_t_16) < 0) __PYX_ERR(0, 4543, __pyx_L6_except_error)
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_16);
+04544: pyobj_built_free(b)
__pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04545: raise
__Pyx_GIVEREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_12); __Pyx_XGIVEREF(__pyx_t_16); __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_12, __pyx_t_16); __pyx_t_8 = 0; __pyx_t_12 = 0; __pyx_t_16 = 0; __PYX_ERR(0, 4545, __pyx_L6_except_error) }
04546:
+04547: return b
{
__pyx_r = __pyx_v_b;
}
goto __pyx_L0;
04548:
04549:
+04550: cdef pyobj_built_t* _dataframe_columnar_build_bool_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_bool_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
PyObject **__pyx_v_access;
PyObject *__pyx_v_cell;
PyObject *__pyx_v_cell_ref = 0;
uint8_t *__pyx_v_bits;
size_t __pyx_v_bytes;
size_t __pyx_v_i;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_18);
__Pyx_XDECREF(__pyx_t_19);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_bool_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_cell_ref);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
04551: col_t* col,
04552: size_t row_count,
04553: object df_col_name) except NULL:
04554: """
04555: Walk a PyObject bool column once and pack the values into an
04556: Arrow LSB-first bitmap (one bit per row). Null cells are rejected —
04557: matches the row-path behaviour (QuestDB BOOLEAN has no null
04558: representation at the row level).
04559: """
+04560: cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
__pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+04561: if b == NULL:
__pyx_t_1 = (__pyx_v_b == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04562: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4562, __pyx_L1_error)
+04563: b.row_count = row_count
__pyx_v_b->row_count = __pyx_v_row_count;
04564:
+04565: cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
__pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
04566: cdef PyObject* cell
04567: # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
04568: cdef object cell_ref
+04569: cdef uint8_t* bits = NULL
__pyx_v_bits = NULL;
+04570: cdef size_t bytes = (row_count + 7) // 8
__pyx_v_bytes = ((__pyx_v_row_count + 7) / 8);
04571: cdef size_t i
04572:
+04573: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L9_try_end:;
}
+04574: if bytes == 0:
__pyx_t_1 = (__pyx_v_bytes == 0);
if (__pyx_t_1) {
/* … */
}
+04575: bytes = 1
__pyx_v_bytes = 1;
+04576: bits = <uint8_t*>calloc(bytes, sizeof(uint8_t))
__pyx_v_bits = ((uint8_t *)calloc(__pyx_v_bytes, (sizeof(uint8_t))));
+04577: if bits == NULL:
__pyx_t_1 = (__pyx_v_bits == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04578: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4578, __pyx_L4_error)
+04579: b.data = <void*>bits
__pyx_v_b->data = ((void *)__pyx_v_bits);
+04580: for i in range(row_count):
__pyx_t_5 = __pyx_v_row_count;
__pyx_t_6 = __pyx_t_5;
for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
__pyx_v_i = __pyx_t_7;
+04581: cell_ref = <object>access[i]
__pyx_t_8 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
__Pyx_INCREF(__pyx_t_8);
__Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_8);
__pyx_t_8 = 0;
+04582: cell = <PyObject*>cell_ref
__pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+04583: if PyBool_Check(cell):
__pyx_t_1 = PyBool_Check(__pyx_v_cell);
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L14;
}
+04584: if cell == Py_True:
__pyx_t_1 = (__pyx_v_cell == Py_True);
if (__pyx_t_1) {
/* … */
}
+04585: bits[i >> 3] |= <uint8_t>(1 << (i & 7))
__pyx_t_9 = (__pyx_v_i >> 3);
(__pyx_v_bits[__pyx_t_9]) = ((__pyx_v_bits[__pyx_t_9]) | ((uint8_t)(1 << (__pyx_v_i & 7))));
+04586: elif _dataframe_is_null_pyobj(cell):
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04587: raise QuestDBError(
__pyx_t_10 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4587, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_11);
+04588: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4588, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4588, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+04589: f'Bad column {df_col_name!r} at row {i}: cannot insert '
__pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4589, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_14 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4589, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_15[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_15[1] = __pyx_t_12; __pyx_t_15[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_15[3] = __pyx_t_14; __pyx_t_15[4] = __pyx_mstate_global->__pyx_kp_u_cannot_insert_null_into_a_boole; __pyx_t_16 = 62; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_16 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15[3]); #endif __pyx_t_17 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_17 |= __Pyx_PyUnicode_KIND_04(__pyx_t_15[1]); #endif __pyx_t_18 = __Pyx_PyUnicode_Join(__pyx_t_15, 5, __pyx_t_16, __pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4589, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_11))) { __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11); assert(__pyx_t_10); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11); __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_11, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_10, __pyx_t_13, __pyx_t_18}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4587, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 4587, __pyx_L4_error)
04590: 'null into a boolean column.')
04591: else:
+04592: raise QuestDBError(
/*else*/ {
__pyx_t_11 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4592, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_18);
+04593: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4593, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4593, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+04594: f'Bad column {df_col_name!r} at row {i}: expected bool, '
__pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4594, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4594, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_14); /* … */ __pyx_t_16 = 41; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_16 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20[5]); #endif __pyx_t_17 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_17 |= __Pyx_PyUnicode_KIND_04(__pyx_t_20[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_20[5]); #endif __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_20, 7, __pyx_t_16, __pyx_t_17); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4594, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_18))) { __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_18); assert(__pyx_t_11); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_18); __Pyx_INCREF(__pyx_t_11); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_18, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_t_10, __pyx_t_12}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_18, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4592, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 4592, __pyx_L4_error) } __pyx_L14:; }
+04595: f'got {_fqn(type(<object>cell))}.')
__pyx_t_12 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4595, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_19 = __Pyx_PyUnicode_Unicode(__pyx_t_12); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4595, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_20[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_20[1] = __pyx_t_13; __pyx_t_20[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_20[3] = __pyx_t_14; __pyx_t_20[4] = __pyx_mstate_global->__pyx_kp_u_expected_bool_got; __pyx_t_20[5] = __pyx_t_19; __pyx_t_20[6] = __pyx_mstate_global->__pyx_kp_u__3;
+04596: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_bool_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_18, &__pyx_t_12) < 0) __PYX_ERR(0, 4596, __pyx_L6_except_error)
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_12);
+04597: pyobj_built_free(b)
__pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04598: raise
__Pyx_GIVEREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_18); __Pyx_XGIVEREF(__pyx_t_12); __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_18, __pyx_t_12); __pyx_t_8 = 0; __pyx_t_18 = 0; __pyx_t_12 = 0; __PYX_ERR(0, 4598, __pyx_L6_except_error) }
04599:
+04600: return b
{
__pyx_r = __pyx_v_b;
}
goto __pyx_L0;
04601:
04602:
+04603: cdef pyobj_built_t* _dataframe_columnar_build_uuid_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_uuid_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
PyObject **__pyx_v_access;
PyObject *__pyx_v_cell;
PyObject *__pyx_v_cell_ref = 0;
uint8_t *__pyx_v_buf;
size_t __pyx_v_buf_bytes;
size_t __pyx_v_validity_bytes;
size_t __pyx_v_i;
PyObject *__pyx_v_be_bytes = 0;
PyObject *__pyx_v_uuid_cls = 0;
PyObject *__pyx_v_int_to_bytes = 0;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_uuid_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_cell_ref);
__Pyx_XDECREF(__pyx_v_be_bytes);
__Pyx_XDECREF(__pyx_v_uuid_cls);
__Pyx_XDECREF(__pyx_v_int_to_bytes);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
04604: col_t* col,
04605: size_t row_count,
04606: object df_col_name) except NULL:
+04607: cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
__pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+04608: if b == NULL:
__pyx_t_1 = (__pyx_v_b == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04609: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4609, __pyx_L1_error)
+04610: b.row_count = row_count
__pyx_v_b->row_count = __pyx_v_row_count;
04611:
+04612: cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
__pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
04613: cdef PyObject* cell
04614: # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
04615: cdef object cell_ref
+04616: cdef uint8_t* buf = NULL
__pyx_v_buf = NULL;
+04617: cdef size_t buf_bytes = row_count * 16 if row_count > 0 else 16
__pyx_t_1 = (__pyx_v_row_count > 0);
if (__pyx_t_1) {
__pyx_t_2 = (__pyx_v_row_count * 16);
} else {
__pyx_t_2 = 16;
}
__pyx_v_buf_bytes = __pyx_t_2;
+04618: cdef size_t validity_bytes = (row_count + 7) // 8
__pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
04619: cdef size_t i
04620: cdef bytes be_bytes
+04621: cdef object uuid_cls = _uuid.UUID
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_uuid_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4621, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_UUID); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4621, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_uuid_cls = __pyx_t_4; __pyx_t_4 = 0;
+04622: cdef object int_to_bytes = int.to_bytes
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)(&PyLong_Type)), __pyx_mstate_global->__pyx_n_u_to_bytes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4622, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_int_to_bytes = __pyx_t_4; __pyx_t_4 = 0;
04623:
+04624: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
goto __pyx_L1_error;
__pyx_L9_try_end:;
}
+04625: buf = <uint8_t*>calloc(buf_bytes, sizeof(uint8_t))
__pyx_v_buf = ((uint8_t *)calloc(__pyx_v_buf_bytes, (sizeof(uint8_t))));
+04626: if buf == NULL:
__pyx_t_1 = (__pyx_v_buf == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04627: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4627, __pyx_L4_error)
+04628: b.data = <void*>buf
__pyx_v_b->data = ((void *)__pyx_v_buf);
+04629: if validity_bytes > 0:
__pyx_t_1 = (__pyx_v_validity_bytes > 0);
if (__pyx_t_1) {
/* … */
}
+04630: b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
__pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04631: if b.validity == NULL:
__pyx_t_1 = (__pyx_v_b->validity == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04632: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4632, __pyx_L4_error)
+04633: for i in range(row_count):
__pyx_t_2 = __pyx_v_row_count;
__pyx_t_8 = __pyx_t_2;
for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
__pyx_v_i = __pyx_t_9;
+04634: cell_ref = <object>access[i]
__pyx_t_4 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
__Pyx_INCREF(__pyx_t_4);
__Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_4);
__pyx_t_4 = 0;
+04635: cell = <PyObject*>cell_ref
__pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+04636: if isinstance(<object>cell, uuid_cls):
__pyx_t_1 = PyObject_IsInstance(((PyObject *)__pyx_v_cell), __pyx_v_uuid_cls); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 4636, __pyx_L4_error) if (__pyx_t_1) { /* … */ goto __pyx_L15; }
04637: # `qwp_numpy_s16` reads canonical RFC 4122 big-endian
04638: # rows and byte-swaps them into QWP wire order itself.
04639: # `int.to_bytes` is called unbound so that a replaced
04640: # `UUID.int` cannot narrow the result: it is always the
04641: # 16 bytes `UUID.bytes` would give, in one C-implemented
04642: # call plus one 16-byte memcpy per row.
+04643: be_bytes = int_to_bytes((<object>cell).int, 16, 'big')
__pyx_t_3 = NULL;
__Pyx_INCREF(__pyx_v_int_to_bytes);
__pyx_t_10 = __pyx_v_int_to_bytes;
__pyx_t_11 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cell), __pyx_mstate_global->__pyx_n_u_int); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4643, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_11);
__pyx_t_12 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_10))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_10);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_10);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_10, __pyx__function);
__pyx_t_12 = 0;
}
#endif
{
PyObject *__pyx_callargs[4] = {__pyx_t_3, __pyx_t_11, __pyx_mstate_global->__pyx_int_16, __pyx_mstate_global->__pyx_n_u_big};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_10, __pyx_callargs+__pyx_t_12, (4-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4643, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_4);
}
if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_4))) __PYX_ERR(0, 4643, __pyx_L4_error)
__Pyx_XDECREF_SET(__pyx_v_be_bytes, ((PyObject*)__pyx_t_4));
__pyx_t_4 = 0;
+04644: memcpy(buf + i * 16, PyBytes_AsString(be_bytes), 16)
__pyx_t_13 = PyBytes_AsString(__pyx_v_be_bytes); if (unlikely(__pyx_t_13 == ((void *)NULL))) __PYX_ERR(0, 4644, __pyx_L4_error) (void)(memcpy((__pyx_v_buf + (__pyx_v_i * 16)), __pyx_t_13, 16));
+04645: if b.validity != NULL:
__pyx_t_1 = (__pyx_v_b->validity != NULL);
if (__pyx_t_1) {
/* … */
}
+04646: _pyobj_set_validity_bit(b.validity, i)
__pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+04647: elif _dataframe_is_null_pyobj(cell):
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L15;
}
+04648: b.has_nulls = True
__pyx_v_b->has_nulls = 1;
04649: else:
+04650: raise QuestDBError(
/*else*/ {
__pyx_t_10 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4650, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_11);
+04651: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4651, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4651, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+04652: f'Bad column {df_col_name!r} at row {i}: expected UUID, '
__pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4652, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_15 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4652, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_15); /* … */ __pyx_t_19 = 41; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_19 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18[5]); #endif __pyx_t_20 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_20 |= __Pyx_PyUnicode_KIND_04(__pyx_t_18[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_18[5]); #endif __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_18, 7, __pyx_t_19, __pyx_t_20); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4652, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_12 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_11))) { __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11); assert(__pyx_t_10); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11); __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_11, __pyx__function); __pyx_t_12 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_10, __pyx_t_14, __pyx_t_16}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_12, (3-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4650, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 4650, __pyx_L4_error) } __pyx_L15:; }
+04653: f'got {_fqn(type(<object>cell))}.')
__pyx_t_16 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4653, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_17 = __Pyx_PyUnicode_Unicode(__pyx_t_16); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4653, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_18[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_18[1] = __pyx_t_3; __pyx_t_18[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_18[3] = __pyx_t_15; __pyx_t_18[4] = __pyx_mstate_global->__pyx_kp_u_expected_UUID_got; __pyx_t_18[5] = __pyx_t_17; __pyx_t_18[6] = __pyx_mstate_global->__pyx_kp_u__3;
04654:
+04655: if not b.has_nulls and b.validity != NULL:
__pyx_t_21 = (!__pyx_v_b->has_nulls);
if (__pyx_t_21) {
} else {
__pyx_t_1 = __pyx_t_21;
goto __pyx_L18_bool_binop_done;
}
__pyx_t_21 = (__pyx_v_b->validity != NULL);
__pyx_t_1 = __pyx_t_21;
__pyx_L18_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+04656: free(b.validity)
free(__pyx_v_b->validity);
+04657: b.validity = NULL
__pyx_v_b->validity = NULL;
+04658: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_uuid_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_11, &__pyx_t_16) < 0) __PYX_ERR(0, 4658, __pyx_L6_except_error)
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_16);
+04659: pyobj_built_free(b)
__pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04660: raise
__Pyx_GIVEREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_11); __Pyx_XGIVEREF(__pyx_t_16); __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_11, __pyx_t_16); __pyx_t_4 = 0; __pyx_t_11 = 0; __pyx_t_16 = 0; __PYX_ERR(0, 4660, __pyx_L6_except_error) }
04661:
+04662: return b
{
__pyx_r = __pyx_v_b;
}
goto __pyx_L0;
04663:
04664:
+04665: cdef pyobj_built_t* _dataframe_columnar_build_ipv4_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_ipv4_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
PyObject **__pyx_v_access;
PyObject *__pyx_v_cell;
PyObject *__pyx_v_cell_ref = 0;
uint32_t *__pyx_v_values;
size_t __pyx_v_validity_bytes;
size_t __pyx_v_i;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_18);
__Pyx_XDECREF(__pyx_t_20);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_ipv4_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_cell_ref);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
04666: col_t* col,
04667: size_t row_count,
04668: object df_col_name) except NULL:
+04669: cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
__pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+04670: if b == NULL:
__pyx_t_1 = (__pyx_v_b == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04671: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4671, __pyx_L1_error)
+04672: b.row_count = row_count
__pyx_v_b->row_count = __pyx_v_row_count;
04673:
+04674: cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
__pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
04675: cdef PyObject* cell
04676: # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
04677: cdef object cell_ref
+04678: cdef uint32_t* values = NULL
__pyx_v_values = NULL;
+04679: cdef size_t validity_bytes = (row_count + 7) // 8
__pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
04680: cdef size_t i
+04681: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L9_try_end:;
}
+04682: values = <uint32_t*>calloc(row_count if row_count > 0 else 1,
__pyx_t_1 = (__pyx_v_row_count > 0);
if (__pyx_t_1) {
__pyx_t_5 = __pyx_v_row_count;
} else {
__pyx_t_5 = 1;
}
/* … */
__pyx_v_values = ((uint32_t *)calloc(__pyx_t_5, (sizeof(uint32_t))));
04683: sizeof(uint32_t))
+04684: if values == NULL:
__pyx_t_1 = (__pyx_v_values == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04685: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4685, __pyx_L4_error)
+04686: b.data = <void*>values
__pyx_v_b->data = ((void *)__pyx_v_values);
+04687: if validity_bytes > 0:
__pyx_t_1 = (__pyx_v_validity_bytes > 0);
if (__pyx_t_1) {
/* … */
}
+04688: b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
__pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04689: if b.validity == NULL:
__pyx_t_1 = (__pyx_v_b->validity == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04690: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4690, __pyx_L4_error)
+04691: for i in range(row_count):
__pyx_t_5 = __pyx_v_row_count;
__pyx_t_6 = __pyx_t_5;
for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
__pyx_v_i = __pyx_t_7;
+04692: cell_ref = <object>access[i]
__pyx_t_8 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
__Pyx_INCREF(__pyx_t_8);
__Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_8);
__pyx_t_8 = 0;
+04693: cell = <PyObject*>cell_ref
__pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+04694: if _is_ipv4_address(<object>cell):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_ipv4_address(((PyObject *)__pyx_v_cell)); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4694, __pyx_L4_error) if (__pyx_t_1) { /* … */ goto __pyx_L15; }
+04695: values[i] = <uint32_t>int(<object>cell)
__pyx_t_8 = __Pyx_PyNumber_Int(((PyObject *)__pyx_v_cell)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4695, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyLong_As_uint32_t(__pyx_t_8); if (unlikely((__pyx_t_9 == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4695, __pyx_L4_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; (__pyx_v_values[__pyx_v_i]) = ((uint32_t)__pyx_t_9);
+04696: if b.validity != NULL:
__pyx_t_1 = (__pyx_v_b->validity != NULL);
if (__pyx_t_1) {
/* … */
}
+04697: _pyobj_set_validity_bit(b.validity, i)
__pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+04698: elif _dataframe_is_null_pyobj(cell):
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L15;
}
+04699: b.has_nulls = True
__pyx_v_b->has_nulls = 1;
+04700: elif isinstance(<object>cell, _IPV4_INTERFACE):
__pyx_t_8 = __pyx_v_7questdb_7_client__IPV4_INTERFACE;
__Pyx_INCREF(__pyx_t_8);
__pyx_t_1 = PyObject_IsInstance(((PyObject *)__pyx_v_cell), __pyx_t_8); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 4700, __pyx_L4_error)
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(__pyx_t_1)) {
/* … */
}
+04701: raise QuestDBError(
__pyx_t_10 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4701, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_11);
+04702: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4702, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4702, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+04703: f'Bad column {df_col_name!r} at row {i}: '
__pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4703, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_14 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4703, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_15[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_15[1] = __pyx_t_12; __pyx_t_15[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_15[3] = __pyx_t_14; __pyx_t_15[4] = __pyx_mstate_global->__pyx_kp_u__2; __pyx_t_16 = 21; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_16 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15[3]); #endif __pyx_t_17 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_17 |= __Pyx_PyUnicode_KIND_04(__pyx_t_15[1]); #endif __pyx_t_18 = __Pyx_PyUnicode_Join(__pyx_t_15, 5, __pyx_t_16, __pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4703, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+04704: + _ipv4_interface_df_message(df_col_name))
__pyx_t_14 = __pyx_f_7questdb_7_client__ipv4_interface_df_message(__pyx_v_df_col_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4704, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_12 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_t_18, __pyx_t_14); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4704, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __pyx_t_19 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_11))) { __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11); assert(__pyx_t_10); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11); __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_11, __pyx__function); __pyx_t_19 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_10, __pyx_t_13, __pyx_t_12}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_19, (3-__pyx_t_19) | (__pyx_t_19*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4701, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 4701, __pyx_L4_error)
04705: else:
+04706: raise QuestDBError(
/*else*/ {
__pyx_t_11 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4706, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_12);
+04707: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4707, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4707, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+04708: f'Bad column {df_col_name!r} at row {i}: expected '
__pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4708, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4708, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_14); /* … */ __pyx_t_16 = 58; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_16 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_21[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_21[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_21[5]); #endif __pyx_t_17 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_17 |= __Pyx_PyUnicode_KIND_04(__pyx_t_21[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_21[5]); #endif __pyx_t_18 = __Pyx_PyUnicode_Join(__pyx_t_21, 7, __pyx_t_16, __pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4708, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __pyx_t_19 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_12))) { __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_12); assert(__pyx_t_11); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_12); __Pyx_INCREF(__pyx_t_11); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_12, __pyx__function); __pyx_t_19 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_t_10, __pyx_t_18}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_19, (3-__pyx_t_19) | (__pyx_t_19*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4706, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 4706, __pyx_L4_error) } __pyx_L15:; }
+04709: f'ipaddress.IPv4Address, got {_fqn(type(<object>cell))}.')
__pyx_t_18 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4709, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_20 = __Pyx_PyUnicode_Unicode(__pyx_t_18); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 4709, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_20); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __pyx_t_21[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_21[1] = __pyx_t_13; __pyx_t_21[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_21[3] = __pyx_t_14; __pyx_t_21[4] = __pyx_mstate_global->__pyx_kp_u_expected_ipaddress_IPv4Address; __pyx_t_21[5] = __pyx_t_20; __pyx_t_21[6] = __pyx_mstate_global->__pyx_kp_u__3;
04710:
+04711: if not b.has_nulls and b.validity != NULL:
__pyx_t_22 = (!__pyx_v_b->has_nulls);
if (__pyx_t_22) {
} else {
__pyx_t_1 = __pyx_t_22;
goto __pyx_L18_bool_binop_done;
}
__pyx_t_22 = (__pyx_v_b->validity != NULL);
__pyx_t_1 = __pyx_t_22;
__pyx_L18_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+04712: free(b.validity)
free(__pyx_v_b->validity);
+04713: b.validity = NULL
__pyx_v_b->validity = NULL;
+04714: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_ipv4_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_12, &__pyx_t_18) < 0) __PYX_ERR(0, 4714, __pyx_L6_except_error)
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_18);
+04715: pyobj_built_free(b)
__pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04716: raise
__Pyx_GIVEREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_12); __Pyx_XGIVEREF(__pyx_t_18); __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_12, __pyx_t_18); __pyx_t_8 = 0; __pyx_t_12 = 0; __pyx_t_18 = 0; __PYX_ERR(0, 4716, __pyx_L6_except_error) }
04717:
+04718: return b
{
__pyx_r = __pyx_v_b;
}
goto __pyx_L0;
04719:
04720:
+04721: cdef inline int64_t _days_from_civil(int y, int m, int d) noexcept nogil:
static CYTHON_INLINE int64_t __pyx_f_7questdb_7_client__days_from_civil(int __pyx_v_y, int __pyx_v_m, int __pyx_v_d) {
int __pyx_v_y_adj;
int __pyx_v_era;
int __pyx_v_yoe;
int __pyx_v_m_adj;
int __pyx_v_doy;
int __pyx_v_doe;
int64_t __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
+04722: cdef int y_adj = y - 1 if m <= 2 else y
__pyx_t_2 = (__pyx_v_m <= 2);
if (__pyx_t_2) {
__pyx_t_1 = (__pyx_v_y - 1);
} else {
__pyx_t_1 = __pyx_v_y;
}
__pyx_v_y_adj = __pyx_t_1;
+04723: cdef int era = (y_adj if y_adj >= 0 else y_adj - 399) // 400
__pyx_t_2 = (__pyx_v_y_adj >= 0);
if (__pyx_t_2) {
__pyx_t_1 = __pyx_v_y_adj;
} else {
__pyx_t_1 = (__pyx_v_y_adj - 0x18F);
}
__pyx_v_era = __Pyx_div_long(__pyx_t_1, 0x190, 1);
+04724: cdef int yoe = y_adj - era * 400
__pyx_v_yoe = (__pyx_v_y_adj - (__pyx_v_era * 0x190));
+04725: cdef int m_adj = m - 3 if m > 2 else m + 9
__pyx_t_2 = (__pyx_v_m > 2);
if (__pyx_t_2) {
__pyx_t_1 = (__pyx_v_m - 3);
} else {
__pyx_t_1 = (__pyx_v_m + 9);
}
__pyx_v_m_adj = __pyx_t_1;
+04726: cdef int doy = (153 * m_adj + 2) // 5 + d - 1
__pyx_v_doy = ((__Pyx_div_long(((0x99 * __pyx_v_m_adj) + 2), 5, 1) + __pyx_v_d) - 1);
+04727: cdef int doe = yoe * 365 + yoe // 4 - yoe // 100 + doy
__pyx_v_doe = ((((__pyx_v_yoe * 0x16D) + __Pyx_div_long(__pyx_v_yoe, 4, 1)) - __Pyx_div_long(__pyx_v_yoe, 0x64, 1)) + __pyx_v_doy);
+04728: return <int64_t>era * 146097 + <int64_t>doe - 719468
{
__pyx_r = (((((int64_t)__pyx_v_era) * 0x23AB1) + ((int64_t)__pyx_v_doe)) - 0xAFA6C);
}
goto __pyx_L0;
04729:
04730:
+04731: cdef pyobj_built_t* _dataframe_columnar_build_datetime_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_datetime_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
PyObject **__pyx_v_access;
PyObject *__pyx_v_cell;
PyObject *__pyx_v_cell_ref = 0;
int64_t *__pyx_v_values;
size_t __pyx_v_validity_bytes;
size_t __pyx_v_i;
PyObject *__pyx_v_dt = 0;
PyObject *__pyx_v_epoch_aware = 0;
PyObject *__pyx_v_datetime_cls = 0;
PyObject *__pyx_v_delta = 0;
int __pyx_v_year;
int __pyx_v_month;
int __pyx_v_day;
int __pyx_v_hour;
int __pyx_v_minute;
int __pyx_v_second;
int __pyx_v_us;
int64_t __pyx_v_days;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_XDECREF(__pyx_t_18);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_datetime_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_cell_ref);
__Pyx_XDECREF(__pyx_v_dt);
__Pyx_XDECREF(__pyx_v_epoch_aware);
__Pyx_XDECREF(__pyx_v_datetime_cls);
__Pyx_XDECREF(__pyx_v_delta);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
04732: col_t* col,
04733: size_t row_count,
04734: object df_col_name) except NULL:
+04735: cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
__pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+04736: if b == NULL:
__pyx_t_1 = (__pyx_v_b == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04737: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4737, __pyx_L1_error)
+04738: b.row_count = row_count
__pyx_v_b->row_count = __pyx_v_row_count;
04739:
+04740: cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
__pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
04741: cdef PyObject* cell
04742: # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
04743: cdef object cell_ref
+04744: cdef int64_t* values = NULL
__pyx_v_values = NULL;
+04745: cdef size_t validity_bytes = (row_count + 7) // 8
__pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
04746: cdef size_t i
04747: cdef object dt
+04748: cdef object epoch_aware = datetime.datetime(
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4748, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4748, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* … */ __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_mstate_global->__pyx_tuple[3], __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4748, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_epoch_aware = __pyx_t_4; __pyx_t_4 = 0;
+04749: 1970, 1, 1, tzinfo=datetime.timezone.utc)
__pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4749, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4749, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_timezone); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4749, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_utc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4749, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_tzinfo, __pyx_t_4) < (0)) __PYX_ERR(0, 4749, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+04750: cdef object datetime_cls = datetime.datetime
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4750, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4750, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_datetime_cls = __pyx_t_2; __pyx_t_2 = 0;
04751: cdef object delta
04752: cdef int year, month, day, hour, minute, second, us
04753: cdef int64_t days
04754:
+04755: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L1_error;
__pyx_L9_try_end:;
}
+04756: values = <int64_t*>calloc(row_count if row_count > 0 else 1,
__pyx_t_1 = (__pyx_v_row_count > 0);
if (__pyx_t_1) {
__pyx_t_9 = __pyx_v_row_count;
} else {
__pyx_t_9 = 1;
}
/* … */
__pyx_v_values = ((int64_t *)calloc(__pyx_t_9, (sizeof(int64_t))));
04757: sizeof(int64_t))
+04758: if values == NULL:
__pyx_t_1 = (__pyx_v_values == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04759: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4759, __pyx_L4_error)
+04760: b.data = <void*>values
__pyx_v_b->data = ((void *)__pyx_v_values);
+04761: if validity_bytes > 0:
__pyx_t_1 = (__pyx_v_validity_bytes > 0);
if (__pyx_t_1) {
/* … */
}
+04762: b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
__pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04763: if b.validity == NULL:
__pyx_t_1 = (__pyx_v_b->validity == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04764: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4764, __pyx_L4_error)
+04765: for i in range(row_count):
__pyx_t_9 = __pyx_v_row_count;
__pyx_t_10 = __pyx_t_9;
for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
__pyx_v_i = __pyx_t_11;
+04766: cell_ref = <object>access[i]
__pyx_t_2 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
__Pyx_INCREF(__pyx_t_2);
__Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_2);
__pyx_t_2 = 0;
+04767: cell = <PyObject*>cell_ref
__pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+04768: if _dataframe_is_null_pyobj(cell):
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
if (__pyx_t_1) {
/* … */
goto __pyx_L15;
}
+04769: b.has_nulls = True
__pyx_v_b->has_nulls = 1;
+04770: elif isinstance(<object>cell, datetime_cls):
__pyx_t_1 = PyObject_IsInstance(((PyObject *)__pyx_v_cell), __pyx_v_datetime_cls); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 4770, __pyx_L4_error) if (likely(__pyx_t_1)) { /* … */ goto __pyx_L15; }
+04771: dt = <object>cell
__pyx_t_2 = ((PyObject *)__pyx_v_cell);
__Pyx_INCREF(__pyx_t_2);
__Pyx_XDECREF_SET(__pyx_v_dt, __pyx_t_2);
__pyx_t_2 = 0;
+04772: if dt.tzinfo is None:
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dt, __pyx_mstate_global->__pyx_n_u_tzinfo); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4772, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = (__pyx_t_2 == Py_None); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_1) { /* … */ goto __pyx_L16; }
04773: # Fast path: C-level field extraction + Howard
04774: # Hinnant days_from_civil; no Python timedelta /
04775: # int arithmetic per row.
+04776: year = PyDateTime_GET_YEAR(dt)
__pyx_v_year = PyDateTime_GET_YEAR(__pyx_v_dt);
+04777: month = PyDateTime_GET_MONTH(dt)
__pyx_v_month = PyDateTime_GET_MONTH(__pyx_v_dt);
+04778: day = PyDateTime_GET_DAY(dt)
__pyx_v_day = PyDateTime_GET_DAY(__pyx_v_dt);
+04779: hour = PyDateTime_DATE_GET_HOUR(dt)
__pyx_v_hour = PyDateTime_DATE_GET_HOUR(__pyx_v_dt);
+04780: minute = PyDateTime_DATE_GET_MINUTE(dt)
__pyx_v_minute = PyDateTime_DATE_GET_MINUTE(__pyx_v_dt);
+04781: second = PyDateTime_DATE_GET_SECOND(dt)
__pyx_v_second = PyDateTime_DATE_GET_SECOND(__pyx_v_dt);
+04782: us = PyDateTime_DATE_GET_MICROSECOND(dt)
__pyx_v_us = PyDateTime_DATE_GET_MICROSECOND(__pyx_v_dt);
+04783: days = _days_from_civil(year, month, day)
__pyx_v_days = __pyx_f_7questdb_7_client__days_from_civil(__pyx_v_year, __pyx_v_month, __pyx_v_day);
+04784: values[i] = (
(__pyx_v_values[__pyx_v_i]) = (((((__pyx_v_days * ((int64_t)0x141DD76000)) + (((int64_t)__pyx_v_hour) * ((int64_t)0xD693A400))) + (((int64_t)__pyx_v_minute) * 0x3938700)) + (((int64_t)__pyx_v_second) * 0xF4240)) + ((int64_t)__pyx_v_us));
04785: days * <int64_t>86_400_000_000
04786: + <int64_t>hour * <int64_t>3_600_000_000
04787: + <int64_t>minute * 60_000_000
04788: + <int64_t>second * 1_000_000
04789: + <int64_t>us)
04790: else:
+04791: delta = dt - epoch_aware
/*else*/ {
__pyx_t_2 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_dt, __pyx_v_epoch_aware); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4791, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_XDECREF_SET(__pyx_v_delta, __pyx_t_2);
__pyx_t_2 = 0;
+04792: values[i] = (
(__pyx_v_values[__pyx_v_i]) = (((((int64_t)__pyx_t_12) * ((int64_t)0x141DD76000)) + (((int64_t)__pyx_t_13) * 0xF4240)) + ((int64_t)__pyx_t_14));
}
__pyx_L16:;
+04793: <int64_t>delta.days * <int64_t>86_400_000_000
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_delta, __pyx_mstate_global->__pyx_n_u_days); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4793, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_12 = __Pyx_PyLong_As_int64_t(__pyx_t_2); if (unlikely((__pyx_t_12 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4793, __pyx_L4_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+04794: + <int64_t>delta.seconds * 1_000_000
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_delta, __pyx_mstate_global->__pyx_n_u_seconds); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4794, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_13 = __Pyx_PyLong_As_int64_t(__pyx_t_2); if (unlikely((__pyx_t_13 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4794, __pyx_L4_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+04795: + <int64_t>delta.microseconds)
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_delta, __pyx_mstate_global->__pyx_n_u_microseconds); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4795, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_14 = __Pyx_PyLong_As_int64_t(__pyx_t_2); if (unlikely((__pyx_t_14 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4795, __pyx_L4_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+04796: if b.validity != NULL:
__pyx_t_1 = (__pyx_v_b->validity != NULL);
if (__pyx_t_1) {
/* … */
}
+04797: _pyobj_set_validity_bit(b.validity, i)
__pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
04798: else:
+04799: raise QuestDBError(
/*else*/ {
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4799, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_3);
+04800: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4800, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4800, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+04801: f'Bad column {df_col_name!r} at row {i}: expected '
__pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4801, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_16 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4801, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_16); /* … */ __pyx_t_20 = 54; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_20 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_19[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_19[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_19[5]); #endif __pyx_t_21 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_21 |= __Pyx_PyUnicode_KIND_04(__pyx_t_19[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_19[5]); #endif __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_19, 7, __pyx_t_20, __pyx_t_21); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4801, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __pyx_t_22 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_22 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_15, __pyx_t_17}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_22, (3-__pyx_t_22) | (__pyx_t_22*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4799, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 4799, __pyx_L4_error) } __pyx_L15:; }
+04802: f'datetime.datetime, got {_fqn(type(<object>cell))}.')
__pyx_t_17 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4802, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_18 = __Pyx_PyUnicode_Unicode(__pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4802, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_19[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_19[1] = __pyx_t_5; __pyx_t_19[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_19[3] = __pyx_t_16; __pyx_t_19[4] = __pyx_mstate_global->__pyx_kp_u_expected_datetime_datetime_got; __pyx_t_19[5] = __pyx_t_18; __pyx_t_19[6] = __pyx_mstate_global->__pyx_kp_u__3;
04803:
+04804: if not b.has_nulls and b.validity != NULL:
__pyx_t_23 = (!__pyx_v_b->has_nulls);
if (__pyx_t_23) {
} else {
__pyx_t_1 = __pyx_t_23;
goto __pyx_L19_bool_binop_done;
}
__pyx_t_23 = (__pyx_v_b->validity != NULL);
__pyx_t_1 = __pyx_t_23;
__pyx_L19_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+04805: free(b.validity)
free(__pyx_v_b->validity);
+04806: b.validity = NULL
__pyx_v_b->validity = NULL;
+04807: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_datetime_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_17) < 0) __PYX_ERR(0, 4807, __pyx_L6_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_17);
+04808: pyobj_built_free(b)
__pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04809: raise
__Pyx_GIVEREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_3); __Pyx_XGIVEREF(__pyx_t_17); __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_3, __pyx_t_17); __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_17 = 0; __PYX_ERR(0, 4809, __pyx_L6_except_error) }
04810:
+04811: return b
{
__pyx_r = __pyx_v_b;
}
goto __pyx_L0;
04812:
04813:
+04814: cdef pyobj_built_t* _dataframe_columnar_build_bytes_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_bytes_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
PyObject **__pyx_v_access;
PyObject *__pyx_v_cell;
PyObject *__pyx_v_cell_ref = 0;
Py_ssize_t __pyx_v_blob_len;
char const *__pyx_v_blob_buf;
PyObject *__pyx_v_py_cell = 0;
Py_buffer __pyx_v_view;
int __pyx_v_release_view;
size_t __pyx_v_validity_bytes;
size_t __pyx_v_bytes_cap;
uint8_t *__pyx_v_new_bytes;
size_t __pyx_v_bytes_used;
size_t __pyx_v_i;
PyObject *__pyx_v_exc = NULL;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_XDECREF(__pyx_t_18);
__Pyx_XDECREF(__pyx_t_19);
__Pyx_XDECREF(__pyx_t_23);
__Pyx_XDECREF(__pyx_t_25);
__Pyx_XDECREF(__pyx_t_26);
__Pyx_XDECREF(__pyx_t_27);
__Pyx_XDECREF(__pyx_t_29);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_bytes_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_cell_ref);
__Pyx_XDECREF(__pyx_v_py_cell);
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
04815: col_t* col,
04816: size_t row_count,
04817: object df_col_name) except NULL:
+04818: cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
__pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+04819: if b == NULL:
__pyx_t_1 = (__pyx_v_b == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04820: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4820, __pyx_L1_error)
+04821: b.row_count = row_count
__pyx_v_b->row_count = __pyx_v_row_count;
04822:
+04823: cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
__pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
04824: cdef PyObject* cell
04825: # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
04826: cdef object cell_ref
04827: cdef Py_ssize_t blob_len
04828: cdef const char* blob_buf
04829: cdef object py_cell
04830: cdef Py_buffer view
04831: cdef bint release_view
+04832: cdef size_t validity_bytes = (row_count + 7) // 8
__pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
+04833: cdef size_t bytes_cap = 16
__pyx_v_bytes_cap = 16;
04834: cdef uint8_t* new_bytes
+04835: cdef size_t bytes_used = 0
__pyx_v_bytes_used = 0;
04836: cdef size_t i
04837:
+04838: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
__Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
__Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
__Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
__Pyx_XDECREF(__pyx_t_29); __pyx_t_29 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L9_try_end:;
}
+04839: b.str_offsets = <int32_t*>calloc(row_count + 1, sizeof(int32_t))
__pyx_v_b->str_offsets = ((int32_t *)calloc((__pyx_v_row_count + 1), (sizeof(int32_t))));
+04840: if b.str_offsets == NULL:
__pyx_t_1 = (__pyx_v_b->str_offsets == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04841: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4841, __pyx_L4_error)
+04842: if validity_bytes > 0:
__pyx_t_1 = (__pyx_v_validity_bytes > 0);
if (__pyx_t_1) {
/* … */
}
+04843: b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
__pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04844: if b.validity == NULL:
__pyx_t_1 = (__pyx_v_b->validity == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04845: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4845, __pyx_L4_error)
+04846: b.str_bytes = <uint8_t*>malloc(bytes_cap)
__pyx_v_b->str_bytes = ((uint8_t *)malloc(__pyx_v_bytes_cap));
+04847: if b.str_bytes == NULL:
__pyx_t_1 = (__pyx_v_b->str_bytes == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04848: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4848, __pyx_L4_error)
04849:
+04850: for i in range(row_count):
__pyx_t_5 = __pyx_v_row_count;
__pyx_t_6 = __pyx_t_5;
for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
__pyx_v_i = __pyx_t_7;
+04851: cell_ref = <object>access[i]
__pyx_t_8 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
__Pyx_INCREF(__pyx_t_8);
__Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_8);
__pyx_t_8 = 0;
+04852: cell = <PyObject*>cell_ref
__pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+04853: release_view = False
__pyx_v_release_view = 0;
+04854: try:
/*try:*/ {
+04855: if PyBytes_Check(<object>cell):
__pyx_t_1 = PyBytes_Check(((PyObject *)__pyx_v_cell));
if (__pyx_t_1) {
/* … */
goto __pyx_L21;
}
+04856: blob_len = PyBytes_GET_SIZE(<object>cell)
__pyx_v_blob_len = PyBytes_GET_SIZE(((PyObject *)__pyx_v_cell));
+04857: blob_buf = PyBytes_AsString(<object>cell)
__pyx_t_9 = PyBytes_AsString(((PyObject *)__pyx_v_cell)); if (unlikely(__pyx_t_9 == ((void *)NULL))) __PYX_ERR(0, 4857, __pyx_L19_error) __pyx_v_blob_buf = __pyx_t_9;
+04858: elif PyByteArray_Check(<object>cell):
__pyx_t_1 = PyByteArray_Check(((PyObject *)__pyx_v_cell));
if (__pyx_t_1) {
/* … */
goto __pyx_L21;
}
+04859: blob_len = PyByteArray_Size(<object>cell)
__pyx_v_blob_len = PyByteArray_Size(((PyObject *)__pyx_v_cell));
+04860: blob_buf = PyByteArray_AsString(<object>cell)
__pyx_v_blob_buf = PyByteArray_AsString(((PyObject *)__pyx_v_cell));
+04861: elif PyMemoryView_Check(<object>cell):
__pyx_t_1 = PyMemoryView_Check(((PyObject *)__pyx_v_cell));
if (__pyx_t_1) {
/* … */
goto __pyx_L21;
}
+04862: py_cell = <object>cell
__pyx_t_8 = ((PyObject *)__pyx_v_cell);
__Pyx_INCREF(__pyx_t_8);
__Pyx_XDECREF_SET(__pyx_v_py_cell, __pyx_t_8);
__pyx_t_8 = 0;
04863: # A released memoryview raises ValueError from the
04864: # `itemsize` and `c_contiguous` reads, not from
04865: # `PyObject_GetBuffer`, so those reads sit inside the
04866: # handler that names the column and the row.
+04867: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
goto __pyx_L29_try_end;
__pyx_L22_error:;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L24_except_error:;
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
goto __pyx_L19_error;
__pyx_L29_try_end:;
}
+04868: if (py_cell.itemsize != 1
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_cell, __pyx_mstate_global->__pyx_n_u_itemsize); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4868, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_13 = (__Pyx_PyLong_BoolNeObjC(__pyx_t_8, __pyx_mstate_global->__pyx_int_1, 1, 0)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 4868, __pyx_L22_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (!__pyx_t_13) { } else { __pyx_t_1 = __pyx_t_13; goto __pyx_L31_bool_binop_done; } /* … */ if (unlikely(__pyx_t_1)) { /* … */ }
+04869: or not py_cell.c_contiguous):
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_cell, __pyx_mstate_global->__pyx_n_u_c_contiguous); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4869, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 4869, __pyx_L22_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_14 = (!__pyx_t_13); __pyx_t_1 = __pyx_t_14; __pyx_L31_bool_binop_done:;
+04870: raise QuestDBError(
__pyx_t_15 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4870, __pyx_L22_error)
__Pyx_GOTREF(__pyx_t_16);
+04871: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4871, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4871, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+04872: f'Bad column {df_col_name!r} at row {i}: '
__pyx_t_17 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4872, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_19 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4872, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_20[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_20[1] = __pyx_t_17; __pyx_t_20[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_20[3] = __pyx_t_19; __pyx_t_20[4] = __pyx_mstate_global->__pyx_kp_u_memoryview_BINARY_values_must_b; __pyx_t_21 = 87; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20[3]); #endif __pyx_t_22 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_22 |= __Pyx_PyUnicode_KIND_04(__pyx_t_20[1]); #endif __pyx_t_23 = __Pyx_PyUnicode_Join(__pyx_t_20, 5, __pyx_t_21, __pyx_t_22); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 4872, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_23); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __pyx_t_24 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_16))) { __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_16); assert(__pyx_t_15); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_16); __Pyx_INCREF(__pyx_t_15); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_16, __pyx__function); __pyx_t_24 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_18, __pyx_t_23}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_16, __pyx_callargs+__pyx_t_24, (3-__pyx_t_24) | (__pyx_t_24*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4870, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 4870, __pyx_L22_error)
04873: 'memoryview BINARY values must be '
04874: 'C-contiguous with one-byte items.')
+04875: PyObject_GetBuffer(py_cell, &view, PyBUF_SIMPLE)
__pyx_t_22 = PyObject_GetBuffer(__pyx_v_py_cell, (&__pyx_v_view), PyBUF_SIMPLE); if (unlikely(__pyx_t_22 == ((int)-1))) __PYX_ERR(0, 4875, __pyx_L22_error)
+04876: except (BufferError, ValueError) as exc:
__pyx_t_22 = __Pyx_PyErr_ExceptionMatches2(((PyObject *)(((PyTypeObject*)PyExc_BufferError))), ((PyObject *)(((PyTypeObject*)PyExc_ValueError))));
if (__pyx_t_22) {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_bytes_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_16, &__pyx_t_23) < 0) __PYX_ERR(0, 4876, __pyx_L24_except_error)
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_23);
__Pyx_INCREF(__pyx_t_16);
__pyx_v_exc = __pyx_t_16;
/*try:*/ {
/* … */
/*finally:*/ {
__pyx_L38_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_32 = 0; __pyx_t_33 = 0; __pyx_t_34 = 0; __pyx_t_35 = 0; __pyx_t_36 = 0; __pyx_t_37 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
__Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
__Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
__Pyx_XDECREF(__pyx_t_29); __pyx_t_29 = 0;
__Pyx_ExceptionSwap(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
if ( unlikely(__Pyx_GetException(&__pyx_t_32, &__pyx_t_33, &__pyx_t_34) < 0)) __Pyx_ErrFetch(&__pyx_t_32, &__pyx_t_33, &__pyx_t_34);
__Pyx_XGOTREF(__pyx_t_32);
__Pyx_XGOTREF(__pyx_t_33);
__Pyx_XGOTREF(__pyx_t_34);
__Pyx_XGOTREF(__pyx_t_35);
__Pyx_XGOTREF(__pyx_t_36);
__Pyx_XGOTREF(__pyx_t_37);
__pyx_t_22 = __pyx_lineno; __pyx_t_30 = __pyx_clineno; __pyx_t_31 = __pyx_filename;
{
__Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
}
__Pyx_XGIVEREF(__pyx_t_35);
__Pyx_XGIVEREF(__pyx_t_36);
__Pyx_XGIVEREF(__pyx_t_37);
__Pyx_ExceptionReset(__pyx_t_35, __pyx_t_36, __pyx_t_37);
__Pyx_XGIVEREF(__pyx_t_32);
__Pyx_XGIVEREF(__pyx_t_33);
__Pyx_XGIVEREF(__pyx_t_34);
__Pyx_ErrRestore(__pyx_t_32, __pyx_t_33, __pyx_t_34);
__pyx_t_32 = 0; __pyx_t_33 = 0; __pyx_t_34 = 0; __pyx_t_35 = 0; __pyx_t_36 = 0; __pyx_t_37 = 0;
__pyx_lineno = __pyx_t_22; __pyx_clineno = __pyx_t_30; __pyx_filename = __pyx_t_31;
goto __pyx_L24_except_error;
}
}
}
goto __pyx_L24_except_error;
+04877: raise QuestDBError(
__pyx_t_15 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4877, __pyx_L38_error)
__Pyx_GOTREF(__pyx_t_19);
+04878: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4878, __pyx_L38_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_25 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 4878, __pyx_L38_error) __Pyx_GOTREF(__pyx_t_25); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+04879: f'Bad column {df_col_name!r} at row {i}: '
__pyx_t_17 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4879, __pyx_L38_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_26 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 4879, __pyx_L38_error) __Pyx_GOTREF(__pyx_t_26); /* … */ __pyx_t_21 = 54; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_28[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_28[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_28[5]); #endif __pyx_t_22 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_22 |= __Pyx_PyUnicode_KIND_04(__pyx_t_28[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_28[5]); #endif __pyx_t_29 = __Pyx_PyUnicode_Join(__pyx_t_28, 6, __pyx_t_21, __pyx_t_22); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 4879, __pyx_L38_error) __Pyx_GOTREF(__pyx_t_29); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0; __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0; __pyx_t_24 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_19))) { __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_19); assert(__pyx_t_15); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_19); __Pyx_INCREF(__pyx_t_15); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_19, __pyx__function); __pyx_t_24 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_25, __pyx_t_29}; __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_19, __pyx_callargs+__pyx_t_24, (3-__pyx_t_24) | (__pyx_t_24*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4877, __pyx_L38_error) __Pyx_GOTREF(__pyx_t_18); }
+04880: f'invalid memoryview BINARY value: {exc}') from exc
__pyx_t_27 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 4880, __pyx_L38_error) __Pyx_GOTREF(__pyx_t_27); __pyx_t_28[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_28[1] = __pyx_t_17; __pyx_t_28[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_28[3] = __pyx_t_26; __pyx_t_28[4] = __pyx_mstate_global->__pyx_kp_u_invalid_memoryview_BINARY_value; __pyx_t_28[5] = __pyx_t_27; /* … */ __Pyx_Raise(__pyx_t_18, 0, 0, __pyx_v_exc); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 4877, __pyx_L38_error) }
+04881: release_view = True
__pyx_v_release_view = 1;
+04882: blob_len = view.len
__pyx_t_21 = __pyx_v_view.len;
__pyx_v_blob_len = __pyx_t_21;
+04883: blob_buf = <const char*>view.buf
__pyx_v_blob_buf = ((char const *)__pyx_v_view.buf);
+04884: elif _dataframe_is_null_pyobj(cell):
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
if (likely(__pyx_t_1)) {
/* … */
}
+04885: b.str_offsets[i + 1] = <int32_t>bytes_used
(__pyx_v_b->str_offsets[(__pyx_v_i + 1)]) = ((int32_t)__pyx_v_bytes_used);
+04886: b.has_nulls = True
__pyx_v_b->has_nulls = 1;
+04887: continue
goto __pyx_L16_continue;
04888: else:
+04889: raise QuestDBError(
/*else*/ {
__pyx_t_16 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4889, __pyx_L19_error)
__Pyx_GOTREF(__pyx_t_8);
+04890: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4890, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4890, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+04891: f'Bad column {df_col_name!r} at row {i}: expected '
__pyx_t_18 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4891, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_29 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 4891, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_29); /* … */ __pyx_t_21 = 68; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_38[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_38[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_38[5]); #endif __pyx_t_30 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_30 |= __Pyx_PyUnicode_KIND_04(__pyx_t_38[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_38[5]); #endif __pyx_t_25 = __Pyx_PyUnicode_Join(__pyx_t_38, 7, __pyx_t_21, __pyx_t_30); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 4891, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_25); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __pyx_t_24 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_8))) { __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_8); assert(__pyx_t_16); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8); __Pyx_INCREF(__pyx_t_16); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_8, __pyx__function); __pyx_t_24 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_16, __pyx_t_19, __pyx_t_25}; __pyx_t_23 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_24, (3-__pyx_t_24) | (__pyx_t_24*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 4889, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_23); } __Pyx_Raise(__pyx_t_23, 0, 0, 0); __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0; __PYX_ERR(0, 4889, __pyx_L19_error) } __pyx_L21:;
04892: 'bytes, bytearray, or memoryview, '
+04893: f'got {_fqn(type(<object>cell))}.')
__pyx_t_25 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 4893, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_25); __pyx_t_15 = __Pyx_PyUnicode_Unicode(__pyx_t_25); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4893, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __pyx_t_38[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_38[1] = __pyx_t_18; __pyx_t_38[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_38[3] = __pyx_t_29; __pyx_t_38[4] = __pyx_mstate_global->__pyx_kp_u_expected_bytes_bytearray_or_mem; __pyx_t_38[5] = __pyx_t_15; __pyx_t_38[6] = __pyx_mstate_global->__pyx_kp_u__3;
04894:
+04895: if bytes_used + <size_t>blob_len > <size_t>2_147_483_647:
__pyx_t_1 = ((__pyx_v_bytes_used + ((size_t)__pyx_v_blob_len)) > ((size_t)0x7FFFFFFF));
if (unlikely(__pyx_t_1)) {
/* … */
}
+04896: raise QuestDBError(
__pyx_t_8 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 4896, __pyx_L19_error)
__Pyx_GOTREF(__pyx_t_25);
+04897: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4897, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4897, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+04898: f'Bad column {df_col_name!r}: column total bytes '
__pyx_t_19 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4898, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_39[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_39[1] = __pyx_t_19; __pyx_t_39[2] = __pyx_mstate_global->__pyx_kp_u_column_total_bytes_exceeds_the; __pyx_t_21 = 87; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_39[1]); #endif __pyx_t_30 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_30 |= __Pyx_PyUnicode_KIND_04(__pyx_t_39[1]); #endif __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_39, 3, __pyx_t_21, __pyx_t_30); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4898, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __pyx_t_24 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_25))) { __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_25); assert(__pyx_t_8); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_25); __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_25, __pyx__function); __pyx_t_24 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_16, __pyx_t_15}; __pyx_t_23 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_25, __pyx_callargs+__pyx_t_24, (3-__pyx_t_24) | (__pyx_t_24*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 4896, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_23); } __Pyx_Raise(__pyx_t_23, 0, 0, 0); __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0; __PYX_ERR(0, 4896, __pyx_L19_error)
04899: 'exceeds the QWP wire binary offset table '
04900: 'limit (2 GiB).')
+04901: while bytes_used + <size_t>blob_len > bytes_cap:
while (1) {
__pyx_t_1 = ((__pyx_v_bytes_used + ((size_t)__pyx_v_blob_len)) > __pyx_v_bytes_cap);
if (!__pyx_t_1) break;
+04902: bytes_cap *= 2
__pyx_v_bytes_cap = (__pyx_v_bytes_cap * 2);
+04903: new_bytes = <uint8_t*>realloc(b.str_bytes, bytes_cap)
__pyx_v_new_bytes = ((uint8_t *)realloc(__pyx_v_b->str_bytes, __pyx_v_bytes_cap));
+04904: if new_bytes == NULL:
__pyx_t_1 = (__pyx_v_new_bytes == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04905: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4905, __pyx_L19_error)
+04906: b.str_bytes = new_bytes
__pyx_v_b->str_bytes = __pyx_v_new_bytes;
}
+04907: if blob_len > 0:
__pyx_t_1 = (__pyx_v_blob_len > 0);
if (__pyx_t_1) {
/* … */
}
+04908: memcpy(b.str_bytes + bytes_used, blob_buf, <size_t>blob_len)
(void)(memcpy((__pyx_v_b->str_bytes + __pyx_v_bytes_used), __pyx_v_blob_buf, ((size_t)__pyx_v_blob_len)));
+04909: bytes_used += <size_t>blob_len
__pyx_v_bytes_used = (__pyx_v_bytes_used + ((size_t)__pyx_v_blob_len));
+04910: b.str_offsets[i + 1] = <int32_t>bytes_used
(__pyx_v_b->str_offsets[(__pyx_v_i + 1)]) = ((int32_t)__pyx_v_bytes_used);
+04911: if b.validity != NULL:
__pyx_t_1 = (__pyx_v_b->validity != NULL);
if (__pyx_t_1) {
/* … */
}
}
+04912: _pyobj_set_validity_bit(b.validity, i)
__pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
04913: finally:
+04914: if release_view:
/*finally:*/ {
/*normal exit:*/{
if (__pyx_v_release_view) {
/* … */
}
goto __pyx_L20;
}
__pyx_L19_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_37 = 0; __pyx_t_36 = 0; __pyx_t_35 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
__Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
__Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
__Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
__Pyx_XDECREF(__pyx_t_29); __pyx_t_29 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_ExceptionSwap(&__pyx_t_37, &__pyx_t_36, &__pyx_t_35);
if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_37);
__Pyx_XGOTREF(__pyx_t_36);
__Pyx_XGOTREF(__pyx_t_35);
__pyx_t_30 = __pyx_lineno; __pyx_t_22 = __pyx_clineno; __pyx_t_31 = __pyx_filename;
{
if (__pyx_v_release_view) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_37);
__Pyx_XGIVEREF(__pyx_t_36);
__Pyx_XGIVEREF(__pyx_t_35);
__Pyx_ExceptionReset(__pyx_t_37, __pyx_t_36, __pyx_t_35);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ErrRestore(__pyx_t_12, __pyx_t_11, __pyx_t_10);
__pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_37 = 0; __pyx_t_36 = 0; __pyx_t_35 = 0;
__pyx_lineno = __pyx_t_30; __pyx_clineno = __pyx_t_22; __pyx_filename = __pyx_t_31;
goto __pyx_L4_error;
}
__pyx_L16_continue: {
if (__pyx_v_release_view) {
/* … */
}
goto __pyx_L14_continue;
}
__pyx_L20:;
}
__pyx_L14_continue:;
}
+04915: PyBuffer_Release(&view)
PyBuffer_Release((&__pyx_v_view)); /* … */ PyBuffer_Release((&__pyx_v_view)); /* … */ PyBuffer_Release((&__pyx_v_view));
04916:
+04917: b.str_bytes_len = bytes_used
__pyx_v_b->str_bytes_len = __pyx_v_bytes_used;
+04918: if not b.has_nulls and b.validity != NULL:
__pyx_t_14 = (!__pyx_v_b->has_nulls);
if (__pyx_t_14) {
} else {
__pyx_t_1 = __pyx_t_14;
goto __pyx_L58_bool_binop_done;
}
__pyx_t_14 = (__pyx_v_b->validity != NULL);
__pyx_t_1 = __pyx_t_14;
__pyx_L58_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+04919: free(b.validity)
free(__pyx_v_b->validity);
+04920: b.validity = NULL
__pyx_v_b->validity = NULL;
+04921: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_bytes_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_23, &__pyx_t_25, &__pyx_t_15) < 0) __PYX_ERR(0, 4921, __pyx_L6_except_error)
__Pyx_XGOTREF(__pyx_t_23);
__Pyx_XGOTREF(__pyx_t_25);
__Pyx_XGOTREF(__pyx_t_15);
+04922: pyobj_built_free(b)
__pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04923: raise
__Pyx_GIVEREF(__pyx_t_23); __Pyx_GIVEREF(__pyx_t_25); __Pyx_XGIVEREF(__pyx_t_15); __Pyx_ErrRestoreWithState(__pyx_t_23, __pyx_t_25, __pyx_t_15); __pyx_t_23 = 0; __pyx_t_25 = 0; __pyx_t_15 = 0; __PYX_ERR(0, 4923, __pyx_L6_except_error) }
04924:
+04925: return b
{
__pyx_r = __pyx_v_b;
}
goto __pyx_L0;
04926:
04927:
+04928: cdef pyobj_built_t* _dataframe_columnar_build_fsb_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_fsb_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name, size_t __pyx_v_width, PyObject *__pyx_v_type_name) {
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
PyObject **__pyx_v_access;
PyObject *__pyx_v_cell;
PyObject *__pyx_v_cell_ref = 0;
uint8_t *__pyx_v_buf;
size_t __pyx_v_buf_bytes;
size_t __pyx_v_validity_bytes;
size_t __pyx_v_i;
Py_ssize_t __pyx_v_blob_len;
char const *__pyx_v_blob_buf;
PyObject *__pyx_v_py_cell = 0;
Py_buffer __pyx_v_view;
int __pyx_v_release_view;
PyObject *__pyx_v_exc = NULL;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_XDECREF(__pyx_t_18);
__Pyx_XDECREF(__pyx_t_19);
__Pyx_XDECREF(__pyx_t_23);
__Pyx_XDECREF(__pyx_t_25);
__Pyx_XDECREF(__pyx_t_26);
__Pyx_XDECREF(__pyx_t_27);
__Pyx_XDECREF(__pyx_t_29);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_fsb_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_cell_ref);
__Pyx_XDECREF(__pyx_v_py_cell);
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
04929: col_t* col,
04930: size_t row_count,
04931: object df_col_name,
04932: size_t width,
04933: str type_name) except NULL:
04934: """
04935: Walk an object column of `bytes` claimed as UUID or LONG256 and
04936: produce `width` bytes per row + LSB-packed validity bitmap.
04937:
04938: ``to_pandas(dtype_backend='numpy_nullable')`` hands a fixed-size
04939: binary column back as object-dtype `bytes`, so the raw rows are
04940: already in the order the wire wants: canonical RFC 4122 big-endian
04941: for UUID, little-endian limbs for LONG256. Every non-null cell must
04942: be exactly `width` bytes — a column whose values no longer are is
04943: refused rather than written to a column of the claimed type.
04944: """
+04945: cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
__pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+04946: if b == NULL:
__pyx_t_1 = (__pyx_v_b == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04947: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4947, __pyx_L1_error)
+04948: b.row_count = row_count
__pyx_v_b->row_count = __pyx_v_row_count;
04949:
+04950: cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
__pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
04951: cdef PyObject* cell
04952: # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
04953: cdef object cell_ref
+04954: cdef uint8_t* buf = NULL
__pyx_v_buf = NULL;
+04955: cdef size_t buf_bytes = row_count * width if row_count > 0 else width
__pyx_t_1 = (__pyx_v_row_count > 0);
if (__pyx_t_1) {
__pyx_t_2 = (__pyx_v_row_count * __pyx_v_width);
} else {
__pyx_t_2 = __pyx_v_width;
}
__pyx_v_buf_bytes = __pyx_t_2;
+04956: cdef size_t validity_bytes = (row_count + 7) // 8
__pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
04957: cdef size_t i
04958: cdef Py_ssize_t blob_len
04959: cdef const char* blob_buf
04960: cdef object py_cell
04961: cdef Py_buffer view
04962: cdef bint release_view
04963:
+04964: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
__Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
__Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
__Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
__Pyx_XDECREF(__pyx_t_29); __pyx_t_29 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L1_error;
__pyx_L9_try_end:;
}
+04965: buf = <uint8_t*>calloc(buf_bytes, sizeof(uint8_t))
__pyx_v_buf = ((uint8_t *)calloc(__pyx_v_buf_bytes, (sizeof(uint8_t))));
+04966: if buf == NULL:
__pyx_t_1 = (__pyx_v_buf == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04967: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4967, __pyx_L4_error)
+04968: b.data = <void*>buf
__pyx_v_b->data = ((void *)__pyx_v_buf);
+04969: if validity_bytes > 0:
__pyx_t_1 = (__pyx_v_validity_bytes > 0);
if (__pyx_t_1) {
/* … */
}
+04970: b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
__pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04971: if b.validity == NULL:
__pyx_t_1 = (__pyx_v_b->validity == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+04972: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 4972, __pyx_L4_error)
+04973: for i in range(row_count):
__pyx_t_2 = __pyx_v_row_count;
__pyx_t_6 = __pyx_t_2;
for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
__pyx_v_i = __pyx_t_7;
+04974: cell_ref = <object>access[i]
__pyx_t_8 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
__Pyx_INCREF(__pyx_t_8);
__Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_8);
__pyx_t_8 = 0;
+04975: cell = <PyObject*>cell_ref
__pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+04976: release_view = False
__pyx_v_release_view = 0;
+04977: try:
/*try:*/ {
+04978: if PyBytes_Check(<object>cell):
__pyx_t_1 = PyBytes_Check(((PyObject *)__pyx_v_cell));
if (__pyx_t_1) {
/* … */
goto __pyx_L20;
}
+04979: blob_len = PyBytes_GET_SIZE(<object>cell)
__pyx_v_blob_len = PyBytes_GET_SIZE(((PyObject *)__pyx_v_cell));
+04980: blob_buf = PyBytes_AsString(<object>cell)
__pyx_t_9 = PyBytes_AsString(((PyObject *)__pyx_v_cell)); if (unlikely(__pyx_t_9 == ((void *)NULL))) __PYX_ERR(0, 4980, __pyx_L18_error) __pyx_v_blob_buf = __pyx_t_9;
+04981: elif PyByteArray_Check(<object>cell):
__pyx_t_1 = PyByteArray_Check(((PyObject *)__pyx_v_cell));
if (__pyx_t_1) {
/* … */
goto __pyx_L20;
}
+04982: blob_len = PyByteArray_Size(<object>cell)
__pyx_v_blob_len = PyByteArray_Size(((PyObject *)__pyx_v_cell));
+04983: blob_buf = PyByteArray_AsString(<object>cell)
__pyx_v_blob_buf = PyByteArray_AsString(((PyObject *)__pyx_v_cell));
+04984: elif PyMemoryView_Check(<object>cell):
__pyx_t_1 = PyMemoryView_Check(((PyObject *)__pyx_v_cell));
if (__pyx_t_1) {
/* … */
goto __pyx_L20;
}
+04985: py_cell = <object>cell
__pyx_t_8 = ((PyObject *)__pyx_v_cell);
__Pyx_INCREF(__pyx_t_8);
__Pyx_XDECREF_SET(__pyx_v_py_cell, __pyx_t_8);
__pyx_t_8 = 0;
+04986: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
goto __pyx_L28_try_end;
__pyx_L21_error:;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L23_except_error:;
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
goto __pyx_L18_error;
__pyx_L28_try_end:;
}
+04987: if (py_cell.itemsize != 1
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_cell, __pyx_mstate_global->__pyx_n_u_itemsize); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4987, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_13 = (__Pyx_PyLong_BoolNeObjC(__pyx_t_8, __pyx_mstate_global->__pyx_int_1, 1, 0)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 4987, __pyx_L21_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (!__pyx_t_13) { } else { __pyx_t_1 = __pyx_t_13; goto __pyx_L30_bool_binop_done; } /* … */ if (unlikely(__pyx_t_1)) { /* … */ }
+04988: or not py_cell.c_contiguous):
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_cell, __pyx_mstate_global->__pyx_n_u_c_contiguous); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4988, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 4988, __pyx_L21_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_14 = (!__pyx_t_13); __pyx_t_1 = __pyx_t_14; __pyx_L30_bool_binop_done:;
+04989: raise QuestDBError(
__pyx_t_15 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4989, __pyx_L21_error)
__Pyx_GOTREF(__pyx_t_16);
+04990: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4990, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4990, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+04991: f'Bad column {df_col_name!r} at row {i}: '
__pyx_t_17 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4991, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_19 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4991, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_20[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_20[1] = __pyx_t_17; __pyx_t_20[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_20[3] = __pyx_t_19; __pyx_t_20[4] = __pyx_mstate_global->__pyx_kp_u_memoryview_values_must_be_C_con; __pyx_t_21 = 80; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20[3]); #endif __pyx_t_22 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_22 |= __Pyx_PyUnicode_KIND_04(__pyx_t_20[1]); #endif __pyx_t_23 = __Pyx_PyUnicode_Join(__pyx_t_20, 5, __pyx_t_21, __pyx_t_22); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 4991, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_23); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __pyx_t_24 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_16))) { __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_16); assert(__pyx_t_15); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_16); __Pyx_INCREF(__pyx_t_15); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_16, __pyx__function); __pyx_t_24 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_18, __pyx_t_23}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_16, __pyx_callargs+__pyx_t_24, (3-__pyx_t_24) | (__pyx_t_24*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4989, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 4989, __pyx_L21_error)
04992: 'memoryview values must be C-contiguous '
04993: 'with one-byte items.')
+04994: PyObject_GetBuffer(py_cell, &view, PyBUF_SIMPLE)
__pyx_t_22 = PyObject_GetBuffer(__pyx_v_py_cell, (&__pyx_v_view), PyBUF_SIMPLE); if (unlikely(__pyx_t_22 == ((int)-1))) __PYX_ERR(0, 4994, __pyx_L21_error)
+04995: except (BufferError, ValueError) as exc:
__pyx_t_22 = __Pyx_PyErr_ExceptionMatches2(((PyObject *)(((PyTypeObject*)PyExc_BufferError))), ((PyObject *)(((PyTypeObject*)PyExc_ValueError))));
if (__pyx_t_22) {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_fsb_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_16, &__pyx_t_23) < 0) __PYX_ERR(0, 4995, __pyx_L23_except_error)
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_23);
__Pyx_INCREF(__pyx_t_16);
__pyx_v_exc = __pyx_t_16;
/*try:*/ {
/* … */
/*finally:*/ {
__pyx_L37_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_32 = 0; __pyx_t_33 = 0; __pyx_t_34 = 0; __pyx_t_35 = 0; __pyx_t_36 = 0; __pyx_t_37 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
__Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
__Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
__Pyx_XDECREF(__pyx_t_29); __pyx_t_29 = 0;
__Pyx_ExceptionSwap(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
if ( unlikely(__Pyx_GetException(&__pyx_t_32, &__pyx_t_33, &__pyx_t_34) < 0)) __Pyx_ErrFetch(&__pyx_t_32, &__pyx_t_33, &__pyx_t_34);
__Pyx_XGOTREF(__pyx_t_32);
__Pyx_XGOTREF(__pyx_t_33);
__Pyx_XGOTREF(__pyx_t_34);
__Pyx_XGOTREF(__pyx_t_35);
__Pyx_XGOTREF(__pyx_t_36);
__Pyx_XGOTREF(__pyx_t_37);
__pyx_t_22 = __pyx_lineno; __pyx_t_30 = __pyx_clineno; __pyx_t_31 = __pyx_filename;
{
__Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
}
__Pyx_XGIVEREF(__pyx_t_35);
__Pyx_XGIVEREF(__pyx_t_36);
__Pyx_XGIVEREF(__pyx_t_37);
__Pyx_ExceptionReset(__pyx_t_35, __pyx_t_36, __pyx_t_37);
__Pyx_XGIVEREF(__pyx_t_32);
__Pyx_XGIVEREF(__pyx_t_33);
__Pyx_XGIVEREF(__pyx_t_34);
__Pyx_ErrRestore(__pyx_t_32, __pyx_t_33, __pyx_t_34);
__pyx_t_32 = 0; __pyx_t_33 = 0; __pyx_t_34 = 0; __pyx_t_35 = 0; __pyx_t_36 = 0; __pyx_t_37 = 0;
__pyx_lineno = __pyx_t_22; __pyx_clineno = __pyx_t_30; __pyx_filename = __pyx_t_31;
goto __pyx_L23_except_error;
}
}
}
goto __pyx_L23_except_error;
+04996: raise QuestDBError(
__pyx_t_15 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4996, __pyx_L37_error)
__Pyx_GOTREF(__pyx_t_19);
+04997: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4997, __pyx_L37_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_25 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 4997, __pyx_L37_error) __Pyx_GOTREF(__pyx_t_25); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+04998: f'Bad column {df_col_name!r} at row {i}: '
__pyx_t_17 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4998, __pyx_L37_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_26 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 4998, __pyx_L37_error) __Pyx_GOTREF(__pyx_t_26); /* … */ __pyx_t_21 = 47; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_28[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_28[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_28[5]); #endif __pyx_t_22 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_22 |= __Pyx_PyUnicode_KIND_04(__pyx_t_28[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_28[5]); #endif __pyx_t_29 = __Pyx_PyUnicode_Join(__pyx_t_28, 6, __pyx_t_21, __pyx_t_22); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 4998, __pyx_L37_error) __Pyx_GOTREF(__pyx_t_29); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0; __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0; __pyx_t_24 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_19))) { __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_19); assert(__pyx_t_15); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_19); __Pyx_INCREF(__pyx_t_15); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_19, __pyx__function); __pyx_t_24 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_25, __pyx_t_29}; __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_19, __pyx_callargs+__pyx_t_24, (3-__pyx_t_24) | (__pyx_t_24*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4996, __pyx_L37_error) __Pyx_GOTREF(__pyx_t_18); }
+04999: f'invalid memoryview value: {exc}') from exc
__pyx_t_27 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 4999, __pyx_L37_error) __Pyx_GOTREF(__pyx_t_27); __pyx_t_28[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_28[1] = __pyx_t_17; __pyx_t_28[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_28[3] = __pyx_t_26; __pyx_t_28[4] = __pyx_mstate_global->__pyx_kp_u_invalid_memoryview_value; __pyx_t_28[5] = __pyx_t_27; /* … */ __Pyx_Raise(__pyx_t_18, 0, 0, __pyx_v_exc); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 4996, __pyx_L37_error) }
+05000: release_view = True
__pyx_v_release_view = 1;
+05001: blob_len = view.len
__pyx_t_21 = __pyx_v_view.len;
__pyx_v_blob_len = __pyx_t_21;
+05002: blob_buf = <const char*>view.buf
__pyx_v_blob_buf = ((char const *)__pyx_v_view.buf);
+05003: elif _dataframe_is_null_pyobj(cell):
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
if (likely(__pyx_t_1)) {
/* … */
}
+05004: b.has_nulls = True
__pyx_v_b->has_nulls = 1;
+05005: continue
goto __pyx_L15_continue;
05006: else:
+05007: raise QuestDBError(
/*else*/ {
__pyx_t_16 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5007, __pyx_L18_error)
__Pyx_GOTREF(__pyx_t_8);
+05008: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5008, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5008, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+05009: f'Bad column {df_col_name!r} at row {i}: expected '
__pyx_t_18 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5009, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_29 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 5009, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_29); /* … */ __pyx_t_21 = 68; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_38[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_38[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_38[5]); #endif __pyx_t_30 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_30 |= __Pyx_PyUnicode_KIND_04(__pyx_t_38[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_38[5]); #endif __pyx_t_25 = __Pyx_PyUnicode_Join(__pyx_t_38, 7, __pyx_t_21, __pyx_t_30); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5009, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_25); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __pyx_t_24 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_8))) { __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_8); assert(__pyx_t_16); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8); __Pyx_INCREF(__pyx_t_16); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_8, __pyx__function); __pyx_t_24 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_16, __pyx_t_19, __pyx_t_25}; __pyx_t_23 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_24, (3-__pyx_t_24) | (__pyx_t_24*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 5007, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_23); } __Pyx_Raise(__pyx_t_23, 0, 0, 0); __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0; __PYX_ERR(0, 5007, __pyx_L18_error) } __pyx_L20:;
05010: 'bytes, bytearray, or memoryview, '
+05011: f'got {_fqn(type(<object>cell))}.')
__pyx_t_25 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5011, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_25); __pyx_t_15 = __Pyx_PyUnicode_Unicode(__pyx_t_25); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5011, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __pyx_t_38[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_38[1] = __pyx_t_18; __pyx_t_38[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_38[3] = __pyx_t_29; __pyx_t_38[4] = __pyx_mstate_global->__pyx_kp_u_expected_bytes_bytearray_or_mem; __pyx_t_38[5] = __pyx_t_15; __pyx_t_38[6] = __pyx_mstate_global->__pyx_kp_u__3;
05012:
+05013: if <size_t>blob_len != width:
__pyx_t_1 = (((size_t)__pyx_v_blob_len) != __pyx_v_width);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05014: raise QuestDBError(
__pyx_t_8 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5014, __pyx_L18_error)
__Pyx_GOTREF(__pyx_t_25);
+05015: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5015, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5015, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+05016: f'Bad column {df_col_name!r} at row {i}: a '
__pyx_t_19 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5016, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_15 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5016, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_15); /* … */ __pyx_t_21 = 54; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH for (Py_ssize_t i=1; i <= 9; i += 2) { Py_ssize_t l = __Pyx_PyUnicode_GET_LENGTH(__pyx_t_39[i]); __pyx_t_21 += l; } #endif __pyx_t_30 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_30 |= __Pyx_PyUnicode_KIND_04(__pyx_t_39[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_39[5]); #endif __pyx_t_26 = __Pyx_PyUnicode_Join(__pyx_t_39, 11, __pyx_t_21, __pyx_t_30); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 5016, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_26); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0; __pyx_t_24 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_25))) { __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_25); assert(__pyx_t_8); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_25); __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_25, __pyx__function); __pyx_t_24 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_16, __pyx_t_26}; __pyx_t_23 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_25, __pyx_callargs+__pyx_t_24, (3-__pyx_t_24) | (__pyx_t_24*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 5014, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_23); } __Pyx_Raise(__pyx_t_23, 0, 0, 0); __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0; __PYX_ERR(0, 5014, __pyx_L18_error)
+05017: f'{type_name} value is exactly {width} bytes, '
__pyx_t_29 = __Pyx_PyUnicode_Unicode(__pyx_v_type_name); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 5017, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_29); __pyx_t_18 = __Pyx_PyUnicode_From_size_t(__pyx_v_width, 0, ' ', 'd'); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5017, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_18);
+05018: f'got {blob_len}.')
__pyx_t_27 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_blob_len, 0, ' ', 'd'); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 5018, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_27); __pyx_t_39[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_39[1] = __pyx_t_19; __pyx_t_39[2] = __pyx_mstate_global->__pyx_kp_u_at_row; __pyx_t_39[3] = __pyx_t_15; __pyx_t_39[4] = __pyx_mstate_global->__pyx_kp_u_a; __pyx_t_39[5] = __pyx_t_29; __pyx_t_39[6] = __pyx_mstate_global->__pyx_kp_u_value_is_exactly; __pyx_t_39[7] = __pyx_t_18; __pyx_t_39[8] = __pyx_mstate_global->__pyx_kp_u_bytes_got; __pyx_t_39[9] = __pyx_t_27; __pyx_t_39[10] = __pyx_mstate_global->__pyx_kp_u__3;
+05019: memcpy(buf + i * width, blob_buf, width)
(void)(memcpy((__pyx_v_buf + (__pyx_v_i * __pyx_v_width)), __pyx_v_blob_buf, __pyx_v_width));
+05020: if b.validity != NULL:
__pyx_t_1 = (__pyx_v_b->validity != NULL);
if (__pyx_t_1) {
/* … */
}
}
+05021: _pyobj_set_validity_bit(b.validity, i)
__pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
05022: finally:
+05023: if release_view:
/*finally:*/ {
/*normal exit:*/{
if (__pyx_v_release_view) {
/* … */
}
goto __pyx_L19;
}
__pyx_L18_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_37 = 0; __pyx_t_36 = 0; __pyx_t_35 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
__Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
__Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
__Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
__Pyx_XDECREF(__pyx_t_29); __pyx_t_29 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_ExceptionSwap(&__pyx_t_37, &__pyx_t_36, &__pyx_t_35);
if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_37);
__Pyx_XGOTREF(__pyx_t_36);
__Pyx_XGOTREF(__pyx_t_35);
__pyx_t_30 = __pyx_lineno; __pyx_t_22 = __pyx_clineno; __pyx_t_31 = __pyx_filename;
{
if (__pyx_v_release_view) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_37);
__Pyx_XGIVEREF(__pyx_t_36);
__Pyx_XGIVEREF(__pyx_t_35);
__Pyx_ExceptionReset(__pyx_t_37, __pyx_t_36, __pyx_t_35);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ErrRestore(__pyx_t_12, __pyx_t_11, __pyx_t_10);
__pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_37 = 0; __pyx_t_36 = 0; __pyx_t_35 = 0;
__pyx_lineno = __pyx_t_30; __pyx_clineno = __pyx_t_22; __pyx_filename = __pyx_t_31;
goto __pyx_L4_error;
}
__pyx_L15_continue: {
if (__pyx_v_release_view) {
/* … */
}
goto __pyx_L13_continue;
}
__pyx_L19:;
}
__pyx_L13_continue:;
}
+05024: PyBuffer_Release(&view)
PyBuffer_Release((&__pyx_v_view)); /* … */ PyBuffer_Release((&__pyx_v_view)); /* … */ PyBuffer_Release((&__pyx_v_view));
05025:
+05026: if not b.has_nulls and b.validity != NULL:
__pyx_t_14 = (!__pyx_v_b->has_nulls);
if (__pyx_t_14) {
} else {
__pyx_t_1 = __pyx_t_14;
goto __pyx_L53_bool_binop_done;
}
__pyx_t_14 = (__pyx_v_b->validity != NULL);
__pyx_t_1 = __pyx_t_14;
__pyx_L53_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+05027: free(b.validity)
free(__pyx_v_b->validity);
+05028: b.validity = NULL
__pyx_v_b->validity = NULL;
+05029: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_columnar_build_fsb_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_23, &__pyx_t_25, &__pyx_t_26) < 0) __PYX_ERR(0, 5029, __pyx_L6_except_error)
__Pyx_XGOTREF(__pyx_t_23);
__Pyx_XGOTREF(__pyx_t_25);
__Pyx_XGOTREF(__pyx_t_26);
+05030: pyobj_built_free(b)
__pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+05031: raise
__Pyx_GIVEREF(__pyx_t_23); __Pyx_GIVEREF(__pyx_t_25); __Pyx_XGIVEREF(__pyx_t_26); __Pyx_ErrRestoreWithState(__pyx_t_23, __pyx_t_25, __pyx_t_26); __pyx_t_23 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __PYX_ERR(0, 5031, __pyx_L6_except_error) }
05032:
+05033: return b
{
__pyx_r = __pyx_v_b;
}
goto __pyx_L0;
05034:
05035:
+05036: cdef void_int _dataframe_columnar_prebuild_pyobj(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_prebuild_pyobj(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan) {
size_t __pyx_v_i;
struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col;
int __pyx_v_any_pyobj;
PyObject *__pyx_v_col_name = NULL;
PyObject *__pyx_v_oe = NULL;
PyObject *__pyx_v_ue = NULL;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_XDECREF(__pyx_t_18);
__Pyx_XDECREF(__pyx_t_19);
__Pyx_XDECREF(__pyx_t_22);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_prebuild_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_col_name);
__Pyx_XDECREF(__pyx_v_oe);
__Pyx_XDECREF(__pyx_v_ue);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
05037: object df,
05038: dataframe_plan_t* plan) except -1:
05039: """
05040: Walk every PyObject-sourced column once and stash typed buffers on
05041: `plan.pyobj_built`. Runs after `validate_plan` and before the chunk
05042: emission loop in `QuestDB.dataframe()`.
05043: """
05044: cdef size_t i
05045: cdef col_t* col
+05046: cdef bint any_pyobj = False
__pyx_v_any_pyobj = 0;
05047:
+05048: for i in range(plan.col_count):
__pyx_t_1 = __pyx_v_plan->col_count;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_i = __pyx_t_3;
+05049: col = &plan.cols.d[i]
__pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_i]));
+05050: if _is_pyobj_source(col.setup.source):
__pyx_t_4 = __pyx_f_7questdb_7_client__is_pyobj_source(__pyx_v_col->setup->source);
if (__pyx_t_4) {
/* … */
}
}
__pyx_L4_break:;
+05051: any_pyobj = True
__pyx_v_any_pyobj = 1;
+05052: break
goto __pyx_L4_break;
+05053: if not any_pyobj:
__pyx_t_4 = (!__pyx_v_any_pyobj);
if (__pyx_t_4) {
/* … */
}
+05054: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
05055:
+05056: plan.pyobj_built = <pyobj_built_t**>calloc(
__pyx_v_plan->pyobj_built = ((struct __pyx_t_7questdb_7_client_pyobj_built_t **)calloc(__pyx_v_plan->col_count, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t *))));
05057: plan.col_count, sizeof(pyobj_built_t*))
+05058: if plan.pyobj_built == NULL:
__pyx_t_4 = (__pyx_v_plan->pyobj_built == NULL);
if (unlikely(__pyx_t_4)) {
/* … */
}
+05059: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 5059, __pyx_L1_error)
05060:
+05061: for i in range(plan.col_count):
__pyx_t_1 = __pyx_v_plan->col_count;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_i = __pyx_t_3;
+05062: col = &plan.cols.d[i]
__pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_i]));
+05063: if not _is_pyobj_source(col.setup.source):
__pyx_t_4 = (!__pyx_f_7questdb_7_client__is_pyobj_source(__pyx_v_col->setup->source));
if (__pyx_t_4) {
/* … */
}
+05064: continue
goto __pyx_L8_continue;
+05065: col_name = df.columns[col.setup.orig_index]
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5065, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_GetItemInt(__pyx_t_5, __pyx_v_col->setup->orig_index, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5065, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF_SET(__pyx_v_col_name, __pyx_t_6); __pyx_t_6 = 0;
+05066: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
goto __pyx_L18_try_end;
__pyx_L11_error:;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
__pyx_L13_except_error:;
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
goto __pyx_L1_error;
__pyx_L18_try_end:;
}
__pyx_L8_continue:;
}
+05067: if col.setup.source == col_source_t.col_source_str_pyobj:
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_str_pyobj:
/* … */
break;
case __pyx_e_7questdb_7_client_col_source_int_pyobj:
+05068: plan.pyobj_built[i] = _dataframe_columnar_build_str_pyobj(
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_str_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5068, __pyx_L11_error)
(__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
05069: col, plan.row_count, col_name)
+05070: elif col.setup.source == col_source_t.col_source_int_pyobj:
break;
case __pyx_e_7questdb_7_client_col_source_float_pyobj:
+05071: if (col.setup.has_override
if (__pyx_v_col->setup->has_override) {
} else {
__pyx_t_4 = __pyx_v_col->setup->has_override;
goto __pyx_L20_bool_binop_done;
}
/* … */
if (__pyx_t_4) {
/* … */
goto __pyx_L19;
}
05072: and col.setup.override_dtype
+05073: == qwp_numpy_dtype.qwp_numpy_s32):
__pyx_t_11 = (__pyx_v_col->setup->override_dtype == qwp_numpy_s32);
__pyx_t_4 = __pyx_t_11;
__pyx_L20_bool_binop_done:;
+05074: plan.pyobj_built[i] = \
(__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
+05075: _dataframe_columnar_build_long256_pyobj(
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_long256_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5075, __pyx_L11_error)
05076: col, plan.row_count, col_name)
05077: else:
+05078: plan.pyobj_built[i] = _dataframe_columnar_build_int_pyobj(
/*else*/ {
/* … */
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_int_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5078, __pyx_L11_error)
/* … */
(__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
}
__pyx_L19:;
05079: col, plan.row_count, col_name)
+05080: elif col.setup.source == col_source_t.col_source_float_pyobj:
break;
case __pyx_e_7questdb_7_client_col_source_bool_pyobj:
+05081: plan.pyobj_built[i] = _dataframe_columnar_build_float_pyobj(
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_float_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5081, __pyx_L11_error)
(__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
05082: col, plan.row_count, col_name)
+05083: elif col.setup.source == col_source_t.col_source_bool_pyobj:
break;
case __pyx_e_7questdb_7_client_col_source_uuid_pyobj:
+05084: plan.pyobj_built[i] = _dataframe_columnar_build_bool_pyobj(
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_bool_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5084, __pyx_L11_error)
(__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
05085: col, plan.row_count, col_name)
+05086: elif col.setup.source == col_source_t.col_source_uuid_pyobj:
break;
case __pyx_e_7questdb_7_client_col_source_ipv4_pyobj:
+05087: plan.pyobj_built[i] = _dataframe_columnar_build_uuid_pyobj(
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_uuid_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5087, __pyx_L11_error)
(__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
05088: col, plan.row_count, col_name)
+05089: elif col.setup.source == col_source_t.col_source_ipv4_pyobj:
break;
case __pyx_e_7questdb_7_client_col_source_datetime_pyobj:
+05090: plan.pyobj_built[i] = _dataframe_columnar_build_ipv4_pyobj(
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_ipv4_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5090, __pyx_L11_error)
(__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
05091: col, plan.row_count, col_name)
+05092: elif col.setup.source == col_source_t.col_source_datetime_pyobj:
break;
case __pyx_e_7questdb_7_client_col_source_bytes_pyobj:
+05093: plan.pyobj_built[i] = _dataframe_columnar_build_datetime_pyobj(
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_datetime_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5093, __pyx_L11_error)
(__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
05094: col, plan.row_count, col_name)
+05095: elif col.setup.source == col_source_t.col_source_bytes_pyobj:
break;
default: break;
}
+05096: if (col.setup.has_override
if (__pyx_v_col->setup->has_override) {
} else {
__pyx_t_4 = __pyx_v_col->setup->has_override;
goto __pyx_L23_bool_binop_done;
}
/* … */
if (__pyx_t_4) {
/* … */
goto __pyx_L22;
}
05097: and col.setup.override_dtype
+05098: == qwp_numpy_dtype.qwp_numpy_s16):
__pyx_t_11 = (__pyx_v_col->setup->override_dtype == qwp_numpy_s16);
__pyx_t_4 = __pyx_t_11;
__pyx_L23_bool_binop_done:;
+05099: plan.pyobj_built[i] = _dataframe_columnar_build_fsb_pyobj(
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_fsb_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name, 16, __pyx_mstate_global->__pyx_n_u_UUID); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5099, __pyx_L11_error)
(__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
05100: col, plan.row_count, col_name, 16, 'UUID')
+05101: elif (col.setup.has_override
if (__pyx_v_col->setup->has_override) {
} else {
__pyx_t_4 = __pyx_v_col->setup->has_override;
goto __pyx_L25_bool_binop_done;
}
/* … */
if (__pyx_t_4) {
/* … */
goto __pyx_L22;
}
05102: and col.setup.override_dtype
+05103: == qwp_numpy_dtype.qwp_numpy_s32):
__pyx_t_11 = (__pyx_v_col->setup->override_dtype == qwp_numpy_s32);
__pyx_t_4 = __pyx_t_11;
__pyx_L25_bool_binop_done:;
+05104: plan.pyobj_built[i] = _dataframe_columnar_build_fsb_pyobj(
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_fsb_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name, 32, __pyx_mstate_global->__pyx_n_u_LONG256); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5104, __pyx_L11_error)
(__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
05105: col, plan.row_count, col_name, 32, 'LONG256')
05106: else:
+05107: plan.pyobj_built[i] = \
(__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
}
__pyx_L22:;
+05108: _dataframe_columnar_build_bytes_pyobj(
/*else*/ {
/* … */
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_bytes_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5108, __pyx_L11_error)
05109: col, plan.row_count, col_name)
+05110: except OverflowError as oe:
__pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_OverflowError)))); if (__pyx_t_12) { __Pyx_AddTraceback("questdb._client._dataframe_columnar_prebuild_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_13) < 0) __PYX_ERR(0, 5110, __pyx_L13_except_error) __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_5); __Pyx_XGOTREF(__pyx_t_13); __Pyx_INCREF(__pyx_t_5); __pyx_v_oe = __pyx_t_5; /*try:*/ { /* … */ /*finally:*/ { __pyx_L32_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0; __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0; __Pyx_ExceptionSwap(&__pyx_t_29, &__pyx_t_30, &__pyx_t_31); if ( unlikely(__Pyx_GetException(&__pyx_t_26, &__pyx_t_27, &__pyx_t_28) < 0)) __Pyx_ErrFetch(&__pyx_t_26, &__pyx_t_27, &__pyx_t_28); __Pyx_XGOTREF(__pyx_t_26); __Pyx_XGOTREF(__pyx_t_27); __Pyx_XGOTREF(__pyx_t_28); __Pyx_XGOTREF(__pyx_t_29); __Pyx_XGOTREF(__pyx_t_30); __Pyx_XGOTREF(__pyx_t_31); __pyx_t_12 = __pyx_lineno; __pyx_t_24 = __pyx_clineno; __pyx_t_25 = __pyx_filename; { __Pyx_DECREF(__pyx_v_oe); __pyx_v_oe = 0; } __Pyx_XGIVEREF(__pyx_t_29); __Pyx_XGIVEREF(__pyx_t_30); __Pyx_XGIVEREF(__pyx_t_31); __Pyx_ExceptionReset(__pyx_t_29, __pyx_t_30, __pyx_t_31); __Pyx_XGIVEREF(__pyx_t_26); __Pyx_XGIVEREF(__pyx_t_27); __Pyx_XGIVEREF(__pyx_t_28); __Pyx_ErrRestore(__pyx_t_26, __pyx_t_27, __pyx_t_28); __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0; __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_24; __pyx_filename = __pyx_t_25; goto __pyx_L13_except_error; } } }
+05111: raise QuestDBError(
__pyx_t_15 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5111, __pyx_L32_error)
__Pyx_GOTREF(__pyx_t_16);
+05112: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5112, __pyx_L32_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5112, __pyx_L32_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+05113: f'Bad column {col_name!r}: {oe}') from oe
__pyx_t_17 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5113, __pyx_L32_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_19 = __Pyx_PyObject_FormatSimple(__pyx_v_oe, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5113, __pyx_L32_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_20[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_20[1] = __pyx_t_17; __pyx_t_20[2] = __pyx_mstate_global->__pyx_kp_u__2; __pyx_t_20[3] = __pyx_t_19; __pyx_t_21 = 13; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20[3]); #endif __pyx_t_12 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_12 |= __Pyx_PyUnicode_KIND_04(__pyx_t_20[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_20[3]); #endif __pyx_t_22 = __Pyx_PyUnicode_Join(__pyx_t_20, 4, __pyx_t_21, __pyx_t_12); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 5113, __pyx_L32_error) __Pyx_GOTREF(__pyx_t_22); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __pyx_t_23 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_16))) { __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_16); assert(__pyx_t_15); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_16); __Pyx_INCREF(__pyx_t_15); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_16, __pyx__function); __pyx_t_23 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_18, __pyx_t_22}; __pyx_t_14 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_16, __pyx_callargs+__pyx_t_23, (3-__pyx_t_23) | (__pyx_t_23*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5111, __pyx_L32_error) __Pyx_GOTREF(__pyx_t_14); } __Pyx_Raise(__pyx_t_14, 0, 0, __pyx_v_oe); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __PYX_ERR(0, 5111, __pyx_L32_error) }
+05114: except UnicodeEncodeError as ue:
__pyx_t_24 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_UnicodeEncodeError)))); if (__pyx_t_24) { __Pyx_AddTraceback("questdb._client._dataframe_columnar_prebuild_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_13, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(0, 5114, __pyx_L13_except_error) __Pyx_XGOTREF(__pyx_t_13); __Pyx_XGOTREF(__pyx_t_5); __Pyx_XGOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_t_5); __pyx_v_ue = __pyx_t_5; /*try:*/ { /* … */ /*finally:*/ { __pyx_L43_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_31 = 0; __pyx_t_30 = 0; __pyx_t_29 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0; __pyx_t_26 = 0; __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0; __Pyx_ExceptionSwap(&__pyx_t_28, &__pyx_t_27, &__pyx_t_26); if ( unlikely(__Pyx_GetException(&__pyx_t_31, &__pyx_t_30, &__pyx_t_29) < 0)) __Pyx_ErrFetch(&__pyx_t_31, &__pyx_t_30, &__pyx_t_29); __Pyx_XGOTREF(__pyx_t_31); __Pyx_XGOTREF(__pyx_t_30); __Pyx_XGOTREF(__pyx_t_29); __Pyx_XGOTREF(__pyx_t_28); __Pyx_XGOTREF(__pyx_t_27); __Pyx_XGOTREF(__pyx_t_26); __pyx_t_24 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_25 = __pyx_filename; { __Pyx_DECREF(__pyx_v_ue); __pyx_v_ue = 0; } __Pyx_XGIVEREF(__pyx_t_28); __Pyx_XGIVEREF(__pyx_t_27); __Pyx_XGIVEREF(__pyx_t_26); __Pyx_ExceptionReset(__pyx_t_28, __pyx_t_27, __pyx_t_26); __Pyx_XGIVEREF(__pyx_t_31); __Pyx_XGIVEREF(__pyx_t_30); __Pyx_XGIVEREF(__pyx_t_29); __Pyx_ErrRestore(__pyx_t_31, __pyx_t_30, __pyx_t_29); __pyx_t_31 = 0; __pyx_t_30 = 0; __pyx_t_29 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0; __pyx_t_26 = 0; __pyx_lineno = __pyx_t_24; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_25; goto __pyx_L13_except_error; } } } goto __pyx_L13_except_error;
+05115: raise QuestDBError(
__pyx_t_16 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 5115, __pyx_L43_error)
__Pyx_GOTREF(__pyx_t_22);
+05116: QuestDBErrorCode.InvalidUtf8,
__Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5116, __pyx_L43_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_InvalidUtf8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5116, __pyx_L43_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+05117: f'Bad column {col_name!r}: {ue}') from ue
__pyx_t_18 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5117, __pyx_L43_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_19 = __Pyx_PyObject_FormatSimple(__pyx_v_ue, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5117, __pyx_L43_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_20[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_20[1] = __pyx_t_18; __pyx_t_20[2] = __pyx_mstate_global->__pyx_kp_u__2; __pyx_t_20[3] = __pyx_t_19; __pyx_t_21 = 13; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20[3]); #endif __pyx_t_24 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_24 |= __Pyx_PyUnicode_KIND_04(__pyx_t_20[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_20[3]); #endif __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_20, 4, __pyx_t_21, __pyx_t_24); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5117, __pyx_L43_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __pyx_t_23 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_22))) { __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_22); assert(__pyx_t_16); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_22); __Pyx_INCREF(__pyx_t_16); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_22, __pyx__function); __pyx_t_23 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_16, __pyx_t_15, __pyx_t_17}; __pyx_t_14 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_22, __pyx_callargs+__pyx_t_23, (3-__pyx_t_23) | (__pyx_t_23*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5115, __pyx_L43_error) __Pyx_GOTREF(__pyx_t_14); } __Pyx_Raise(__pyx_t_14, 0, 0, __pyx_v_ue); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __PYX_ERR(0, 5115, __pyx_L43_error) }
05118:
05119:
+05120: cdef void_int _dataframe_columnar_append_pyobj_str(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_str(struct qwp_chunk *__pyx_v_chunk, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_prebuilt, size_t __pyx_v_row_offset, size_t __pyx_v_row_count) {
struct line_sender_error *__pyx_v_err;
struct qwp_validity __pyx_v_validity;
struct qwp_validity const *__pyx_v_validity_ptr;
int __pyx_v_ok;
int32_t *__pyx_v_offsets;
size_t __pyx_v_bytes_len;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_append_pyobj_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
05121: qwp_chunk* chunk,
05122: col_t* col,
05123: pyobj_built_t* prebuilt,
05124: size_t row_offset,
05125: size_t row_count) except -1:
+05126: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
05127: cdef qwp_validity validity
+05128: cdef const qwp_validity* validity_ptr = NULL
__pyx_v_validity_ptr = NULL;
+05129: cdef bint ok = False
__pyx_v_ok = 0;
05130: cdef int32_t* offsets
05131: cdef size_t bytes_len
05132:
+05133: if prebuilt == NULL:
__pyx_t_1 = (__pyx_v_prebuilt == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05134: raise RuntimeError(
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_PyObject_str_column_missing_pre};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5134, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 5134, __pyx_L1_error)
05135: 'PyObject str column missing pre-built buffer; '
05136: 'prebuild phase did not run.')
+05137: if prebuilt.has_nulls:
if (__pyx_v_prebuilt->has_nulls) {
/* … */
}
+05138: if row_offset % 8 != 0:
__pyx_t_1 = ((__pyx_v_row_offset % 8) != 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05139: raise RuntimeError(
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_PyObject_str_column_with_nulls_r};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5139, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 5139, __pyx_L1_error)
05140: 'PyObject str column with nulls requires byte-aligned '
05141: 'chunk boundaries.')
+05142: validity.bits = prebuilt.validity + (row_offset // 8)
__pyx_v_validity.bits = (__pyx_v_prebuilt->validity + (__pyx_v_row_offset / 8));
+05143: validity.bit_len = row_count
__pyx_v_validity.bit_len = __pyx_v_row_count;
+05144: validity_ptr = &validity
__pyx_v_validity_ptr = (&__pyx_v_validity);
+05145: offsets = prebuilt.str_offsets + row_offset
__pyx_v_offsets = (__pyx_v_prebuilt->str_offsets + __pyx_v_row_offset);
+05146: bytes_len = prebuilt.str_bytes_len
__pyx_t_4 = __pyx_v_prebuilt->str_bytes_len; __pyx_v_bytes_len = __pyx_t_4;
+05147: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L8;
}
__pyx_L8:;
}
}
+05148: ok = qwp_chunk_column_str(
__pyx_v_ok = qwp_chunk_column_str(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_offsets, __pyx_v_prebuilt->str_bytes, __pyx_v_bytes_len, __pyx_v_row_count, __pyx_v_validity_ptr, (&__pyx_v_err));
}
05149: chunk,
05150: col.name.buf,
05151: col.name.len,
05152: offsets,
05153: prebuilt.str_bytes,
05154: bytes_len,
05155: row_count,
05156: validity_ptr,
05157: &err)
+05158: if not ok:
__pyx_t_1 = (!__pyx_v_ok);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05159: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5159, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 5159, __pyx_L1_error)
05160:
05161:
+05162: cdef void_int _dataframe_columnar_append_pyobj_simple(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_simple(struct qwp_chunk *__pyx_v_chunk, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_prebuilt, size_t __pyx_v_row_offset, size_t __pyx_v_row_count, size_t __pyx_v_elem_size, enum qwp_numpy_dtype __pyx_v_dtype) {
struct line_sender_error *__pyx_v_err;
struct qwp_validity __pyx_v_validity;
struct qwp_validity const *__pyx_v_validity_ptr;
int __pyx_v_ok;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_append_pyobj_simple", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
05163: qwp_chunk* chunk,
05164: col_t* col,
05165: pyobj_built_t* prebuilt,
05166: size_t row_offset,
05167: size_t row_count,
05168: size_t elem_size,
05169: qwp_numpy_dtype dtype) except -1:
+05170: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
05171: cdef qwp_validity validity
+05172: cdef const qwp_validity* validity_ptr = NULL
__pyx_v_validity_ptr = NULL;
+05173: cdef bint ok = False
__pyx_v_ok = 0;
05174:
+05175: if prebuilt == NULL:
__pyx_t_1 = (__pyx_v_prebuilt == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05176: raise RuntimeError('PyObject column missing pre-built buffer.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_PyObject_column_missing_pre_buil};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5176, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 5176, __pyx_L1_error)
+05177: if prebuilt.has_nulls:
if (__pyx_v_prebuilt->has_nulls) {
/* … */
}
+05178: if row_offset % 8 != 0:
__pyx_t_1 = ((__pyx_v_row_offset % 8) != 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05179: raise RuntimeError(
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_PyObject_column_with_nulls_requi};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5179, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 5179, __pyx_L1_error)
05180: 'PyObject column with nulls requires byte-aligned '
05181: 'chunk boundaries.')
+05182: validity.bits = prebuilt.validity + (row_offset // 8)
__pyx_v_validity.bits = (__pyx_v_prebuilt->validity + (__pyx_v_row_offset / 8));
+05183: validity.bit_len = row_count
__pyx_v_validity.bit_len = __pyx_v_row_count;
+05184: validity_ptr = &validity
__pyx_v_validity_ptr = (&__pyx_v_validity);
+05185: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L8;
}
__pyx_L8:;
}
}
+05186: ok = qwp_chunk_append_numpy_column(
__pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_dtype, (((uint8_t const *)__pyx_v_prebuilt->data) + (__pyx_v_row_offset * __pyx_v_elem_size)), (__pyx_v_row_count * __pyx_v_elem_size), __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
}
05187: chunk,
05188: col.name.buf,
05189: col.name.len,
05190: dtype,
05191: (<const uint8_t*>prebuilt.data) + row_offset * elem_size,
05192: row_count * elem_size,
05193: row_count,
05194: validity_ptr,
05195: NULL,
05196: &err)
+05197: if not ok:
__pyx_t_1 = (!__pyx_v_ok);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05198: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5198, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 5198, __pyx_L1_error)
05199:
05200:
+05201: cdef void_int _dataframe_columnar_append_pyobj_bytes(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_bytes(struct qwp_chunk *__pyx_v_chunk, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_prebuilt, size_t __pyx_v_row_offset, size_t __pyx_v_row_count) {
struct line_sender_error *__pyx_v_err;
struct qwp_validity __pyx_v_validity;
struct qwp_validity const *__pyx_v_validity_ptr;
int __pyx_v_ok;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_append_pyobj_bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
05202: qwp_chunk* chunk,
05203: col_t* col,
05204: pyobj_built_t* prebuilt,
05205: size_t row_offset,
05206: size_t row_count) except -1:
+05207: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
05208: cdef qwp_validity validity
+05209: cdef const qwp_validity* validity_ptr = NULL
__pyx_v_validity_ptr = NULL;
+05210: cdef bint ok = False
__pyx_v_ok = 0;
05211:
+05212: if prebuilt == NULL:
__pyx_t_1 = (__pyx_v_prebuilt == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05213: raise RuntimeError('PyObject bytes column missing pre-built buffer.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_PyObject_bytes_column_missing_pr};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5213, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 5213, __pyx_L1_error)
+05214: if prebuilt.has_nulls:
if (__pyx_v_prebuilt->has_nulls) {
/* … */
}
+05215: if row_offset % 8 != 0:
__pyx_t_1 = ((__pyx_v_row_offset % 8) != 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05216: raise RuntimeError(
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_PyObject_bytes_column_with_nulls};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5216, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 5216, __pyx_L1_error)
05217: 'PyObject bytes column with nulls requires byte-aligned '
05218: 'chunk boundaries.')
+05219: validity.bits = prebuilt.validity + (row_offset // 8)
__pyx_v_validity.bits = (__pyx_v_prebuilt->validity + (__pyx_v_row_offset / 8));
+05220: validity.bit_len = row_count
__pyx_v_validity.bit_len = __pyx_v_row_count;
+05221: validity_ptr = &validity
__pyx_v_validity_ptr = (&__pyx_v_validity);
+05222: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L8;
}
__pyx_L8:;
}
}
+05223: ok = qwp_chunk_column_binary(
__pyx_v_ok = qwp_chunk_column_binary(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, (__pyx_v_prebuilt->str_offsets + __pyx_v_row_offset), __pyx_v_prebuilt->str_bytes, __pyx_v_prebuilt->str_bytes_len, __pyx_v_row_count, __pyx_v_validity_ptr, (&__pyx_v_err));
}
05224: chunk,
05225: col.name.buf,
05226: col.name.len,
05227: prebuilt.str_offsets + row_offset,
05228: prebuilt.str_bytes,
05229: prebuilt.str_bytes_len,
05230: row_count,
05231: validity_ptr,
05232: &err)
+05233: if not ok:
__pyx_t_1 = (!__pyx_v_ok);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05234: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5234, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 5234, __pyx_L1_error)
05235:
05236:
+05237: cdef void_int _dataframe_columnar_call_arrow_append(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(struct qwp_chunk *__pyx_v_chunk, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_offset, size_t __pyx_v_row_count, struct __pyx_opt_args_7questdb_7_client__dataframe_columnar_call_arrow_append *__pyx_optional_args) {
enum qwp_symbol_mode __pyx_v_symbol_mode = __pyx_mstate_global->__pyx_k__30;
struct line_sender_error *__pyx_v_err;
int __pyx_v_ok;
struct qwp_arrow_import *__pyx_v_imported;
__pyx_t_7questdb_7_client_void_int __pyx_r;
if (__pyx_optional_args) {
if (__pyx_optional_args->__pyx_n > 0) {
__pyx_v_symbol_mode = __pyx_optional_args->symbol_mode;
}
}
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_call_arrow_append", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
struct __pyx_opt_args_7questdb_7_client__dataframe_columnar_call_arrow_append {
int __pyx_n;
enum qwp_symbol_mode symbol_mode;
};
05238: qwp_chunk* chunk,
05239: col_t* col,
05240: size_t row_offset,
05241: size_t row_count,
05242: qwp_symbol_mode symbol_mode
+05243: =qwp_symbol_mode_auto) except -1:
__pyx_mstate_global->__pyx_k__30 = qwp_symbol_mode_auto;
+05244: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+05245: cdef bint ok = False
__pyx_v_ok = 0;
+05246: cdef qwp_arrow_import* imported = col.setup.arrow_import
__pyx_t_1 = __pyx_v_col->setup->arrow_import; __pyx_v_imported = __pyx_t_1;
+05247: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L5;
}
__pyx_L5:;
}
}
+05248: if imported == NULL:
__pyx_t_2 = (__pyx_v_imported == NULL);
if (__pyx_t_2) {
/* … */
}
+05249: imported = qwp_arrow_import_new(
__pyx_v_imported = qwp_arrow_import_new((&(__pyx_v_col->setup->chunks.chunks[0])), (&__pyx_v_col->setup->arrow_schema), __pyx_v_symbol_mode, (&__pyx_v_err));
05250: &col.setup.chunks.chunks[0],
05251: &col.setup.arrow_schema,
05252: symbol_mode,
05253: &err)
+05254: if imported != NULL:
__pyx_t_2 = (__pyx_v_imported != NULL);
if (__pyx_t_2) {
/* … */
}
}
+05255: ok = qwp_chunk_append_arrow_import(
__pyx_v_ok = qwp_chunk_append_arrow_import(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_imported, __pyx_v_row_offset, __pyx_v_row_count, (&__pyx_v_err));
05256: chunk,
05257: col.name.buf,
05258: col.name.len,
05259: imported,
05260: row_offset,
05261: row_count,
05262: &err)
+05263: col.setup.arrow_import = imported
__pyx_v_col->setup->arrow_import = __pyx_v_imported;
+05264: if not ok:
__pyx_t_2 = (!__pyx_v_ok);
if (unlikely(__pyx_t_2)) {
/* … */
}
+05265: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5265, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 5265, __pyx_L1_error)
+05266: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
05267:
05268:
+05269: cdef str _columnar_col_name(const col_t* col):
static PyObject *__pyx_f_7questdb_7_client__columnar_col_name(struct __pyx_t_7questdb_7_client_col_t const *__pyx_v_col) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client._columnar_col_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
05270: """A planned column's name as text, for a message naming it."""
+05271: if col.name.buf == NULL:
__pyx_t_1 = (__pyx_v_col->name.buf == NULL);
if (__pyx_t_1) {
/* … */
}
+05272: return '?'
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_);
__pyx_r = __pyx_mstate_global->__pyx_kp_u_;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+05273: return PyUnicode_FromStringAndSize(
__pyx_t_2 = PyUnicode_FromStringAndSize(__pyx_v_col->name.buf, ((Py_ssize_t)__pyx_v_col->name.len)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = ((PyObject*)__pyx_t_2); } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
05274: col.name.buf, <Py_ssize_t>col.name.len)
05275:
05276:
+05277: cdef void_int _dataframe_columnar_append_field(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_append_field(struct qwp_chunk *__pyx_v_chunk, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_prebuilt, size_t __pyx_v_row_offset, size_t __pyx_v_row_count) {
struct line_sender_error *__pyx_v_err;
struct ArrowArray *__pyx_v_arr;
void const *__pyx_v_data;
struct qwp_validity __pyx_v_validity;
struct qwp_validity const *__pyx_v_validity_ptr;
int __pyx_v_ok;
enum qwp_numpy_dtype __pyx_v_numpy_dtype;
size_t __pyx_v_element_size;
struct qwp_numpy_extras __pyx_v_extras;
struct qwp_numpy_extras const *__pyx_v_extras_ptr;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_append_field", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
05278: qwp_chunk* chunk,
05279: col_t* col,
05280: pyobj_built_t* prebuilt,
05281: size_t row_offset,
05282: size_t row_count) except -1:
+05283: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+05284: cdef ArrowArray* arr = &col.setup.chunks.chunks[0]
__pyx_v_arr = (&(__pyx_v_col->setup->chunks.chunks[0]));
05285: cdef ArrowArray* dictionary
+05286: cdef const void* data = NULL
__pyx_v_data = NULL;
05287: cdef int32_t* offsets
05288: cdef int32_t* dict_offsets
05289: cdef size_t bytes_len
05290: cdef size_t dict_offsets_len
05291: cdef size_t dict_bytes_len
05292: cdef qwp_validity validity
+05293: cdef const qwp_validity* validity_ptr = NULL
__pyx_v_validity_ptr = NULL;
+05294: cdef bint ok = False
__pyx_v_ok = 0;
05295:
05296: cdef qwp_numpy_dtype numpy_dtype
05297: cdef size_t element_size
05298: cdef qwp_numpy_extras extras
05299: cdef const qwp_numpy_extras* extras_ptr
05300:
05301: # Generic Arrow passthrough owns its complete layout: the native importer
05302: # validates and reads the parent buffers and child tree. In particular, a
05303: # FixedSizeList legitimately has no buffers[1]. Dispatch it before any
05304: # direct-encoder validity or value-buffer read on this side.
+05305: if col.setup.target == col_target_t.col_target_column_arrow:
__pyx_t_1 = (__pyx_v_col->setup->target == __pyx_e_7questdb_7_client_col_target_column_arrow);
if (__pyx_t_1) {
/* … */
}
+05306: _dataframe_columnar_call_arrow_append(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 5306, __pyx_L1_error)
05307: chunk, col, row_offset, row_count)
+05308: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
05309:
05310: # pyarrow allocates exactly `n_buffers` pointers, so reading the
05311: # value buffer of a column that has fewer reads past the
05312: # allocation. The planner turns such a column away, and saying so
05313: # here keeps that a property of this read rather than of the checks
05314: # upstream of it.
+05315: if arr.buffers == NULL or arr.n_buffers < 2:
__pyx_t_3 = (__pyx_v_arr->buffers == NULL);
if (!__pyx_t_3) {
} else {
__pyx_t_1 = __pyx_t_3;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_3 = (__pyx_v_arr->n_buffers < 2);
__pyx_t_1 = __pyx_t_3;
__pyx_L5_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+05316: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5316, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
+05317: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5317, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5317, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+05318: f'Bad column {_columnar_col_name(col)!r}: it arrived '
__pyx_t_7 = __pyx_f_7questdb_7_client__columnar_col_name(__pyx_v_col); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5318, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_9 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_7), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5318, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* … */ __pyx_t_11 = 73; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10[3]); #endif __pyx_t_12 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_12 |= __Pyx_PyUnicode_KIND_04(__pyx_t_10[1]); #endif __pyx_t_13 = __Pyx_PyUnicode_Join(__pyx_t_10, 5, __pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5318, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_14 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_14 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_8, __pyx_t_13}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_14, (3-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 5316, __pyx_L1_error)
+05319: f'with {arr.n_buffers} Arrow buffers, too few to read '
__pyx_t_7 = __Pyx_PyUnicode_From_int64_t(__pyx_v_arr->n_buffers, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5319, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_10[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_10[1] = __pyx_t_9; __pyx_t_10[2] = __pyx_mstate_global->__pyx_kp_u_it_arrived_with; __pyx_t_10[3] = __pyx_t_7; __pyx_t_10[4] = __pyx_mstate_global->__pyx_kp_u_Arrow_buffers_too_few_to_read_v;
05320: f'values from.')
+05321: data = arr.buffers[1]
__pyx_v_data = (__pyx_v_arr->buffers[1]);
+05322: validity_ptr = _dataframe_columnar_validity(
__pyx_t_15 = __pyx_f_7questdb_7_client__dataframe_columnar_validity(__pyx_v_arr, __pyx_v_row_offset, __pyx_v_row_count, (&__pyx_v_validity)); if (unlikely(__pyx_t_15 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 5322, __pyx_L1_error) __pyx_v_validity_ptr = __pyx_t_15;
05323: arr, row_offset, row_count, &validity)
05324:
+05325: if col.setup.target == col_target_t.col_target_column_bool:
switch (__pyx_v_col->setup->target) {
case __pyx_e_7questdb_7_client_col_target_column_bool:
/* … */
break;
case __pyx_e_7questdb_7_client_col_target_column_i64:
+05326: if col.setup.source == col_source_t.col_source_bool_pyobj:
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_bool_pyobj:
/* … */
break;
case __pyx_e_7questdb_7_client_col_source_bool_numpy:
+05327: if prebuilt == NULL:
__pyx_t_1 = (__pyx_v_prebuilt == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05328: raise RuntimeError(
__pyx_t_6 = NULL;
__pyx_t_14 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_PyObject_bool_column_missing_pre};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5328, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 5328, __pyx_L1_error)
05329: 'PyObject bool column missing pre-built bitmap.')
+05330: if row_offset % 8 != 0:
__pyx_t_1 = ((__pyx_v_row_offset % 8) != 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05331: raise RuntimeError(
__pyx_t_6 = NULL;
__pyx_t_14 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_PyObject_bool_column_requires_by};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5331, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 5331, __pyx_L1_error)
05332: 'PyObject bool column requires byte-aligned chunk boundaries.')
+05333: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L11;
}
__pyx_L11:;
}
}
+05334: ok = qwp_chunk_column_bool(
__pyx_v_ok = qwp_chunk_column_bool(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, (((uint8_t const *)__pyx_v_prebuilt->data) + (__pyx_v_row_offset / 8)), __pyx_v_row_count, NULL, (&__pyx_v_err));
}
05335: chunk,
05336: col.name.buf,
05337: col.name.len,
05338: (<const uint8_t*>prebuilt.data) + (row_offset // 8),
05339: row_count,
05340: NULL,
05341: &err)
+05342: elif col.setup.source == col_source_t.col_source_bool_numpy:
break;
default:
05343: # NumPy bool is byte-per-row; Rust packs to LSB-bitmap
05344: # inside qwp_chunk_append_numpy_column.
+05345: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L14;
}
__pyx_L14:;
}
}
+05346: ok = qwp_chunk_append_numpy_column(
__pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, qwp_numpy_bool, (((uint8_t const *)__pyx_v_data) + __pyx_v_row_offset), __pyx_v_row_count, __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
}
05347: chunk,
05348: col.name.buf,
05349: col.name.len,
05350: qwp_numpy_dtype.qwp_numpy_bool,
05351: (<const uint8_t*>data) + row_offset,
05352: row_count,
05353: row_count,
05354: validity_ptr,
05355: NULL,
05356: &err)
05357: else:
+05358: raise RuntimeError('Unsupported columnar bool source.')
__pyx_t_6 = NULL;
__pyx_t_14 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Unsupported_columnar_bool_source};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5358, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 5358, __pyx_L1_error)
break;
}
+05359: elif col.setup.target == col_target_t.col_target_column_i64:
break;
case __pyx_e_7questdb_7_client_col_target_column_f64:
+05360: if col.setup.source == col_source_t.col_source_int_pyobj:
__pyx_t_1 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_int_pyobj);
if (__pyx_t_1) {
/* … */
goto __pyx_L15;
}
+05361: if prebuilt == NULL:
__pyx_t_1 = (__pyx_v_prebuilt == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05362: raise RuntimeError(
__pyx_t_6 = NULL;
__pyx_t_14 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_PyObject_int_column_missing_pre};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5362, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 5362, __pyx_L1_error)
05363: 'PyObject int column missing pre-built buffer.')
+05364: if prebuilt.has_nulls and row_offset % 8 != 0:
if (__pyx_v_prebuilt->has_nulls) {
} else {
__pyx_t_1 = __pyx_v_prebuilt->has_nulls;
goto __pyx_L18_bool_binop_done;
}
__pyx_t_3 = ((__pyx_v_row_offset % 8) != 0);
__pyx_t_1 = __pyx_t_3;
__pyx_L18_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+05365: raise RuntimeError(
__pyx_t_6 = NULL;
__pyx_t_14 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_PyObject_int_column_with_nulls_r};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5365, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 5365, __pyx_L1_error)
05366: 'PyObject int column with nulls requires byte-aligned '
05367: 'chunk boundaries.')
+05368: if prebuilt.has_nulls:
if (__pyx_v_prebuilt->has_nulls) {
/* … */
goto __pyx_L20;
}
+05369: validity.bits = prebuilt.validity + (row_offset // 8)
__pyx_v_validity.bits = (__pyx_v_prebuilt->validity + (__pyx_v_row_offset / 8));
+05370: validity.bit_len = row_count
__pyx_v_validity.bit_len = __pyx_v_row_count;
+05371: validity_ptr = &validity
__pyx_v_validity_ptr = (&__pyx_v_validity);
05372: else:
+05373: validity_ptr = NULL
/*else*/ {
__pyx_v_validity_ptr = NULL;
}
__pyx_L20:;
05374: # A round-trip claim decides the slot width the prebuild
05375: # wrote: IPV4 and CHAR narrow it, `long256` widens it to 32
05376: # raw bytes, and GEOHASH keeps the int64 slot and carries
05377: # its precision in `extras`. Without a claim the column is
05378: # an int64 LONG.
+05379: numpy_dtype = qwp_numpy_dtype.qwp_numpy_i64
__pyx_v_numpy_dtype = qwp_numpy_i64;
+05380: element_size = 8
__pyx_v_element_size = 8;
+05381: extras_ptr = NULL
__pyx_v_extras_ptr = NULL;
+05382: if col.setup.has_override:
if (__pyx_v_col->setup->has_override) {
/* … */
}
+05383: numpy_dtype = col.setup.override_dtype
__pyx_t_16 = __pyx_v_col->setup->override_dtype;
__pyx_v_numpy_dtype = __pyx_t_16;
+05384: if numpy_dtype == qwp_numpy_dtype.qwp_numpy_u32_ipv4:
switch (__pyx_v_numpy_dtype) {
case qwp_numpy_u32_ipv4:
/* … */
break;
case qwp_numpy_u16_char:
+05385: element_size = 4
__pyx_v_element_size = 4;
+05386: elif numpy_dtype == qwp_numpy_dtype.qwp_numpy_u16_char:
break;
case qwp_numpy_s32:
+05387: element_size = 2
__pyx_v_element_size = 2;
+05388: elif numpy_dtype == qwp_numpy_dtype.qwp_numpy_s32:
break;
case qwp_numpy_geohash_i64:
+05389: element_size = 32
__pyx_v_element_size = 32;
+05390: elif numpy_dtype == qwp_numpy_dtype.qwp_numpy_geohash_i64:
break;
default: break;
}
+05391: memset(&extras, 0, sizeof(qwp_numpy_extras))
(void)(memset((&__pyx_v_extras), 0, (sizeof(struct qwp_numpy_extras))));
+05392: extras.geohash_bits = col.setup.override_geohash_bits
__pyx_t_17 = __pyx_v_col->setup->override_geohash_bits;
__pyx_v_extras.geohash_bits = __pyx_t_17;
+05393: extras_ptr = &extras
__pyx_v_extras_ptr = (&__pyx_v_extras);
+05394: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L24;
}
__pyx_L24:;
}
}
+05395: ok = qwp_chunk_append_numpy_column(
__pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_numpy_dtype, (((uint8_t const *)__pyx_v_prebuilt->data) + (__pyx_v_row_offset * __pyx_v_element_size)), (__pyx_v_row_count * __pyx_v_element_size), __pyx_v_row_count, __pyx_v_validity_ptr, __pyx_v_extras_ptr, (&__pyx_v_err));
}
05396: chunk,
05397: col.name.buf,
05398: col.name.len,
05399: numpy_dtype,
05400: (<const uint8_t*>prebuilt.data) + row_offset * element_size,
05401: row_count * element_size,
05402: row_count,
05403: validity_ptr,
05404: extras_ptr,
05405: &err)
05406: else:
05407: # Rust widens narrow ints to a sentinel-safe wire (i8/i16 → INT,
05408: # i32/u32/u64 → LONG); see questdb-rs NumpyDtype::*WidenTo*.
+05409: if col.setup.source in (
/*else*/ {
/* … */
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_i64_numpy:
/* … */
break;
case __pyx_e_7questdb_7_client_col_source_i8_numpy:
+05410: col_source_t.col_source_i64_numpy,
case __pyx_e_7questdb_7_client_col_source_i64_arrow:
05411: col_source_t.col_source_i64_arrow):
+05412: numpy_dtype = qwp_numpy_dtype.qwp_numpy_i64
__pyx_v_numpy_dtype = qwp_numpy_i64;
+05413: element_size = 8
__pyx_v_element_size = 8;
+05414: elif col.setup.source == col_source_t.col_source_i8_numpy:
break;
case __pyx_e_7questdb_7_client_col_source_i16_numpy:
+05415: numpy_dtype = qwp_numpy_dtype.qwp_numpy_i8
__pyx_v_numpy_dtype = qwp_numpy_i8;
+05416: element_size = 1
__pyx_v_element_size = 1;
+05417: elif col.setup.source == col_source_t.col_source_i16_numpy:
break;
case __pyx_e_7questdb_7_client_col_source_i32_numpy:
+05418: numpy_dtype = qwp_numpy_dtype.qwp_numpy_i16
__pyx_v_numpy_dtype = qwp_numpy_i16;
+05419: element_size = 2
__pyx_v_element_size = 2;
+05420: elif col.setup.source == col_source_t.col_source_i32_numpy:
break;
case __pyx_e_7questdb_7_client_col_source_u8_numpy:
+05421: numpy_dtype = qwp_numpy_dtype.qwp_numpy_i32
__pyx_v_numpy_dtype = qwp_numpy_i32;
+05422: element_size = 4
__pyx_v_element_size = 4;
+05423: elif col.setup.source == col_source_t.col_source_u8_numpy:
break;
case __pyx_e_7questdb_7_client_col_source_u16_numpy:
+05424: numpy_dtype = qwp_numpy_dtype.qwp_numpy_u8
__pyx_v_numpy_dtype = qwp_numpy_u8;
+05425: element_size = 1
__pyx_v_element_size = 1;
+05426: elif col.setup.source == col_source_t.col_source_u16_numpy:
break;
case __pyx_e_7questdb_7_client_col_source_u32_numpy:
+05427: numpy_dtype = qwp_numpy_dtype.qwp_numpy_u16
__pyx_v_numpy_dtype = qwp_numpy_u16;
+05428: element_size = 2
__pyx_v_element_size = 2;
+05429: elif col.setup.source in (
break;
case __pyx_e_7questdb_7_client_col_source_u64_numpy:
+05430: col_source_t.col_source_u32_numpy,
case __pyx_e_7questdb_7_client_col_source_u32_arrow:
05431: col_source_t.col_source_u32_arrow):
+05432: numpy_dtype = qwp_numpy_dtype.qwp_numpy_u32
__pyx_v_numpy_dtype = qwp_numpy_u32;
+05433: element_size = 4
__pyx_v_element_size = 4;
+05434: elif col.setup.source == col_source_t.col_source_u64_numpy:
break;
default:
+05435: numpy_dtype = qwp_numpy_dtype.qwp_numpy_u64
__pyx_v_numpy_dtype = qwp_numpy_u64;
+05436: element_size = 8
__pyx_v_element_size = 8;
05437: else:
+05438: raise RuntimeError('Unsupported columnar int source.')
__pyx_t_6 = NULL;
__pyx_t_14 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Unsupported_columnar_int_source};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5438, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 5438, __pyx_L1_error)
break;
}
+05439: extras_ptr = NULL
__pyx_v_extras_ptr = NULL;
+05440: if col.setup.has_override:
if (__pyx_v_col->setup->has_override) {
/* … */
}
+05441: numpy_dtype = col.setup.override_dtype
__pyx_t_16 = __pyx_v_col->setup->override_dtype;
__pyx_v_numpy_dtype = __pyx_t_16;
+05442: if (numpy_dtype
switch (__pyx_v_numpy_dtype) {
case qwp_numpy_geohash_i8:
/* … */
break;
default: break;
}
+05443: == qwp_numpy_dtype.qwp_numpy_geohash_i8
case qwp_numpy_geohash_i16:
05444: or numpy_dtype
+05445: == qwp_numpy_dtype.qwp_numpy_geohash_i16
case qwp_numpy_geohash_i32:
05446: or numpy_dtype
+05447: == qwp_numpy_dtype.qwp_numpy_geohash_i32
case qwp_numpy_geohash_i64:
05448: or numpy_dtype
05449: == qwp_numpy_dtype.qwp_numpy_geohash_i64):
+05450: memset(&extras, 0, sizeof(qwp_numpy_extras))
(void)(memset((&__pyx_v_extras), 0, (sizeof(struct qwp_numpy_extras))));
+05451: extras.geohash_bits = col.setup.override_geohash_bits
__pyx_t_17 = __pyx_v_col->setup->override_geohash_bits;
__pyx_v_extras.geohash_bits = __pyx_t_17;
+05452: extras_ptr = &extras
__pyx_v_extras_ptr = (&__pyx_v_extras);
+05453: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L28;
}
__pyx_L28:;
}
}
}
__pyx_L15:;
+05454: ok = qwp_chunk_append_numpy_column(
__pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_numpy_dtype, (((uint8_t const *)__pyx_v_data) + (__pyx_v_row_offset * __pyx_v_element_size)), (__pyx_v_row_count * __pyx_v_element_size), __pyx_v_row_count, __pyx_v_validity_ptr, __pyx_v_extras_ptr, (&__pyx_v_err));
}
05455: chunk,
05456: col.name.buf,
05457: col.name.len,
05458: numpy_dtype,
05459: (<const uint8_t*>data) + row_offset * element_size,
05460: row_count * element_size,
05461: row_count,
05462: validity_ptr,
05463: extras_ptr,
05464: &err)
+05465: elif col.setup.target == col_target_t.col_target_column_f64:
break;
case __pyx_e_7questdb_7_client_col_target_column_ts:
+05466: if col.setup.source in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_f64_numpy:
/* … */
break;
case __pyx_e_7questdb_7_client_col_source_f32_numpy:
+05467: col_source_t.col_source_f64_numpy,
case __pyx_e_7questdb_7_client_col_source_f64_arrow:
05468: col_source_t.col_source_f64_arrow):
+05469: numpy_dtype = qwp_numpy_dtype.qwp_numpy_f64
__pyx_v_numpy_dtype = qwp_numpy_f64;
+05470: element_size = 8
__pyx_v_element_size = 8;
+05471: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L31;
}
__pyx_L31:;
}
}
+05472: ok = qwp_chunk_append_numpy_column(
__pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_numpy_dtype, (((uint8_t const *)__pyx_v_data) + (__pyx_v_row_offset * __pyx_v_element_size)), (__pyx_v_row_count * __pyx_v_element_size), __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
}
05473: chunk,
05474: col.name.buf,
05475: col.name.len,
05476: numpy_dtype,
05477: (<const uint8_t*>data) + row_offset * element_size,
05478: row_count * element_size,
05479: row_count,
05480: validity_ptr,
05481: NULL,
05482: &err)
+05483: elif col.setup.source == col_source_t.col_source_f32_numpy:
break;
case __pyx_e_7questdb_7_client_col_source_float_pyobj:
05484: # numpy f32 maps directly to a FLOAT column on the wire; the
05485: # source stride is 4 bytes per row.
+05486: numpy_dtype = qwp_numpy_dtype.qwp_numpy_f32
__pyx_v_numpy_dtype = qwp_numpy_f32;
+05487: element_size = 4
__pyx_v_element_size = 4;
+05488: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L34;
}
__pyx_L34:;
}
}
+05489: ok = qwp_chunk_append_numpy_column(
__pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_numpy_dtype, (((uint8_t const *)__pyx_v_data) + (__pyx_v_row_offset * __pyx_v_element_size)), (__pyx_v_row_count * __pyx_v_element_size), __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
}
05490: chunk,
05491: col.name.buf,
05492: col.name.len,
05493: numpy_dtype,
05494: (<const uint8_t*>data) + row_offset * element_size,
05495: row_count * element_size,
05496: row_count,
05497: validity_ptr,
05498: NULL,
05499: &err)
+05500: elif col.setup.source == col_source_t.col_source_float_pyobj:
break;
default:
+05501: if prebuilt == NULL:
__pyx_t_1 = (__pyx_v_prebuilt == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05502: raise RuntimeError(
__pyx_t_6 = NULL;
__pyx_t_14 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_PyObject_float_column_missing_pr};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5502, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 5502, __pyx_L1_error)
05503: 'PyObject float column missing pre-built buffer.')
+05504: if prebuilt.has_nulls and row_offset % 8 != 0:
if (__pyx_v_prebuilt->has_nulls) {
} else {
__pyx_t_1 = __pyx_v_prebuilt->has_nulls;
goto __pyx_L37_bool_binop_done;
}
__pyx_t_3 = ((__pyx_v_row_offset % 8) != 0);
__pyx_t_1 = __pyx_t_3;
__pyx_L37_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+05505: raise RuntimeError(
__pyx_t_6 = NULL;
__pyx_t_14 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_PyObject_float_column_with_nulls};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5505, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 5505, __pyx_L1_error)
05506: 'PyObject float column with nulls requires byte-aligned '
05507: 'chunk boundaries.')
+05508: if prebuilt.has_nulls:
if (__pyx_v_prebuilt->has_nulls) {
/* … */
goto __pyx_L39;
}
+05509: validity.bits = prebuilt.validity + (row_offset // 8)
__pyx_v_validity.bits = (__pyx_v_prebuilt->validity + (__pyx_v_row_offset / 8));
+05510: validity.bit_len = row_count
__pyx_v_validity.bit_len = __pyx_v_row_count;
+05511: validity_ptr = &validity
__pyx_v_validity_ptr = (&__pyx_v_validity);
05512: else:
+05513: validity_ptr = NULL
/*else*/ {
__pyx_v_validity_ptr = NULL;
}
__pyx_L39:;
+05514: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L42;
}
__pyx_L42:;
}
}
+05515: ok = qwp_chunk_append_numpy_column(
__pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, qwp_numpy_f64, (((uint8_t const *)__pyx_v_prebuilt->data) + (__pyx_v_row_offset * 8)), (__pyx_v_row_count * 8), __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
}
05516: chunk,
05517: col.name.buf,
05518: col.name.len,
05519: qwp_numpy_dtype.qwp_numpy_f64,
05520: (<const uint8_t*>prebuilt.data) + row_offset * 8,
05521: row_count * 8,
05522: row_count,
05523: validity_ptr,
05524: NULL,
05525: &err)
05526: else:
+05527: raise RuntimeError('Unsupported columnar float source.')
__pyx_t_6 = NULL;
__pyx_t_14 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Unsupported_columnar_float_sourc};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5527, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 5527, __pyx_L1_error)
break;
}
+05528: elif col.setup.target == col_target_t.col_target_column_ts:
break;
case __pyx_e_7questdb_7_client_col_target_column_i8:
+05529: if col.setup.source == col_source_t.col_source_dt64ns_numpy:
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_dt64ns_numpy:
/* … */
break;
case __pyx_e_7questdb_7_client_col_source_dt64us_numpy:
+05530: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L45;
}
__pyx_L45:;
}
}
+05531: ok = qwp_chunk_append_numpy_column(
__pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, qwp_numpy_datetime64_ns, (((uint8_t const *)__pyx_v_data) + (__pyx_v_row_offset * 8)), (__pyx_v_row_count * 8), __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
}
05532: chunk,
05533: col.name.buf,
05534: col.name.len,
05535: qwp_numpy_dtype.qwp_numpy_datetime64_ns,
05536: (<const uint8_t*>data) + row_offset * 8,
05537: row_count * 8,
05538: row_count,
05539: validity_ptr,
05540: NULL,
05541: &err)
+05542: elif col.setup.source == col_source_t.col_source_dt64us_numpy:
break;
case __pyx_e_7questdb_7_client_col_source_dt64ns_tz_arrow:
+05543: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L48;
}
__pyx_L48:;
}
}
+05544: ok = qwp_chunk_append_numpy_column(
__pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, qwp_numpy_datetime64_us, (((uint8_t const *)__pyx_v_data) + (__pyx_v_row_offset * 8)), (__pyx_v_row_count * 8), __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
}
05545: chunk,
05546: col.name.buf,
05547: col.name.len,
05548: qwp_numpy_dtype.qwp_numpy_datetime64_us,
05549: (<const uint8_t*>data) + row_offset * 8,
05550: row_count * 8,
05551: row_count,
05552: validity_ptr,
05553: NULL,
05554: &err)
+05555: elif col.setup.source in (
break;
case __pyx_e_7questdb_7_client_col_source_datetime_pyobj:
+05556: col_source_t.col_source_dt64ns_tz_arrow,
case __pyx_e_7questdb_7_client_col_source_dt64us_tz_arrow:
05557: col_source_t.col_source_dt64us_tz_arrow):
+05558: _dataframe_columnar_call_arrow_append(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 5558, __pyx_L1_error)
05559: chunk, col, row_offset, row_count)
+05560: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+05561: elif col.setup.source == col_source_t.col_source_datetime_pyobj:
break;
default:
+05562: _dataframe_columnar_append_pyobj_simple(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_simple(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count, 8, qwp_numpy_datetime64_us); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 5562, __pyx_L1_error)
05563: chunk, col, prebuilt, row_offset, row_count, 8,
05564: qwp_numpy_dtype.qwp_numpy_datetime64_us)
+05565: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
05566: else:
+05567: raise RuntimeError('Unsupported columnar timestamp field source.')
__pyx_t_6 = NULL;
__pyx_t_14 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Unsupported_columnar_timestamp_f};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5567, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 5567, __pyx_L1_error)
break;
}
+05568: elif col.setup.target in (
break;
case __pyx_e_7questdb_7_client_col_target_column_uuid:
+05569: col_target_t.col_target_column_i8,
case __pyx_e_7questdb_7_client_col_target_column_i16:
+05570: col_target_t.col_target_column_i16,
case __pyx_e_7questdb_7_client_col_target_column_i32:
+05571: col_target_t.col_target_column_i32,
case __pyx_e_7questdb_7_client_col_target_column_f32:
05572: col_target_t.col_target_column_f32):
+05573: _dataframe_columnar_call_arrow_append(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 5573, __pyx_L1_error)
05574: chunk, col, row_offset, row_count)
+05575: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+05576: elif col.setup.target == col_target_t.col_target_column_uuid:
break;
case __pyx_e_7questdb_7_client_col_target_column_ipv4:
+05577: if col.setup.source == col_source_t.col_source_uuid_pyobj:
__pyx_t_1 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_uuid_pyobj);
if (__pyx_t_1) {
/* … */
}
+05578: _dataframe_columnar_append_pyobj_simple(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_simple(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count, 16, qwp_numpy_s16); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 5578, __pyx_L1_error)
05579: chunk, col, prebuilt, row_offset, row_count, 16,
05580: qwp_numpy_dtype.qwp_numpy_s16)
+05581: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+05582: _dataframe_columnar_call_arrow_append(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 5582, __pyx_L1_error)
05583: chunk, col, row_offset, row_count)
+05584: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+05585: elif col.setup.target == col_target_t.col_target_column_ipv4:
break;
case __pyx_e_7questdb_7_client_col_target_column_binary:
+05586: if col.setup.source == col_source_t.col_source_ipv4_pyobj:
__pyx_t_1 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_ipv4_pyobj);
if (__pyx_t_1) {
/* … */
}
+05587: _dataframe_columnar_append_pyobj_simple(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_simple(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count, 4, qwp_numpy_u32_ipv4); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 5587, __pyx_L1_error)
05588: chunk, col, prebuilt, row_offset, row_count, 4,
05589: qwp_numpy_dtype.qwp_numpy_u32_ipv4)
+05590: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+05591: _dataframe_columnar_call_arrow_append(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 5591, __pyx_L1_error)
05592: chunk, col, row_offset, row_count)
+05593: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+05594: elif col.setup.target == col_target_t.col_target_column_binary:
break;
case __pyx_e_7questdb_7_client_col_target_column_str:
+05595: if col.setup.source == col_source_t.col_source_bytes_pyobj:
__pyx_t_1 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_bytes_pyobj);
if (__pyx_t_1) {
/* … */
}
05596: # A UUID or LONG256 round-trip claim turns the same object
05597: # column into fixed-width rows instead of an offsets table.
+05598: if (col.setup.has_override
if (__pyx_v_col->setup->has_override) {
} else {
__pyx_t_1 = __pyx_v_col->setup->has_override;
goto __pyx_L53_bool_binop_done;
}
/* … */
if (__pyx_t_1) {
/* … */
}
05599: and col.setup.override_dtype
+05600: == qwp_numpy_dtype.qwp_numpy_s16):
__pyx_t_3 = (__pyx_v_col->setup->override_dtype == qwp_numpy_s16);
__pyx_t_1 = __pyx_t_3;
__pyx_L53_bool_binop_done:;
+05601: _dataframe_columnar_append_pyobj_simple(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_simple(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count, 16, qwp_numpy_s16); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 5601, __pyx_L1_error)
05602: chunk, col, prebuilt, row_offset, row_count, 16,
05603: qwp_numpy_dtype.qwp_numpy_s16)
+05604: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+05605: if (col.setup.has_override
if (__pyx_v_col->setup->has_override) {
} else {
__pyx_t_1 = __pyx_v_col->setup->has_override;
goto __pyx_L56_bool_binop_done;
}
/* … */
if (__pyx_t_1) {
/* … */
}
05606: and col.setup.override_dtype
+05607: == qwp_numpy_dtype.qwp_numpy_s32):
__pyx_t_3 = (__pyx_v_col->setup->override_dtype == qwp_numpy_s32);
__pyx_t_1 = __pyx_t_3;
__pyx_L56_bool_binop_done:;
+05608: _dataframe_columnar_append_pyobj_simple(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_simple(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count, 32, qwp_numpy_s32); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 5608, __pyx_L1_error)
05609: chunk, col, prebuilt, row_offset, row_count, 32,
05610: qwp_numpy_dtype.qwp_numpy_s32)
+05611: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+05612: _dataframe_columnar_append_pyobj_bytes(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_bytes(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 5612, __pyx_L1_error)
05613: chunk, col, prebuilt, row_offset, row_count)
+05614: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+05615: if col.setup.source == col_source_t.col_source_fsb_claimed_arrow:
__pyx_t_1 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_fsb_claimed_arrow);
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L58;
}
05616: # The Arrow value buffer is already packed 16- or 32-byte
05617: # rows, the layout the claimed kind's NumPy dtype reads, so
05618: # it goes out as it stands with the column's own validity.
05619: # The plan checks have held it to one zero-offset array.
+05620: if strncmp(col.setup.arrow_schema.format,
if (__pyx_t_1) {
/* … */
goto __pyx_L59;
}
+05621: _ARROW_FMT_FSB16, 5) == 0:
__pyx_t_1 = (strncmp(__pyx_v_col->setup->arrow_schema.format, __pyx_v_7questdb_7_client__ARROW_FMT_FSB16, 5) == 0);
+05622: numpy_dtype = qwp_numpy_dtype.qwp_numpy_s16
__pyx_v_numpy_dtype = qwp_numpy_s16;
+05623: element_size = 16
__pyx_v_element_size = 16;
+05624: elif strncmp(col.setup.arrow_schema.format,
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L59;
}
+05625: _ARROW_FMT_FSB32, 5) == 0:
__pyx_t_1 = (strncmp(__pyx_v_col->setup->arrow_schema.format, __pyx_v_7questdb_7_client__ARROW_FMT_FSB32, 5) == 0);
+05626: numpy_dtype = qwp_numpy_dtype.qwp_numpy_s32
__pyx_v_numpy_dtype = qwp_numpy_s32;
+05627: element_size = 32
__pyx_v_element_size = 32;
05628: else:
+05629: raise RuntimeError(
/*else*/ {
__pyx_t_6 = NULL;
__pyx_t_14 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Claimed_fixed_size_binary_column};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5629, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 5629, __pyx_L1_error)
}
__pyx_L59:;
05630: 'Claimed fixed-size binary column is neither 16 nor '
05631: '32 bytes wide.')
+05632: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L62;
}
__pyx_L62:;
}
}
+05633: ok = qwp_chunk_append_numpy_column(
__pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_numpy_dtype, (((uint8_t const *)__pyx_v_data) + (__pyx_v_row_offset * __pyx_v_element_size)), (__pyx_v_row_count * __pyx_v_element_size), __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
}
05634: chunk,
05635: col.name.buf,
05636: col.name.len,
05637: numpy_dtype,
05638: (<const uint8_t*>data) + row_offset * element_size,
05639: row_count * element_size,
05640: row_count,
05641: validity_ptr,
05642: NULL,
05643: &err)
05644: else:
+05645: raise RuntimeError('Unsupported columnar binary field source.')
/*else*/ {
__pyx_t_6 = NULL;
__pyx_t_14 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Unsupported_columnar_binary_fiel};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5645, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 5645, __pyx_L1_error)
}
__pyx_L58:;
+05646: elif col.setup.target == col_target_t.col_target_column_str:
break;
case __pyx_e_7questdb_7_client_col_target_symbol:
+05647: if col.setup.source == col_source_t.col_source_str_pyobj:
__pyx_t_1 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_str_pyobj);
if (__pyx_t_1) {
/* … */
}
+05648: _dataframe_columnar_append_pyobj_str(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_str(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 5648, __pyx_L1_error)
05649: chunk, col, prebuilt, row_offset, row_count)
+05650: return 0 # err already raised inside on failure
{
__pyx_r = 0;
}
goto __pyx_L0;
+05651: if col.setup.source in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_str_i8_cat:
/* … */
break;
default: break;
}
+05652: col_source_t.col_source_str_i8_cat,
case __pyx_e_7questdb_7_client_col_source_str_i16_cat:
+05653: col_source_t.col_source_str_i16_cat,
case __pyx_e_7questdb_7_client_col_source_str_i32_cat:
05654: col_source_t.col_source_str_i32_cat):
+05655: _dataframe_columnar_call_arrow_append(
__pyx_t_18.__pyx_n = 1;
__pyx_t_18.symbol_mode = qwp_symbol_mode_not_symbol;
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, &__pyx_t_18); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 5655, __pyx_L1_error)
05656: chunk, col, row_offset, row_count,
05657: qwp_symbol_mode_not_symbol)
+05658: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+05659: _dataframe_columnar_call_arrow_append(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 5659, __pyx_L1_error)
05660: chunk, col, row_offset, row_count)
+05661: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+05662: elif col.setup.target == col_target_t.col_target_symbol:
break;
case __pyx_e_7questdb_7_client_col_target_column_decimal:
+05663: _dataframe_columnar_call_arrow_append(
__pyx_t_18.__pyx_n = 1;
__pyx_t_18.symbol_mode = qwp_symbol_mode_symbol;
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, &__pyx_t_18); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 5663, __pyx_L1_error)
05664: chunk, col, row_offset, row_count,
05665: qwp_symbol_mode_symbol)
+05666: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+05667: elif col.setup.target == col_target_t.col_target_column_decimal:
break;
default:
+05668: _dataframe_columnar_call_arrow_append(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 5668, __pyx_L1_error)
05669: chunk, col, row_offset, row_count)
+05670: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
05671: else:
+05672: raise RuntimeError('Unsupported columnar field target.')
__pyx_t_6 = NULL;
__pyx_t_14 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Unsupported_columnar_field_targe};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5672, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 5672, __pyx_L1_error)
break;
}
05673:
+05674: if not ok:
__pyx_t_1 = (!__pyx_v_ok);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05675: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5675, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 5675, __pyx_L1_error)
05676:
05677:
+05678: cdef void_int _dataframe_columnar_append_at(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_append_at(struct qwp_chunk *__pyx_v_chunk, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_prebuilt, size_t __pyx_v_row_offset, size_t __pyx_v_row_count) {
struct line_sender_error *__pyx_v_err;
int64_t const *__pyx_v_data;
int __pyx_v_ok;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_append_at", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
05679: qwp_chunk* chunk,
05680: col_t* col,
05681: pyobj_built_t* prebuilt,
05682: size_t row_offset,
05683: size_t row_count) except -1:
+05684: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
05685: cdef const int64_t* data
+05686: cdef bint ok = False
__pyx_v_ok = 0;
05687:
+05688: if col.setup.source == col_source_t.col_source_datetime_pyobj:
__pyx_t_1 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_datetime_pyobj);
if (__pyx_t_1) {
/* … */
}
+05689: if prebuilt == NULL:
__pyx_t_1 = (__pyx_v_prebuilt == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05690: raise RuntimeError(
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_PyObject_datetime_designated_TS};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5690, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 5690, __pyx_L1_error)
05691: 'PyObject datetime designated TS missing pre-built buffer.')
+05692: if prebuilt.has_nulls:
if (unlikely(__pyx_v_prebuilt->has_nulls)) {
/* … */
}
+05693: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5693, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+05694: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_4 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_4 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Designated_timestamp_column_cann}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 5693, __pyx_L1_error)
05695: 'Designated timestamp column cannot contain nulls.')
+05696: data = <const int64_t*>prebuilt.data
__pyx_v_data = ((int64_t const *)__pyx_v_prebuilt->data);
+05697: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L8;
}
__pyx_L8:;
}
}
+05698: ok = qwp_chunk_at_micros(
__pyx_v_ok = qwp_chunk_at_micros(__pyx_v_chunk, (__pyx_v_data + __pyx_v_row_offset), __pyx_v_row_count, (&__pyx_v_err));
}
05699: chunk,
05700: data + row_offset,
05701: row_count,
05702: &err)
+05703: if not ok:
__pyx_t_1 = (!__pyx_v_ok);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05704: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5704, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 5704, __pyx_L1_error)
+05705: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
05706:
+05707: data = <const int64_t*>(col.setup.chunks.chunks[0].buffers[1])
__pyx_v_data = ((int64_t const *)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
05708:
+05709: if col.setup.source in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_dt64ns_numpy:
/* … */
break;
case __pyx_e_7questdb_7_client_col_source_dt64us_numpy:
+05710: col_source_t.col_source_dt64ns_numpy,
case __pyx_e_7questdb_7_client_col_source_dt64ns_tz_arrow:
05711: col_source_t.col_source_dt64ns_tz_arrow):
+05712: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L12;
}
__pyx_L12:;
}
}
+05713: ok = qwp_chunk_at_nanos(
__pyx_v_ok = qwp_chunk_at_nanos(__pyx_v_chunk, (__pyx_v_data + __pyx_v_row_offset), __pyx_v_row_count, (&__pyx_v_err));
}
05714: chunk,
05715: data + row_offset,
05716: row_count,
05717: &err)
+05718: elif col.setup.source in (
break;
case __pyx_e_7questdb_7_client_col_source_dt64ms_tz_arrow:
+05719: col_source_t.col_source_dt64us_numpy,
case __pyx_e_7questdb_7_client_col_source_dt64us_tz_arrow:
05720: col_source_t.col_source_dt64us_tz_arrow):
+05721: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L15;
}
__pyx_L15:;
}
}
+05722: ok = qwp_chunk_at_micros(
__pyx_v_ok = qwp_chunk_at_micros(__pyx_v_chunk, (__pyx_v_data + __pyx_v_row_offset), __pyx_v_row_count, (&__pyx_v_err));
}
05723: chunk,
05724: data + row_offset,
05725: row_count,
05726: &err)
+05727: elif col.setup.source == col_source_t.col_source_dt64ms_tz_arrow:
break;
case __pyx_e_7questdb_7_client_col_source_dt64s_tz_arrow:
+05728: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L18;
}
__pyx_L18:;
}
}
+05729: ok = qwp_chunk_at_millis(
__pyx_v_ok = qwp_chunk_at_millis(__pyx_v_chunk, (__pyx_v_data + __pyx_v_row_offset), __pyx_v_row_count, (&__pyx_v_err));
}
05730: chunk,
05731: data + row_offset,
05732: row_count,
05733: &err)
+05734: elif col.setup.source == col_source_t.col_source_dt64s_tz_arrow:
break;
default:
+05735: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L21;
}
__pyx_L21:;
}
}
+05736: ok = qwp_chunk_at_seconds(
__pyx_v_ok = qwp_chunk_at_seconds(__pyx_v_chunk, (__pyx_v_data + __pyx_v_row_offset), __pyx_v_row_count, (&__pyx_v_err));
}
05737: chunk,
05738: data + row_offset,
05739: row_count,
05740: &err)
05741: else:
+05742: raise RuntimeError('Unsupported columnar designated timestamp source.')
__pyx_t_5 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Unsupported_columnar_designated};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5742, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 5742, __pyx_L1_error)
break;
}
05743:
+05744: if not ok:
__pyx_t_1 = (!__pyx_v_ok);
if (unlikely(__pyx_t_1)) {
/* … */
}
+05745: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5745, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 5745, __pyx_L1_error)
05746:
05747:
05748: # What `_geohash_override_dtype` answers with besides a
05749: # `qwp_numpy_dtype` slot.
+05750: cdef int _GEOHASH_DTYPE_NONE = -1
__pyx_v_7questdb_7_client__GEOHASH_DTYPE_NONE = -1;
+05751: cdef int _GEOHASH_DTYPE_UNSIGNED = -2
__pyx_v_7questdb_7_client__GEOHASH_DTYPE_UNSIGNED = -2;
05752:
05753:
+05754: cdef int _geohash_override_dtype(col_source_t source) noexcept:
static int __pyx_f_7questdb_7_client__geohash_override_dtype(enum __pyx_t_7questdb_7_client_col_source_t __pyx_v_source) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
05755: """The GEOHASH slot a column of this source goes out in,
05756: ``_GEOHASH_DTYPE_UNSIGNED`` for an unsigned integer column, or
05757: ``_GEOHASH_DTYPE_NONE`` for anything else.
05758:
05759: A GEOHASH rides on a signed integer: `qwp_numpy_dtype` names only
05760: signed geohash slots. An unsigned column whose claim fits its width
05761: has already been given the signed type of the same width by
05762: `_dataframe_reinterpret_unsigned_geohash`, so an unsigned column
05763: here holds a claim wider than it can carry. It gets its own answer
05764: so that the dropped claim is reported rather than left silent.
05765: """
+05766: if (source == col_source_t.col_source_u8_numpy
switch (__pyx_v_source) {
case __pyx_e_7questdb_7_client_col_source_u8_numpy:
case __pyx_e_7questdb_7_client_col_source_u16_numpy:
/* … */
break;
default: break;
}
+05767: or source == col_source_t.col_source_u16_numpy
case __pyx_e_7questdb_7_client_col_source_u32_numpy:
+05768: or source == col_source_t.col_source_u32_numpy
case __pyx_e_7questdb_7_client_col_source_u64_numpy:
05769: or source == col_source_t.col_source_u64_numpy):
+05770: return _GEOHASH_DTYPE_UNSIGNED
{
__pyx_r = __pyx_v_7questdb_7_client__GEOHASH_DTYPE_UNSIGNED;
}
goto __pyx_L0;
+05771: if source == col_source_t.col_source_i8_numpy:
__pyx_t_1 = (__pyx_v_source == __pyx_e_7questdb_7_client_col_source_i8_numpy);
if (__pyx_t_1) {
/* … */
}
+05772: return <int>qwp_numpy_dtype.qwp_numpy_geohash_i8
{
__pyx_r = ((int)qwp_numpy_geohash_i8);
}
goto __pyx_L0;
+05773: if source == col_source_t.col_source_i16_numpy:
__pyx_t_1 = (__pyx_v_source == __pyx_e_7questdb_7_client_col_source_i16_numpy);
if (__pyx_t_1) {
/* … */
}
+05774: return <int>qwp_numpy_dtype.qwp_numpy_geohash_i16
{
__pyx_r = ((int)qwp_numpy_geohash_i16);
}
goto __pyx_L0;
+05775: if source == col_source_t.col_source_i32_numpy:
__pyx_t_1 = (__pyx_v_source == __pyx_e_7questdb_7_client_col_source_i32_numpy);
if (__pyx_t_1) {
/* … */
}
+05776: return <int>qwp_numpy_dtype.qwp_numpy_geohash_i32
{
__pyx_r = ((int)qwp_numpy_geohash_i32);
}
goto __pyx_L0;
+05777: if (source == col_source_t.col_source_i64_numpy
switch (__pyx_v_source) {
case __pyx_e_7questdb_7_client_col_source_i64_numpy:
case __pyx_e_7questdb_7_client_col_source_i64_arrow:
/* … */
break;
default: break;
}
+05778: or source == col_source_t.col_source_i64_arrow
case __pyx_e_7questdb_7_client_col_source_int_pyobj:
05779: or source == col_source_t.col_source_int_pyobj):
05780: # An object column of Python ints — what a masked pandas dtype
05781: # becomes — is widened to the 64-bit geohash; the claim carries
05782: # the precision, so the storage width no longer has to.
05783: #
05784: # `i64_arrow` is here because it is the one Arrow integer width
05785: # that resolves to `col_target_column_i64` and so reaches the
05786: # wire as a raw buffer the append call names a dtype for. The
05787: # narrower Arrow widths take their own targets and go to the
05788: # native importer as Arrow arrays, which carry no type hint;
05789: # `_dataframe_normalize_claimed_arrow` reshapes those instead.
+05790: return <int>qwp_numpy_dtype.qwp_numpy_geohash_i64
{
__pyx_r = ((int)qwp_numpy_geohash_i64);
}
goto __pyx_L0;
+05791: return _GEOHASH_DTYPE_NONE
{
__pyx_r = __pyx_v_7questdb_7_client__GEOHASH_DTYPE_NONE;
}
goto __pyx_L0;
05792:
05793:
+05794: cdef int _geohash_dtype_max_bits(int gh) noexcept:
static int __pyx_f_7questdb_7_client__geohash_dtype_max_bits(int __pyx_v_gh) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
05795: """The widest precision a GEOHASH slot of this width can hold.
05796:
05797: Signed carriers preserve their raw two's-complement bits, so their
05798: sign bit is available to a byte-aligned GEOHASH. The 64-bit slot
05799: stops at 60 because that is the widest GEOHASH QuestDB has.
05800:
05801: `_attrs_override_fits` states the same four numbers against Arrow
05802: types.
05803: """
+05804: if gh == <int>qwp_numpy_dtype.qwp_numpy_geohash_i8:
__pyx_t_1 = (__pyx_v_gh == ((int)qwp_numpy_geohash_i8));
if (__pyx_t_1) {
/* … */
}
+05805: return 8
{
__pyx_r = 8;
}
goto __pyx_L0;
+05806: if gh == <int>qwp_numpy_dtype.qwp_numpy_geohash_i16:
__pyx_t_1 = (__pyx_v_gh == ((int)qwp_numpy_geohash_i16));
if (__pyx_t_1) {
/* … */
}
+05807: return 16
{
__pyx_r = 16;
}
goto __pyx_L0;
+05808: if gh == <int>qwp_numpy_dtype.qwp_numpy_geohash_i32:
__pyx_t_1 = (__pyx_v_gh == ((int)qwp_numpy_geohash_i32));
if (__pyx_t_1) {
/* … */
}
+05809: return 32
{
__pyx_r = 32;
}
goto __pyx_L0;
+05810: if gh == <int>qwp_numpy_dtype.qwp_numpy_geohash_i64:
__pyx_t_1 = (__pyx_v_gh == ((int)qwp_numpy_geohash_i64));
if (__pyx_t_1) {
/* … */
}
+05811: return 60
{
__pyx_r = 60;
}
goto __pyx_L0;
+05812: return -1
{
__pyx_r = -1;
}
goto __pyx_L0;
05813:
05814:
+05815: cdef object _dataframe_normalize_nullable(object df):
static PyObject *__pyx_f_7questdb_7_client__dataframe_normalize_nullable(PyObject *__pyx_v_df) {
PyObject *__pyx_v_masked_base = 0;
PyObject *__pyx_v_convert = NULL;
PyObject *__pyx_v_pos = NULL;
PyObject *__pyx_v_dtype = NULL;
PyObject *__pyx_v_out = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_AddTraceback("questdb._client._dataframe_normalize_nullable", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_masked_base);
__Pyx_XDECREF(__pyx_v_convert);
__Pyx_XDECREF(__pyx_v_pos);
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_XDECREF(__pyx_v_out);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+05816: if not _is_pandas_dataframe_object(df):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 5816, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+05817: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+05818: _dataframe_may_import_deps()
__pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5818, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+05819: cdef object masked_base = _pandas_masked_dtype()
__pyx_t_3 = __pyx_f_7questdb_7_client__pandas_masked_dtype(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5819, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_masked_base = __pyx_t_3; __pyx_t_3 = 0;
+05820: convert = []
__pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5820, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_convert = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
+05821: for pos, dtype in enumerate(df.dtypes):
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_0); __pyx_t_3 = __pyx_mstate_global->__pyx_int_0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5821, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) { __pyx_t_5 = __pyx_t_4; __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0; __pyx_t_7 = NULL; } else { __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5821, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5821, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; for (;;) { if (likely(!__pyx_t_7)) { if (likely(PyList_CheckExact(__pyx_t_5))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_5); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 5821, __pyx_L1_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } __pyx_t_4 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_5, __pyx_t_6, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_6; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_5); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 5821, __pyx_L1_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6)); #else __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_5, __pyx_t_6); #endif ++__pyx_t_6; } if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5821, __pyx_L1_error) } else { __pyx_t_4 = __pyx_t_7(__pyx_t_5); if (unlikely(!__pyx_t_4)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 5821, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_4); __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_4); __pyx_t_4 = 0; __Pyx_INCREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_3); __pyx_t_4 = __Pyx_PyLong_AddObjC(__pyx_t_3, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5821, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = __pyx_t_4; __pyx_t_4 = 0; /* … */ } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
05822: # pyarrow-backed strings keep their Arrow buffers (resolved as
05823: # str_utf8_arrow), so an all-null column survives as a null VARCHAR
05824: # instead of collapsing to a skipped all-null object column.
+05825: if isinstance(dtype, masked_base):
__pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_masked_base); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 5825, __pyx_L1_error) if (__pyx_t_2) { /* … */ goto __pyx_L6; }
+05826: convert.append(pos)
__pyx_t_8 = __Pyx_PyList_Append(__pyx_v_convert, __pyx_v_pos); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 5826, __pyx_L1_error)
+05827: elif (isinstance(dtype, _PANDAS.StringDtype)
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_StringDtype); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5827, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_4); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 5827, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_1) { } else { __pyx_t_2 = __pyx_t_1; goto __pyx_L7_bool_binop_done; } /* … */ if (__pyx_t_2) { /* … */ } __pyx_L6:;
+05828: and getattr(dtype, 'storage', None) != 'pyarrow'):
__pyx_t_4 = __Pyx_GetAttr3(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_storage, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5828, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_CompareBoolNe_object_str(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_pyarrow, Py_NE); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 5828, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_2 = __pyx_t_1; __pyx_L7_bool_binop_done:;
+05829: convert.append(pos)
__pyx_t_8 = __Pyx_PyList_Append(__pyx_v_convert, __pyx_v_pos); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 5829, __pyx_L1_error)
+05830: if not convert:
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_convert);
if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 5830, __pyx_L1_error)
__pyx_t_2 = (__pyx_temp != 0);
}
__pyx_t_1 = (!__pyx_t_2);
if (__pyx_t_1) {
/* … */
}
+05831: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+05832: out = df.copy(deep=False)
__pyx_t_5 = __pyx_v_df; __Pyx_INCREF(__pyx_t_5); __pyx_t_9 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_5, Py_False}; #if CYTHON_VECTORCALL __pyx_t_4 = __pyx_mstate_global->__pyx_tuple[2]; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5832, __pyx_L1_error) __Pyx_INCREF(__pyx_t_4); #else { PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_deep}; __pyx_t_4 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5832, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } #endif __pyx_t_3 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_copy, __pyx_callargs+__pyx_t_9, (1-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5832, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_v_out = __pyx_t_3; __pyx_t_3 = 0;
+05833: for pos in convert:
__pyx_t_3 = __pyx_v_convert; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0; for (;;) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 5833, __pyx_L1_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } __pyx_t_4 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_3, __pyx_t_6, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_6; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5833, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_4); __pyx_t_4 = 0; /* … */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+05834: _dataframe_set_column(out, df, pos, df.iloc[:, pos].astype(object))
__pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5834, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5834, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 5834, __pyx_L1_error); __Pyx_INCREF(__pyx_v_pos); __Pyx_GIVEREF(__pyx_v_pos); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_pos) != (0)) __PYX_ERR(0, 5834, __pyx_L1_error); __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5834, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_5 = __pyx_t_12; __Pyx_INCREF(__pyx_t_5); __pyx_t_9 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_builtin_object}; __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5834, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_13 = __pyx_f_7questdb_7_client__dataframe_set_column(__pyx_v_out, __pyx_v_df, __pyx_v_pos, __pyx_t_4); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 5834, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+05835: out.attrs = dict(df.attrs)
__pyx_t_4 = NULL; __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_attrs); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5835, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_12}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(&PyDict_Type), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5835, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } if (__Pyx_PyObject_SetAttrStr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_attrs, __pyx_t_3) < (0)) __PYX_ERR(0, 5835, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+05836: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
05837:
05838:
+05839: cdef void_int _dataframe_set_column(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_set_column(PyObject *__pyx_v_out, PyObject *__pyx_v_df, PyObject *__pyx_v_pos, PyObject *__pyx_v_value) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._dataframe_set_column", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
05840: object out, object df, object pos, object value) except -1:
05841: # `out[name] = value` trips pandas' chained-assignment refcount
05842: # heuristic when called from Cython (the shallow copy looks like a
05843: # temporary), spamming FutureWarnings under pandas >= 2.2 warn-CoW
05844: # and erroring under `-W error`. Positional `isetitem` performs the
05845: # same block replacement without the heuristic; pandas < 1.5 lacks
05846: # it but also lacks the warning, so plain setitem stays correct.
+05847: if hasattr(out, 'isetitem'):
__pyx_t_1 = __Pyx_HasAttr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_isetitem); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 5847, __pyx_L1_error) if (__pyx_t_1) { /* … */ goto __pyx_L3; }
+05848: out.isetitem(pos, value)
__pyx_t_3 = __pyx_v_out;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_pos, __pyx_v_value};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_isetitem, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5848, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
05849: else:
+05850: out[df.columns[pos]] = value
/*else*/ {
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5850, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_v_pos); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5850, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely((PyObject_SetItem(__pyx_v_out, __pyx_t_3, __pyx_v_value) < 0))) __PYX_ERR(0, 5850, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
}
__pyx_L3:;
05851:
05852:
+05853: cdef object _dataframe_normalize_at_timestamp(object df, object at):
static PyObject *__pyx_f_7questdb_7_client__dataframe_normalize_at_timestamp(PyObject *__pyx_v_df, PyObject *__pyx_v_at) {
PyObject *__pyx_v_dtype = 0;
PyObject *__pyx_v_new_dtype = 0;
PyObject *__pyx_v_out = 0;
PyObject *__pyx_v_at_name = 0;
PyObject *__pyx_v_pos = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_AddTraceback("questdb._client._dataframe_normalize_at_timestamp", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_XDECREF(__pyx_v_new_dtype);
__Pyx_XDECREF(__pyx_v_out);
__Pyx_XDECREF(__pyx_v_at_name);
__Pyx_XDECREF(__pyx_v_pos);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
05854: # tz-aware (DatetimeTZ) ms/s designated-`at` columns can't reach the
05855: # columnar resolver's source override (the shared classifier rejects
05856: # non-ns/us tz units first), so widen them to us here. ArrowDtype ms/s
05857: # is widened to micros in Rust by the millis/seconds designated-ts FFI.
05858: cdef object dtype, new_dtype, out, at_name
+05859: if not _is_pandas_dataframe_object(df):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 5859, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+05860: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+05861: if isinstance(at, str):
__pyx_t_2 = PyUnicode_Check(__pyx_v_at);
if (__pyx_t_2) {
/* … */
goto __pyx_L4;
}
+05862: at_name = at
__Pyx_INCREF(__pyx_v_at);
__pyx_v_at_name = __pyx_v_at;
+05863: elif isinstance(at, int) and not isinstance(at, bool):
__pyx_t_1 = PyLong_Check(__pyx_v_at); if (__pyx_t_1) { } else { __pyx_t_2 = __pyx_t_1; goto __pyx_L5_bool_binop_done; } __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_at, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); __pyx_t_3 = (!__pyx_t_1); __pyx_t_2 = __pyx_t_3; __pyx_L5_bool_binop_done:; if (__pyx_t_2) { /* … */ goto __pyx_L4; }
+05864: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
goto __pyx_L12_try_end;
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
goto __pyx_L1_error;
__pyx_L10_except_return:;
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
goto __pyx_L0;
__pyx_L12_try_end:;
}
+05865: at_name = df.columns[at]
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5865, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_v_at); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5865, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_at_name = __pyx_t_8; __pyx_t_8 = 0;
+05866: except Exception:
__pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_9) { __Pyx_ErrRestore(0,0,0);
+05867: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L10_except_return;
}
goto __pyx_L9_except_error;
+05868: if not isinstance(at_name, str):
__pyx_t_2 = PyUnicode_Check(__pyx_v_at_name);
__pyx_t_3 = (!__pyx_t_2);
if (__pyx_t_3) {
/* … */
}
+05869: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
05870: else:
+05871: return df
/*else*/ {
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
}
__pyx_L4:;
+05872: _dataframe_may_import_deps()
__pyx_t_8 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5872, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+05873: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L21_try_end;
__pyx_L16_error:;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L18_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_5, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L20_try_return:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_5, __pyx_t_4);
goto __pyx_L0;
__pyx_L19_except_return:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_5, __pyx_t_4);
goto __pyx_L0;
__pyx_L21_try_end:;
}
+05874: if at_name not in df.columns:
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5874, __pyx_L16_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_at_name, __pyx_t_8, Py_NE)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 5874, __pyx_L16_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_3) { /* … */ }
+05875: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L20_try_return;
+05876: dtype = df[at_name].dtype
__pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_df, __pyx_v_at_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5876, __pyx_L16_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5876, __pyx_L16_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_v_dtype = __pyx_t_7; __pyx_t_7 = 0;
+05877: except Exception:
__pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_9) { __Pyx_ErrRestore(0,0,0);
+05878: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L19_except_return;
}
goto __pyx_L18_except_error;
+05879: if not isinstance(dtype, _PANDAS.DatetimeTZDtype) or dtype.unit not in ('s', 'ms'):
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_DatetimeTZDtype); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5879, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_7); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 5879, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_1 = (!__pyx_t_2); if (!__pyx_t_1) { } else { __pyx_t_3 = __pyx_t_1; goto __pyx_L26_bool_binop_done; } __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_unit); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5879, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = (__Pyx_PyObject_Equals_obj_ch115(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_s, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 5879, __pyx_L1_error) if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L28_bool_binop_done; } __pyx_t_2 = __Pyx_PyObject_CompareBoolNe_object_str(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_ms, Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 5879, __pyx_L1_error) __pyx_t_1 = __pyx_t_2; __pyx_L28_bool_binop_done:; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = __pyx_t_1; __pyx_t_3 = __pyx_t_2; __pyx_L26_bool_binop_done:; if (__pyx_t_3) { /* … */ }
+05880: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+05881: new_dtype = _PANDAS.DatetimeTZDtype('us', dtype.tz)
__pyx_t_8 = __pyx_v_7questdb_7_client__PANDAS; __Pyx_INCREF(__pyx_t_8); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_tz); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5881, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = 0; { PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_mstate_global->__pyx_n_u_us, __pyx_t_10}; __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_DatetimeTZDtype, __pyx_callargs+__pyx_t_11, (3-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5881, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_v_new_dtype = __pyx_t_7; __pyx_t_7 = 0;
+05882: pos = df.columns.get_loc(at_name)
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5882, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_10 = __pyx_t_8; __Pyx_INCREF(__pyx_t_10); __pyx_t_11 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_at_name}; __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_loc, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5882, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_v_pos = __pyx_t_7; __pyx_t_7 = 0;
+05883: if getattr(pos, '__index__', None) is None:
__pyx_t_7 = __Pyx_GetAttr3(__pyx_v_pos, __pyx_mstate_global->__pyx_n_u_index_2, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5883, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = (__pyx_t_7 == Py_None); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (__pyx_t_3) { /* … */ }
05884: # Duplicate at-column names: leave the frame for the planner
05885: # to reject.
+05886: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+05887: out = df.copy(deep=False)
__pyx_t_8 = __pyx_v_df; __Pyx_INCREF(__pyx_t_8); __pyx_t_11 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_8, Py_False}; #if CYTHON_VECTORCALL __pyx_t_10 = __pyx_mstate_global->__pyx_tuple[2]; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5887, __pyx_L1_error) __Pyx_INCREF(__pyx_t_10); #else { PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_deep}; __pyx_t_10 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5887, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); } #endif __pyx_t_7 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_copy, __pyx_callargs+__pyx_t_11, (1-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_10); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5887, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_v_out = __pyx_t_7; __pyx_t_7 = 0;
+05888: _dataframe_set_column(out, df, pos, df.iloc[:, pos].astype(new_dtype))
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5888, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5888, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 5888, __pyx_L1_error); __Pyx_INCREF(__pyx_v_pos); __Pyx_GIVEREF(__pyx_v_pos); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_v_pos) != (0)) __PYX_ERR(0, 5888, __pyx_L1_error); __pyx_t_13 = __Pyx_PyObject_GetItem(__pyx_t_8, __pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5888, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_10 = __pyx_t_13; __Pyx_INCREF(__pyx_t_10); __pyx_t_11 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_new_dtype}; __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5888, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_t_14 = __pyx_f_7questdb_7_client__dataframe_set_column(__pyx_v_out, __pyx_v_df, __pyx_v_pos, __pyx_t_7); if (unlikely(__pyx_t_14 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 5888, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+05889: out.attrs = dict(df.attrs)
__pyx_t_13 = NULL; __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_attrs); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5889, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_10}; __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)(&PyDict_Type), __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5889, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } if (__Pyx_PyObject_SetAttrStr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_attrs, __pyx_t_7) < (0)) __PYX_ERR(0, 5889, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+05890: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
05891:
05892:
+05893: cdef object _claimed_arrow_col_reshape_dtype(
static PyObject *__pyx_f_7questdb_7_client__claimed_arrow_col_reshape_dtype(PyObject *__pyx_v_types, PyObject *__pyx_v_raw_ty, PyObject *__pyx_v_ty, PyObject *__pyx_v_kind, PyObject *__pyx_v_series) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._claimed_arrow_col_reshape_dtype", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
05894: object types, object raw_ty, object ty, str kind, object series):
05895: """The dtype an Arrow-backed claimed column has to be copied to for
05896: the manual planner to honour its claim, or None where the column
05897: carries it as it stands.
05898:
05899: An integer claim reaches the wire as the NumPy dtype named in the
05900: append call, so it only lands on columns the planner sends as raw
05901: buffers. A column handed to the native Arrow importer instead
05902: carries no type hint, and `qwp_chunk_append_arrow_column` takes no
05903: per-column type override, so those are the ones that need
05904: reshaping.
05905:
05906: The matching NumPy width is the copy to make where the claim has
05907: one: it keeps the column a raw buffer and costs a memcpy, where
05908: object dtype costs a boxed Python int per row -- about 100 times
05909: more for a column of any size. The caller downgrades a NumPy width
05910: to object for a column holding a null, which a NumPy integer dtype
05911: cannot express.
05912:
05913: UUID on a bare 16-byte column and LONG256 on a 32-byte one depend
05914: on the column's layout, which is why `series` is passed in. The
05915: classifier reads those two claims itself and sends the Arrow value
05916: buffer as it stands, so a column that is one zero-offset array
05917: needs no copy and gets None; any other layout gets object, the
05918: fallback `_dataframe_normalize_claimed_arrow` describes.
05919:
05920: `_attrs_override_fits` has already held each kind to the Arrow
05921: types listed here, so the widths not named are the ones it rejects.
05922: """
+05923: if kind == 'ipv4':
__pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_ipv4, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 5923, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
05924: # uint32 resolves to the i64 target and goes out as a raw
05925: # buffer, claim and all.
+05926: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+05927: if kind == 'geohash':
__pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 5927, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
05928: # int64 does the same. int8/16/32 take the narrow BYTE/SHORT/INT
05929: # targets, which reach the importer as Arrow arrays; the same
05930: # width in NumPy takes the i64 target and the raw-buffer route.
+05931: if types.is_int64(ty):
__pyx_t_3 = __pyx_v_types;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_int64, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5931, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 5931, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_1) {
/* … */
}
+05932: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+05933: if types.is_int8(ty):
__pyx_t_3 = __pyx_v_types;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_int8, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5933, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 5933, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_1) {
/* … */
}
+05934: return 'int8'
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_int8);
__pyx_r = __pyx_mstate_global->__pyx_n_u_int8;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+05935: if types.is_int16(ty):
__pyx_t_3 = __pyx_v_types;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_int16, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5935, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 5935, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_1) {
/* … */
}
+05936: return 'int16'
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_int16);
__pyx_r = __pyx_mstate_global->__pyx_n_u_int16;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+05937: return 'int32'
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_int32);
__pyx_r = __pyx_mstate_global->__pyx_n_u_int32;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+05938: if kind == 'char':
__pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_char_2, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 5938, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
05939: # An Arrow uint16 column goes to the importer, which has no CHAR
05940: # hint to read; NumPy uint16 takes the raw-buffer route.
+05941: return 'uint16'
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_uint16);
__pyx_r = __pyx_mstate_global->__pyx_n_u_uint16;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+05942: if kind == 'uuid':
__pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_uuid, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 5942, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
05943: # A `pa.uuid()` column states its own type to the importer and
05944: # already lands as UUID.
+05945: if (isinstance(raw_ty, _PYARROW.lib.BaseExtensionType)
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_lib); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5945, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_BaseExtensionType); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5945, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = PyObject_IsInstance(__pyx_v_raw_ty, __pyx_t_3); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 5945, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_5) { } else { __pyx_t_1 = __pyx_t_5; goto __pyx_L11_bool_binop_done; } /* … */ if (__pyx_t_1) { /* … */ }
+05946: and raw_ty.extension_name == _ARROW_EXT_UUID):
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_raw_ty, __pyx_mstate_global->__pyx_n_u_extension_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5946, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_t_3, __pyx_v_7questdb_7_client__ARROW_EXT_UUID, Py_EQ); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 5946, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_1 = __pyx_t_5; __pyx_L11_bool_binop_done:;
+05947: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
05948: # UUID on a bare 16-byte column and LONG256 on a 32-byte one: the
05949: # planner sends the Arrow value buffer as it stands when there is
05950: # one buffer to send, and object dtype is the fallback for the rest.
05951: # `_dataframe_normalize_claimed_arrow` sets out what that costs.
+05952: if _arrow_col_is_one_zero_offset_buffer(series):
__pyx_t_1 = __pyx_f_7questdb_7_client__arrow_col_is_one_zero_offset_buffer(__pyx_v_series); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 5952, __pyx_L1_error)
if (__pyx_t_1) {
/* … */
}
+05953: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+05954: return object
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_builtin_object);
__pyx_r = __pyx_builtin_object;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
05955:
05956:
+05957: cdef bint _arrow_col_is_one_zero_offset_buffer(object series) except -1:
static int __pyx_f_7questdb_7_client__arrow_col_is_one_zero_offset_buffer(PyObject *__pyx_v_series) {
PyObject *__pyx_v_array = 0;
PyObject *__pyx_v_buffers = 0;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._arrow_col_is_one_zero_offset_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_array);
__Pyx_XDECREF(__pyx_v_buffers);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
05958: """Whether the planner can send this Arrow-backed column's value
05959: buffer as it stands.
05960:
05961: The planner's direct encoders address `buffers[1]` and the validity
05962: bitmap from their first byte, and take one array for the whole
05963: column, so `_dataframe_columnar_plan_failures` refuses any other
05964: layout with "v1 requires one contiguous zero-offset buffer". This
05965: asks the same question of the arrays the planner will export: it
05966: reads them through the same `pa.Array.from_pandas` call
05967: `_dataframe_series_to_arrow_chunks` makes, which for an `ArrowDtype`
05968: column hands back the arrays pandas holds without copying them.
05969: """
+05970: cdef object array = _PYARROW.Array.from_pandas(series)
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5970, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __pyx_t_3; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_series}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_pandas, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5970, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_array = __pyx_t_1; __pyx_t_1 = 0;
05971: cdef object buffers
+05972: if isinstance(array, _PYARROW.ChunkedArray):
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_ChunkedArray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5972, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = PyObject_IsInstance(__pyx_v_array, __pyx_t_1); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 5972, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_5) { /* … */ }
+05973: if array.num_chunks != 1:
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_array, __pyx_mstate_global->__pyx_n_u_num_chunks); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5973, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = (__Pyx_PyLong_BoolNeObjC(__pyx_t_1, __pyx_mstate_global->__pyx_int_1, 1, 0)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 5973, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_5) { /* … */ }
+05974: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+05975: array = array.chunk(0)
__pyx_t_3 = __pyx_v_array;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_int_0};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_chunk, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5975, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF_SET(__pyx_v_array, __pyx_t_1);
__pyx_t_1 = 0;
+05976: if array.offset != 0:
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_array, __pyx_mstate_global->__pyx_n_u_offset); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5976, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = (__Pyx_PyLong_BoolNeObjC(__pyx_t_1, __pyx_mstate_global->__pyx_int_0, 0, 0)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 5976, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_5) { /* … */ }
+05977: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+05978: buffers = array.buffers()
__pyx_t_3 = __pyx_v_array; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_buffers, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5978, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_buffers = __pyx_t_1; __pyx_t_1 = 0;
+05979: return (len(buffers) >= 2
__pyx_t_6 = PyObject_Length(__pyx_v_buffers); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5979, __pyx_L1_error) __pyx_t_7 = (__pyx_t_6 >= 2); if (__pyx_t_7) { } else { __pyx_t_5 = __pyx_t_7; goto __pyx_L6_bool_binop_done; }
+05980: and buffers[1] is not None
__pyx_t_1 = __Pyx_GetItemInt(__pyx_v_buffers, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5980, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = (__pyx_t_1 != Py_None); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_7) { } else { __pyx_t_5 = __pyx_t_7; goto __pyx_L6_bool_binop_done; }
+05981: and (array.null_count == 0 or buffers[0] is not None))
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_array, __pyx_mstate_global->__pyx_n_u_null_count); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5981, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = (__Pyx_PyLong_BoolEqObjC(__pyx_t_1, __pyx_mstate_global->__pyx_int_0, 0, 0)); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 5981, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!__pyx_t_7) { } else { __pyx_t_5 = __pyx_t_7; goto __pyx_L6_bool_binop_done; } __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_buffers, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5981, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = (__pyx_t_1 != Py_None); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = __pyx_t_7; __pyx_L6_bool_binop_done:; { __pyx_r = __pyx_t_5; } goto __pyx_L0;
05982:
05983:
+05984: cdef int _geohash_slot_for_width(Py_ssize_t width) noexcept:
static int __pyx_f_7questdb_7_client__geohash_slot_for_width(Py_ssize_t __pyx_v_width) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
05985: """The signed GEOHASH slot of this many bytes, or
05986: ``_GEOHASH_DTYPE_NONE``."""
+05987: if width == 1:
__pyx_t_1 = (__pyx_v_width == 1);
if (__pyx_t_1) {
/* … */
}
+05988: return <int>qwp_numpy_dtype.qwp_numpy_geohash_i8
{
__pyx_r = ((int)qwp_numpy_geohash_i8);
}
goto __pyx_L0;
+05989: if width == 2:
__pyx_t_1 = (__pyx_v_width == 2);
if (__pyx_t_1) {
/* … */
}
+05990: return <int>qwp_numpy_dtype.qwp_numpy_geohash_i16
{
__pyx_r = ((int)qwp_numpy_geohash_i16);
}
goto __pyx_L0;
+05991: if width == 4:
__pyx_t_1 = (__pyx_v_width == 4);
if (__pyx_t_1) {
/* … */
}
+05992: return <int>qwp_numpy_dtype.qwp_numpy_geohash_i32
{
__pyx_r = ((int)qwp_numpy_geohash_i32);
}
goto __pyx_L0;
+05993: if width == 8:
__pyx_t_1 = (__pyx_v_width == 8);
if (__pyx_t_1) {
/* … */
}
+05994: return <int>qwp_numpy_dtype.qwp_numpy_geohash_i64
{
__pyx_r = ((int)qwp_numpy_geohash_i64);
}
goto __pyx_L0;
+05995: return _GEOHASH_DTYPE_NONE
{
__pyx_r = __pyx_v_7questdb_7_client__GEOHASH_DTYPE_NONE;
}
goto __pyx_L0;
05996:
05997:
+05998: cdef object _geohash_override_bits(object schema_overrides, object name):
static PyObject *__pyx_f_7questdb_7_client__geohash_override_bits(PyObject *__pyx_v_schema_overrides, PyObject *__pyx_v_name) {
PyObject *__pyx_v_override = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._geohash_override_bits", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_override);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
05999: """The precision `schema_overrides` gives this column as a GEOHASH,
06000: or ``None`` when it leaves the column out or names another kind.
06001:
06002: The overrides are validated by the time this runs, so a GEOHASH
06003: entry is always a ``('geohash', bits)`` pair.
06004: """
06005: cdef object override
+06006: if not schema_overrides:
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_schema_overrides); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6006, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+06007: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06008: override = schema_overrides.get(name)
__pyx_t_4 = __pyx_v_schema_overrides; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_name}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6008, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_v_override = __pyx_t_3; __pyx_t_3 = 0;
+06009: if isinstance(override, tuple) and override[0] == 'geohash':
__pyx_t_1 = PyTuple_Check(__pyx_v_override); if (__pyx_t_1) { } else { __pyx_t_2 = __pyx_t_1; goto __pyx_L5_bool_binop_done; } __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_override, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6009, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6009, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_2 = __pyx_t_1; __pyx_L5_bool_binop_done:; if (__pyx_t_2) { /* … */ }
+06010: return override[1]
__pyx_t_3 = __Pyx_GetItemInt(__pyx_v_override, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6010, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
+06011: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
06012:
06013:
+06014: cdef object _pyarrow_signed_int_type(Py_ssize_t width):
static PyObject *__pyx_f_7questdb_7_client__pyarrow_signed_int_type(Py_ssize_t __pyx_v_width) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._pyarrow_signed_int_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_39_dataframe_reinterpret_unsigned_geohash_2generator6(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
06015: """The signed pyarrow integer type of this many bytes."""
+06016: if width == 1:
__pyx_t_1 = (__pyx_v_width == 1);
if (__pyx_t_1) {
/* … */
}
+06017: return _PYARROW.int8()
__pyx_t_3 = __pyx_v_7questdb_7_client__PYARROW;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_int8, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6017, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_2;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_2 = 0;
goto __pyx_L0;
+06018: if width == 2:
__pyx_t_1 = (__pyx_v_width == 2);
if (__pyx_t_1) {
/* … */
}
+06019: return _PYARROW.int16()
__pyx_t_3 = __pyx_v_7questdb_7_client__PYARROW;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_int16, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6019, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_2;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_2 = 0;
goto __pyx_L0;
+06020: if width == 4:
__pyx_t_1 = (__pyx_v_width == 4);
if (__pyx_t_1) {
/* … */
}
+06021: return _PYARROW.int32()
__pyx_t_3 = __pyx_v_7questdb_7_client__PYARROW;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_int32, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6021, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_2;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_2 = 0;
goto __pyx_L0;
+06022: return _PYARROW.int64()
__pyx_t_3 = __pyx_v_7questdb_7_client__PYARROW; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_int64, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6022, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
06023:
06024:
+06025: cdef object _dataframe_reinterpret_unsigned_geohash(
static PyObject *__pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash(PyObject *__pyx_v_df, PyObject *__pyx_v_schema_overrides) {
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_9___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash *__pyx_cur_scope;
PyObject *__pyx_v_names_geohash = 0;
PyObject *__pyx_gb_7questdb_7_client_39_dataframe_reinterpret_unsigned_geohash_2generator6 = 0;
PyObject *__pyx_r = NULL;
__pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_9___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_9___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_9___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash, __pyx_mstate_global->__pyx_empty_tuple, NULL);
if (unlikely(!__pyx_cur_scope)) {
__pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_9___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash *)Py_None);
__Pyx_INCREF(Py_None);
__PYX_ERR(0, 6025, __pyx_L1_error)
} else {
__Pyx_GOTREF((PyObject *)__pyx_cur_scope);
}
__pyx_cur_scope->__pyx_v_schema_overrides = __pyx_v_schema_overrides;
__Pyx_INCREF(__pyx_cur_scope->__pyx_v_schema_overrides);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_schema_overrides);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._dataframe_reinterpret_unsigned_geohash", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_names_geohash);
__Pyx_XDECREF(__pyx_gb_7questdb_7_client_39_dataframe_reinterpret_unsigned_geohash_2generator6);
__Pyx_DECREF((PyObject *)__pyx_cur_scope);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_9___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash {
PyObject_HEAD
PyObject *__pyx_v_schema_overrides;
};
06026: object df, object schema_overrides):
06027: """A copy of the frame in which each unsigned integer column bound
06028: for GEOHASH is the signed integer of the same width, holding the
06029: same bits.
06030:
06031: Both write routes carry a GEOHASH only on a signed integer, and the
06032: native Arrow importer refuses an unsigned column outright, so these
06033: columns are given the signed type before either route looks at the
06034: frame. A GEOHASH value is its bit pattern, so the server receives
06035: exactly the bits the unsigned column held. Arrow columns become
06036: views of each chunk, so no data is copied. A NumPy column of a
06037: pandas frame is viewed as signed too, but pandas copies the view
06038: into a new block when it is set back into the frame. An 8- or
06039: 16-bit polars column on polars older than 1.39 refuses to
06040: reinterpret, so it is copied by a wrapping cast (see
06041: `_polars_reinterpret_unsigned_geohash`).
06042:
06043: A column is bound for GEOHASH when `schema_overrides` names it
06044: ``('geohash', bits)``, or when it carries a GEOHASH claim in
06045: ``df.attrs['questdb']`` and `schema_overrides` does not name it:
06046: the override outranks the claim. The claim is how a frame saved
06047: from version 5.0 of this client arrives, since its plain
06048: `to_pandas()` returned a GEOHASH column as an unsigned NumPy
06049: integer, and `convert_dtypes(dtype_backend='pyarrow')` turns that
06050: into an unsigned Arrow column. An override can name an unsigned
06051: column in any frame that takes overrides, so pyarrow and polars
06052: frames are covered too. A one-shot stream, such as a
06053: `RecordBatchReader`, is read only as the write goes, so its
06054: columns keep their own type.
06055:
06056: Only a claim the column's width can carry is taken this way. A
06057: column whose claim is dropped goes out as its own type, so its
06058: values have to stay as they are. An override is taken at any
06059: precision: one too wide for the column is refused by the importer,
06060: which names the range the column can hold. An override of another
06061: kind leaves the column alone, since 'ipv4' and 'char' need the
06062: unsigned type to apply.
06063: """
+06064: cdef object names_geohash = None
__Pyx_INCREF(Py_None);
__pyx_v_names_geohash = Py_None;
+06065: if _is_pandas_dataframe_object(df):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6065, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+06066: return _pandas_reinterpret_unsigned_geohash(df, schema_overrides)
__pyx_t_2 = __pyx_cur_scope->__pyx_v_schema_overrides;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_3 = __pyx_f_7questdb_7_client__pandas_reinterpret_unsigned_geohash(__pyx_v_df, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6066, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_3;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_3 = 0;
goto __pyx_L0;
+06067: if schema_overrides:
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_schema_overrides); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6067, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
06068: names_geohash = any(
+06069: _geohash_override_bits(schema_overrides, name) is not None
static PyObject *__pyx_pf_7questdb_7_client_39_dataframe_reinterpret_unsigned_geohash_genexpr(PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_10_genexpr *__pyx_cur_scope;
PyObject *__pyx_r = NULL;
__pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_10_genexpr *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_10_genexpr(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_10_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
if (unlikely(!__pyx_cur_scope)) {
__pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_10_genexpr *)Py_None);
__Pyx_INCREF(Py_None);
__PYX_ERR(0, 6069, __pyx_L1_error)
} else {
__Pyx_GOTREF((PyObject *)__pyx_cur_scope);
}
__pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_9___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash *) __pyx_self;
__Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
__Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
__pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
__Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
{
__pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7questdb_7_client_39_dataframe_reinterpret_unsigned_geohash_2generator6, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[6]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_dataframe_reinterpret_unsigned, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(0, 6069, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
}
/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client._dataframe_reinterpret_unsigned_geohash.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__Pyx_DECREF((PyObject *)__pyx_cur_scope);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_39_dataframe_reinterpret_unsigned_geohash_2generator6(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("genexpr", 0);
__pyx_L3_first_run:;
if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 6069, __pyx_L1_error)
/* … */
if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_schema_overrides)) { __Pyx_RaiseClosureNameError("schema_overrides"); __PYX_ERR(0, 6069, __pyx_L1_error) }
__pyx_t_4 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_schema_overrides;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_5 = __pyx_f_7questdb_7_client__geohash_override_bits(__pyx_t_4, __pyx_cur_scope->__pyx_v_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6069, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_6 = (__pyx_t_5 != Py_None);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (__pyx_t_6) {
/* … */
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(Py_True);
__pyx_r = Py_True;
}
__Pyx_XDECREF(__pyx_temp);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L0;
/* … */
}
/* … */
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(Py_False);
__pyx_r = Py_False;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
}
CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
if (__Pyx_PyErr_Occurred()) {
__Pyx_Generator_Replace_StopIteration(0);
__Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
}
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
#if !CYTHON_USE_EXC_INFO_STACK
__Pyx_Coroutine_ResetAndClearException(__pyx_generator);
#endif
__pyx_generator->resume_label = -1;
__Pyx_Coroutine_clear((PyObject*)__pyx_generator);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_3 = __pyx_pf_7questdb_7_client_39_dataframe_reinterpret_unsigned_geohash_genexpr(((PyObject*)__pyx_cur_scope), __pyx_cur_scope->__pyx_v_schema_overrides); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6069, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_2 = __Pyx_Generator_GetInlinedResult(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6069, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF_SET(__pyx_v_names_geohash, __pyx_t_2);
__pyx_t_2 = 0;
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_10_genexpr {
PyObject_HEAD
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_9___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash *__pyx_outer_scope;
PyObject *__pyx_genexpr_arg_0;
PyObject *__pyx_v_name;
};
+06070: for name in schema_overrides)
if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 6070, __pyx_L1_error) }
if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) {
__pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
__pyx_t_2 = 0;
__pyx_t_3 = NULL;
} else {
__pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_genexpr_arg_0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6070, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6070, __pyx_L1_error)
}
for (;;) {
if (likely(!__pyx_t_3)) {
if (likely(PyList_CheckExact(__pyx_t_1))) {
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6070, __pyx_L1_error)
#endif
if (__pyx_t_2 >= __pyx_temp) break;
}
__pyx_t_4 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
++__pyx_t_2;
} else {
{
Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6070, __pyx_L1_error)
#endif
if (__pyx_t_2 >= __pyx_temp) break;
}
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
__pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2));
#else
__pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2);
#endif
++__pyx_t_2;
}
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6070, __pyx_L1_error)
} else {
__pyx_t_4 = __pyx_t_3(__pyx_t_1);
if (unlikely(!__pyx_t_4)) {
PyObject* exc_type = PyErr_Occurred();
if (exc_type) {
if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 6070, __pyx_L1_error)
PyErr_Clear();
}
break;
}
}
__Pyx_GOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_name);
__Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_name, __pyx_t_4);
__Pyx_GIVEREF(__pyx_t_4);
__pyx_t_4 = 0;
/* … */
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/*else*/ {
+06071: if not names_geohash:
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_names_geohash); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6071, __pyx_L1_error) __pyx_t_4 = (!__pyx_t_1); if (__pyx_t_4) { /* … */ }
+06072: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06073: if _is_polars_dataframe_or_lazy(df):
__pyx_t_4 = __pyx_f_7questdb_7_client__is_polars_dataframe_or_lazy(__pyx_v_df); if (unlikely(__pyx_t_4 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6073, __pyx_L1_error) if (__pyx_t_4) { /* … */ }
+06074: return _polars_reinterpret_unsigned_geohash(df, schema_overrides)
__pyx_t_2 = __pyx_cur_scope->__pyx_v_schema_overrides;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_3 = __pyx_f_7questdb_7_client__polars_reinterpret_unsigned_geohash(__pyx_v_df, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6074, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_3;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_3 = 0;
goto __pyx_L0;
06075: # Checked by module before pyarrow is asked, so a frame of another
06076: # kind never makes this import pyarrow.
+06077: if (type(df).__module__.startswith('pyarrow')
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_df)), __pyx_mstate_global->__pyx_n_u_module); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6077, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = __pyx_t_5; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_n_u_pyarrow}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_startswith, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6077, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6077, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_1) { } else { __pyx_t_4 = __pyx_t_1; goto __pyx_L8_bool_binop_done; } /* … */ if (__pyx_t_4) { /* … */ }
+06078: and _dataframe_try_import_pyarrow()
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_try_import_pyarrow(); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6078, __pyx_L1_error) if (__pyx_t_1) { } else { __pyx_t_4 = __pyx_t_1; goto __pyx_L8_bool_binop_done; }
+06079: and isinstance(df, (_PYARROW.Table, _PYARROW.RecordBatch))):
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6079, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_RecordBatch); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6079, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = PyObject_IsInstance(__pyx_v_df, __pyx_t_3); if (!__pyx_t_7) { } else { __pyx_t_1 = __pyx_t_7; goto __pyx_L11_bool_binop_done; } __pyx_t_7 = PyObject_IsInstance(__pyx_v_df, __pyx_t_5); __pyx_t_1 = __pyx_t_7; __pyx_L11_bool_binop_done:; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_4 = __pyx_t_1; __pyx_L8_bool_binop_done:;
+06080: return _pyarrow_reinterpret_unsigned_geohash(df, schema_overrides)
__pyx_t_3 = __pyx_cur_scope->__pyx_v_schema_overrides;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_5 = __pyx_f_7questdb_7_client__pyarrow_reinterpret_unsigned_geohash(__pyx_v_df, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6080, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_5;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_5 = 0;
goto __pyx_L0;
+06081: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
06082:
06083:
+06084: cdef object _pandas_reinterpret_unsigned_geohash(
static PyObject *__pyx_f_7questdb_7_client__pandas_reinterpret_unsigned_geohash(PyObject *__pyx_v_df, PyObject *__pyx_v_schema_overrides) {
PyObject *__pyx_v_cols_meta = 0;
PyObject *__pyx_v_arrow_dtype = 0;
PyObject *__pyx_v_dtype = 0;
PyObject *__pyx_v_meta = 0;
PyObject *__pyx_v_bits = 0;
PyObject *__pyx_v_ty = 0;
PyObject *__pyx_v_col = 0;
PyObject *__pyx_v_chunked = 0;
PyObject *__pyx_v_out = 0;
PyObject *__pyx_v_convert = 0;
Py_ssize_t __pyx_v_width;
int __pyx_v_slot;
int __pyx_v_overridden;
PyObject *__pyx_v_pos = NULL;
PyObject *__pyx_v_name = NULL;
PyObject *__pyx_9genexpr18__pyx_v_chunk = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_XDECREF(__pyx_t_18);
__Pyx_XDECREF(__pyx_t_19);
__Pyx_AddTraceback("questdb._client._pandas_reinterpret_unsigned_geohash", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_cols_meta);
__Pyx_XDECREF(__pyx_v_arrow_dtype);
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_XDECREF(__pyx_v_meta);
__Pyx_XDECREF(__pyx_v_bits);
__Pyx_XDECREF(__pyx_v_ty);
__Pyx_XDECREF(__pyx_v_col);
__Pyx_XDECREF(__pyx_v_chunked);
__Pyx_XDECREF(__pyx_v_out);
__Pyx_XDECREF(__pyx_v_convert);
__Pyx_XDECREF(__pyx_v_pos);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_XDECREF(__pyx_9genexpr18__pyx_v_chunk);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06085: object df, object schema_overrides):
06086: """`_dataframe_reinterpret_unsigned_geohash` for a pandas frame."""
06087: cdef object cols_meta, arrow_dtype, dtype, meta, bits, ty, col
06088: cdef object chunked, out
06089: cdef list convert
06090: cdef Py_ssize_t width
06091: cdef int slot
06092: cdef bint overridden
+06093: cols_meta = _roundtrip_columns_meta(df)
__pyx_t_1 = __pyx_f_7questdb_7_client__roundtrip_columns_meta(__pyx_v_df); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6093, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_cols_meta = __pyx_t_1; __pyx_t_1 = 0;
+06094: if not cols_meta and not schema_overrides:
__pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_cols_meta); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6094, __pyx_L1_error) __pyx_t_4 = (!__pyx_t_3); if (__pyx_t_4) { } else { __pyx_t_2 = __pyx_t_4; goto __pyx_L4_bool_binop_done; } __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_schema_overrides); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 6094, __pyx_L1_error) __pyx_t_3 = (!__pyx_t_4); __pyx_t_2 = __pyx_t_3; __pyx_L4_bool_binop_done:; if (__pyx_t_2) { /* … */ }
+06095: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06096: _dataframe_may_import_deps()
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6096, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+06097: arrow_dtype = getattr(_PANDAS, 'ArrowDtype', None)
__pyx_t_1 = __pyx_v_7questdb_7_client__PANDAS; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = __Pyx_GetAttr3(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ArrowDtype, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6097, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_arrow_dtype = __pyx_t_5; __pyx_t_5 = 0;
+06098: convert = []
__pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6098, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_v_convert = ((PyObject*)__pyx_t_5); __pyx_t_5 = 0;
06099: # Walked by position rather than by label: `dtypes[name]` on a frame
06100: # with duplicate column names hands back a Series, not a dtype.
+06101: for pos, (name, dtype) in enumerate(zip(df.columns, df.dtypes)):
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_0); __pyx_t_5 = __pyx_mstate_global->__pyx_int_0; __pyx_t_6 = NULL; __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6101, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6101, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = 1; { PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_7, __pyx_t_8}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_zip, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6101, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { __pyx_t_8 = __pyx_t_1; __Pyx_INCREF(__pyx_t_8); __pyx_t_10 = 0; __pyx_t_11 = NULL; } else { __pyx_t_10 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6101, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_11 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_8); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6101, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { if (likely(!__pyx_t_11)) { if (likely(PyList_CheckExact(__pyx_t_8))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_8); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6101, __pyx_L1_error) #endif if (__pyx_t_10 >= __pyx_temp) break; } __pyx_t_1 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_8, __pyx_t_10, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_10; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_8); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6101, __pyx_L1_error) #endif if (__pyx_t_10 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_10)); #else __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_8, __pyx_t_10); #endif ++__pyx_t_10; } if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6101, __pyx_L1_error) } else { __pyx_t_1 = __pyx_t_11(__pyx_t_8); if (unlikely(!__pyx_t_1)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 6101, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_1); if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 6101, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_7); __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_6); } else { __pyx_t_7 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6101, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_7); __pyx_t_6 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6101, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_6); } #else __pyx_t_7 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6101, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6101, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_12 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6101, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_13 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_12); index = 0; __pyx_t_7 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_7)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_7); index = 1; __pyx_t_6 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_6)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_12), 2) < (0)) __PYX_ERR(0, 6101, __pyx_L1_error) __pyx_t_13 = NULL; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; goto __pyx_L9_unpacking_done; __pyx_L8_unpacking_failed:; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_13 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 6101, __pyx_L1_error) __pyx_L9_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_6); __pyx_t_6 = 0; __Pyx_INCREF(__pyx_t_5); __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_5); __pyx_t_1 = __Pyx_PyLong_AddObjC(__pyx_t_5, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6101, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = __pyx_t_1; __pyx_t_1 = 0; /* … */ __pyx_L6_continue:; } __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06102: overridden = bool(schema_overrides) and name in schema_overrides
__pyx_t_6 = NULL;
__pyx_t_9 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_schema_overrides};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6102, __pyx_L1_error)
__Pyx_GOTREF((PyObject *)__pyx_t_1);
}
__pyx_t_3 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_t_1)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6102, __pyx_L1_error)
__Pyx_DECREF((PyObject *)__pyx_t_1); __pyx_t_1 = 0;
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L10_bool_binop_done;
}
__pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_name, __pyx_v_schema_overrides, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6102, __pyx_L1_error)
__pyx_t_2 = __pyx_t_3;
__pyx_L10_bool_binop_done:;
__pyx_v_overridden = __pyx_t_2;
+06103: if overridden:
if (__pyx_v_overridden) {
/* … */
goto __pyx_L12;
}
+06104: bits = _geohash_override_bits(schema_overrides, name)
__pyx_t_1 = __pyx_f_7questdb_7_client__geohash_override_bits(__pyx_v_schema_overrides, __pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6104, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_bits, __pyx_t_1); __pyx_t_1 = 0;
+06105: if bits is None:
__pyx_t_2 = (__pyx_v_bits == Py_None);
if (__pyx_t_2) {
/* … */
}
+06106: continue
goto __pyx_L6_continue;
06107: else:
+06108: meta = cols_meta.get(name) if cols_meta else None
/*else*/ {
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_cols_meta); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6108, __pyx_L1_error)
if (__pyx_t_2) {
__pyx_t_7 = __pyx_v_cols_meta;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_9 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_name};
__pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6108, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
}
__pyx_t_1 = __pyx_t_6;
__pyx_t_6 = 0;
} else {
__Pyx_INCREF(Py_None);
__pyx_t_1 = Py_None;
}
__Pyx_XDECREF_SET(__pyx_v_meta, __pyx_t_1);
__pyx_t_1 = 0;
+06109: if _roundtrip_kind(meta) != 'geohash':
__pyx_t_1 = __pyx_f_7questdb_7_client__roundtrip_kind(__pyx_v_meta); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_CompareBoolNe_str_str(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6109, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ }
+06110: continue
goto __pyx_L6_continue;
+06111: bits = meta.get('precision_bits') or 0
__pyx_t_7 = __pyx_v_meta;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_9 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_n_u_precision_bits};
__pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6111, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
}
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6111, __pyx_L1_error)
if (!__pyx_t_2) {
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
} else {
__Pyx_INCREF(__pyx_t_6);
__pyx_t_1 = __pyx_t_6;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
goto __pyx_L15_bool_binop_done;
}
__pyx_t_6 = __Pyx_PyLong_From_long(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6111, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_1 = __pyx_t_6;
__pyx_t_6 = 0;
__pyx_L15_bool_binop_done:;
__Pyx_XDECREF_SET(__pyx_v_bits, __pyx_t_1);
__pyx_t_1 = 0;
}
__pyx_L12:;
+06112: if arrow_dtype is not None and isinstance(dtype, arrow_dtype):
__pyx_t_3 = (__pyx_v_arrow_dtype != Py_None);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L18_bool_binop_done;
}
__pyx_t_3 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_arrow_dtype); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 6112, __pyx_L1_error)
__pyx_t_2 = __pyx_t_3;
__pyx_L18_bool_binop_done:;
if (__pyx_t_2) {
/* … */
goto __pyx_L17;
}
+06113: if not _dataframe_try_import_pyarrow():
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_try_import_pyarrow(); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6113, __pyx_L1_error) __pyx_t_3 = (!__pyx_t_2); if (__pyx_t_3) { /* … */ }
+06114: continue
goto __pyx_L6_continue;
+06115: ty = dtype.pyarrow_dtype
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_pyarrow_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6115, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_ty, __pyx_t_1); __pyx_t_1 = 0;
+06116: if not _PYARROW.types.is_unsigned_integer(ty):
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6116, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = __pyx_t_7; __Pyx_INCREF(__pyx_t_6); __pyx_t_9 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_ty}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_unsigned_integer, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6116, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6116, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = (!__pyx_t_3); if (__pyx_t_2) { /* … */ }
+06117: continue
goto __pyx_L6_continue;
+06118: width = ty.bit_width // 8
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_ty, __pyx_mstate_global->__pyx_n_u_bit_width); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6118, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __Pyx_PyLong_FloorDivideObjC(__pyx_t_1, __pyx_mstate_global->__pyx_int_8, 8, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6118, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_14 = __Pyx_PyIndex_AsSsize_t(__pyx_t_7); if (unlikely((__pyx_t_14 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 6118, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_width = __pyx_t_14;
+06119: elif isinstance(dtype, numpy.dtype) and dtype.kind == 'u':
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_numpy); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6119, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6119, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_3 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_1); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 6119, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_3) { } else { __pyx_t_2 = __pyx_t_3; goto __pyx_L22_bool_binop_done; } __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_kind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6119, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = (__Pyx_PyObject_Equals_obj_ch117(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_u_2, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6119, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = __pyx_t_3; __pyx_L22_bool_binop_done:; if (__pyx_t_2) { /* … */ goto __pyx_L17; }
+06120: width = dtype.itemsize
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_14 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_14 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 6120, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_width = __pyx_t_14;
06121: else:
+06122: continue
/*else*/ {
goto __pyx_L6_continue;
}
__pyx_L17:;
+06123: slot = _geohash_slot_for_width(width)
__pyx_v_slot = __pyx_f_7questdb_7_client__geohash_slot_for_width(__pyx_v_width);
+06124: if slot == _GEOHASH_DTYPE_NONE:
__pyx_t_2 = (__pyx_v_slot == __pyx_v_7questdb_7_client__GEOHASH_DTYPE_NONE);
if (__pyx_t_2) {
/* … */
}
+06125: continue
goto __pyx_L6_continue;
06126: # An override is taken at any precision, a claim only at one the
06127: # width can carry; see `_dataframe_reinterpret_unsigned_geohash`.
+06128: if not overridden and (
__pyx_t_3 = (!__pyx_v_overridden);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L26_bool_binop_done;
}
/* … */
if (__pyx_t_2) {
/* … */
}
+06129: not _is_integral_not_bool(bits)
__pyx_t_3 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_bits); if (unlikely(__pyx_t_3 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6129, __pyx_L1_error) __pyx_t_4 = (!__pyx_t_3); if (!__pyx_t_4) { } else { __pyx_t_2 = __pyx_t_4; goto __pyx_L26_bool_binop_done; }
+06130: or not 1 <= int(bits) <= _geohash_dtype_max_bits(slot)):
__pyx_t_1 = __Pyx_PyNumber_Int(__pyx_v_bits); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6130, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyObject_CompareBoolLe_int_int(__pyx_mstate_global->__pyx_int_1, __pyx_t_1, Py_LE); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 6130, __pyx_L1_error) if (__pyx_t_4) { __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_f_7questdb_7_client__geohash_dtype_max_bits(__pyx_v_slot)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6130, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = __Pyx_PyObject_CompareBoolLe_int_int(__pyx_t_1, __pyx_t_7, Py_LE); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 6130, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (!__pyx_t_4); __pyx_t_2 = __pyx_t_3; __pyx_L26_bool_binop_done:;
+06131: continue
goto __pyx_L6_continue;
+06132: convert.append((pos, width))
__pyx_t_1 = PyLong_FromSsize_t(__pyx_v_width); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6132, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6132, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_v_pos); __Pyx_GIVEREF(__pyx_v_pos); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_pos) != (0)) __PYX_ERR(0, 6132, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_1); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1) != (0)) __PYX_ERR(0, 6132, __pyx_L1_error); __pyx_t_1 = 0; __pyx_t_15 = __Pyx_PyList_Append(__pyx_v_convert, __pyx_t_7); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(0, 6132, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+06133: if not convert:
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_convert);
if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 6133, __pyx_L1_error)
__pyx_t_2 = (__pyx_temp != 0);
}
__pyx_t_3 = (!__pyx_t_2);
if (__pyx_t_3) {
/* … */
}
+06134: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06135: out = df.copy(deep=False)
__pyx_t_8 = __pyx_v_df; __Pyx_INCREF(__pyx_t_8); __pyx_t_9 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_8, Py_False}; #if CYTHON_VECTORCALL __pyx_t_7 = __pyx_mstate_global->__pyx_tuple[2]; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6135, __pyx_L1_error) __Pyx_INCREF(__pyx_t_7); #else { PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_deep}; __pyx_t_7 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6135, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } #endif __pyx_t_5 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_copy, __pyx_callargs+__pyx_t_9, (1-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6135, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } __pyx_v_out = __pyx_t_5; __pyx_t_5 = 0;
+06136: for pos, width in convert:
__pyx_t_5 = __pyx_v_convert; __Pyx_INCREF(__pyx_t_5); __pyx_t_10 = 0; for (;;) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_5); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6136, __pyx_L1_error) #endif if (__pyx_t_10 >= __pyx_temp) break; } __pyx_t_7 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_5, __pyx_t_10, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_10; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6136, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if ((likely(PyTuple_CheckExact(__pyx_t_7))) || (PyList_CheckExact(__pyx_t_7))) { PyObject* sequence = __pyx_t_7; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 6136, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_8); __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_1); } else { __pyx_t_8 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6136, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_8); __pyx_t_1 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6136, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_1); } #else __pyx_t_8 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6136, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6136, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #endif __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } else { Py_ssize_t index = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6136, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_13 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6); index = 0; __pyx_t_8 = __pyx_t_13(__pyx_t_6); if (unlikely(!__pyx_t_8)) goto __pyx_L33_unpacking_failed; __Pyx_GOTREF(__pyx_t_8); index = 1; __pyx_t_1 = __pyx_t_13(__pyx_t_6); if (unlikely(!__pyx_t_1)) goto __pyx_L33_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_6), 2) < (0)) __PYX_ERR(0, 6136, __pyx_L1_error) __pyx_t_13 = NULL; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L34_unpacking_done; __pyx_L33_unpacking_failed:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_13 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 6136, __pyx_L1_error) __pyx_L34_unpacking_done:; } __pyx_t_14 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_14 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 6136, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_8); __pyx_t_8 = 0; __pyx_v_width = __pyx_t_14; /* … */ } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06137: col = df.iloc[:, pos]
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6137, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6137, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 6137, __pyx_L1_error); __Pyx_INCREF(__pyx_v_pos); __Pyx_GIVEREF(__pyx_v_pos); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_pos) != (0)) __PYX_ERR(0, 6137, __pyx_L1_error); __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6137, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF_SET(__pyx_v_col, __pyx_t_8); __pyx_t_8 = 0;
+06138: if arrow_dtype is not None and isinstance(col.dtype, arrow_dtype):
__pyx_t_2 = (__pyx_v_arrow_dtype != Py_None);
if (__pyx_t_2) {
} else {
__pyx_t_3 = __pyx_t_2;
goto __pyx_L36_bool_binop_done;
}
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_col, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6138, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_2 = PyObject_IsInstance(__pyx_t_8, __pyx_v_arrow_dtype); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 6138, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_3 = __pyx_t_2;
__pyx_L36_bool_binop_done:;
if (__pyx_t_3) {
/* … */
goto __pyx_L35;
}
+06139: ty = _pyarrow_signed_int_type(width)
__pyx_t_8 = __pyx_f_7questdb_7_client__pyarrow_signed_int_type(__pyx_v_width); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6139, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_XDECREF_SET(__pyx_v_ty, __pyx_t_8); __pyx_t_8 = 0;
+06140: chunked = col.array.__arrow_array__()
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_col, __pyx_mstate_global->__pyx_n_u_array); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6140, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = __pyx_t_7; __Pyx_INCREF(__pyx_t_1); __pyx_t_9 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL}; __pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_arrow_array, __pyx_callargs+__pyx_t_9, (1-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6140, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_XDECREF_SET(__pyx_v_chunked, __pyx_t_8); __pyx_t_8 = 0;
+06141: _dataframe_set_column(
__pyx_t_20 = __pyx_f_7questdb_7_client__dataframe_set_column(__pyx_v_out, __pyx_v_df, __pyx_v_pos, __pyx_t_8); if (unlikely(__pyx_t_20 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6141, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
06142: out, df, pos,
+06143: _PANDAS.arrays.ArrowExtensionArray(_PYARROW.chunked_array(
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_arrays); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6143, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __pyx_t_1; __Pyx_INCREF(__pyx_t_7); __pyx_t_12 = __pyx_v_7questdb_7_client__PYARROW; __Pyx_INCREF(__pyx_t_12); { /* enter inner scope */
+06144: [chunk.view(ty) for chunk in chunked.chunks],
__pyx_t_16 = PyList_New(0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 6144, __pyx_L40_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_chunked, __pyx_mstate_global->__pyx_n_u_chunks); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 6144, __pyx_L40_error) __Pyx_GOTREF(__pyx_t_17); if (likely(PyList_CheckExact(__pyx_t_17)) || PyTuple_CheckExact(__pyx_t_17)) { __pyx_t_18 = __pyx_t_17; __Pyx_INCREF(__pyx_t_18); __pyx_t_14 = 0; __pyx_t_11 = NULL; } else { __pyx_t_14 = -1; __pyx_t_18 = PyObject_GetIter(__pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 6144, __pyx_L40_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_11 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_18); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6144, __pyx_L40_error) } __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; for (;;) { if (likely(!__pyx_t_11)) { if (likely(PyList_CheckExact(__pyx_t_18))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_18); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6144, __pyx_L40_error) #endif if (__pyx_t_14 >= __pyx_temp) break; } __pyx_t_17 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_18, __pyx_t_14, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_14; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_18); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6144, __pyx_L40_error) #endif if (__pyx_t_14 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_17 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_18, __pyx_t_14)); #else __pyx_t_17 = __Pyx_PySequence_ITEM(__pyx_t_18, __pyx_t_14); #endif ++__pyx_t_14; } if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 6144, __pyx_L40_error) } else { __pyx_t_17 = __pyx_t_11(__pyx_t_18); if (unlikely(!__pyx_t_17)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 6144, __pyx_L40_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_17); __Pyx_XDECREF_SET(__pyx_9genexpr18__pyx_v_chunk, __pyx_t_17); __pyx_t_17 = 0; __pyx_t_19 = __pyx_9genexpr18__pyx_v_chunk; __Pyx_INCREF(__pyx_t_19); __pyx_t_9 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_19, __pyx_v_ty}; __pyx_t_17 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_view, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0; if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 6144, __pyx_L40_error) __Pyx_GOTREF(__pyx_t_17); } __Pyx_GIVEREF(__pyx_t_17); if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_t_16, __pyx_t_17))) __PYX_ERR(0, 6144, __pyx_L40_error) __pyx_t_17 = 0; } __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_XDECREF(__pyx_9genexpr18__pyx_v_chunk); __pyx_9genexpr18__pyx_v_chunk = 0; goto __pyx_L44_exit_scope; __pyx_L40_error:; __Pyx_XDECREF(__pyx_9genexpr18__pyx_v_chunk); __pyx_9genexpr18__pyx_v_chunk = 0; goto __pyx_L1_error; __pyx_L44_exit_scope:; } /* exit inner scope */
+06145: type=ty)))
__pyx_t_9 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_t_16, __pyx_v_ty};
#if CYTHON_VECTORCALL
__pyx_t_18 = __pyx_mstate_global->__pyx_tuple[10];
if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 6143, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_18);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_type};
__pyx_t_18 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 6143, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
}
#endif
__pyx_t_6 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_chunked_array, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_18);
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6143, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
}
__pyx_t_9 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_6};
__pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_ArrowExtensionArray, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6143, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
}
06146: else:
+06147: _dataframe_set_column(
/*else*/ {
/* … */
__pyx_t_20 = __pyx_f_7questdb_7_client__dataframe_set_column(__pyx_v_out, __pyx_v_df, __pyx_v_pos, __pyx_t_8); if (unlikely(__pyx_t_20 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6147, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
__pyx_L35:;
+06148: out, df, pos, col.to_numpy().view(f'int{width * 8}'))
__pyx_t_7 = __pyx_v_col;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_9 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
__pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_to_numpy, __pyx_callargs+__pyx_t_9, (1-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6148, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
}
__pyx_t_1 = __pyx_t_6;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_7 = __Pyx_PyUnicode_From_Py_ssize_t((__pyx_v_width * 8), 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6148, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_18 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_n_u_int, __pyx_t_7); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 6148, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_18);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_9 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_18};
__pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_view, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6148, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
}
+06149: out.attrs = dict(df.attrs)
__pyx_t_8 = NULL; __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_attrs); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6149, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_6}; __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(&PyDict_Type), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6149, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } if (__Pyx_PyObject_SetAttrStr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_attrs, __pyx_t_5) < (0)) __PYX_ERR(0, 6149, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06150: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
06151:
06152:
+06153: cdef object _pyarrow_reinterpret_unsigned_geohash(
static PyObject *__pyx_f_7questdb_7_client__pyarrow_reinterpret_unsigned_geohash(PyObject *__pyx_v_table, PyObject *__pyx_v_schema_overrides) {
PyObject *__pyx_v_schema = 0;
PyObject *__pyx_v_columns = 0;
PyObject *__pyx_v_field = 0;
PyObject *__pyx_v_ty = 0;
PyObject *__pyx_v_col = 0;
Py_ssize_t __pyx_v_i;
Py_ssize_t __pyx_v_width;
PyObject *__pyx_9genexpr19__pyx_v_chunk = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_AddTraceback("questdb._client._pyarrow_reinterpret_unsigned_geohash", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_schema);
__Pyx_XDECREF(__pyx_v_columns);
__Pyx_XDECREF(__pyx_v_field);
__Pyx_XDECREF(__pyx_v_ty);
__Pyx_XDECREF(__pyx_v_col);
__Pyx_XDECREF(__pyx_9genexpr19__pyx_v_chunk);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06154: object table, object schema_overrides):
06155: """`_dataframe_reinterpret_unsigned_geohash` for a pyarrow `Table`
06156: or `RecordBatch`.
06157:
06158: Each retyped field keeps its name, nullability and metadata, and
06159: the schema keeps its own metadata, so everything the importer reads
06160: from them arrives as it was.
06161: """
+06162: cdef object schema = table.schema
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_table, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6162, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_schema = __pyx_t_1; __pyx_t_1 = 0;
+06163: cdef object columns = None
__Pyx_INCREF(Py_None);
__pyx_v_columns = Py_None;
06164: cdef object field, ty, col
06165: cdef Py_ssize_t i, width
+06166: for i in range(len(schema)):
__pyx_t_2 = PyObject_Length(__pyx_v_schema); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 6166, __pyx_L1_error) __pyx_t_3 = __pyx_t_2; for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { __pyx_v_i = __pyx_t_4;
+06167: field = schema.field(i)
__pyx_t_5 = __pyx_v_schema;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_6 = PyLong_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6167, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_field, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6167, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_XDECREF_SET(__pyx_v_field, __pyx_t_1);
__pyx_t_1 = 0;
+06168: if _geohash_override_bits(schema_overrides, field.name) is None:
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6168, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = __pyx_f_7questdb_7_client__geohash_override_bits(__pyx_v_schema_overrides, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6168, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_8 = (__pyx_t_6 == Py_None); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__pyx_t_8) { /* … */ }
+06169: continue
goto __pyx_L3_continue;
+06170: if not _PYARROW.types.is_unsigned_integer(field.type):
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6170, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = __pyx_t_5; __Pyx_INCREF(__pyx_t_1); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_type); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6170, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_7 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_9}; __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_unsigned_integer, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6170, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); } __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 6170, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_10 = (!__pyx_t_8); if (__pyx_t_10) { /* … */ }
+06171: continue
goto __pyx_L3_continue;
+06172: width = field.type.bit_width // 8
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_type); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6172, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_bit_width); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6172, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyLong_FloorDivideObjC(__pyx_t_5, __pyx_mstate_global->__pyx_int_8, 8, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6172, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 6172, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_width = __pyx_t_11;
+06173: if _geohash_slot_for_width(width) == _GEOHASH_DTYPE_NONE:
__pyx_t_10 = (__pyx_f_7questdb_7_client__geohash_slot_for_width(__pyx_v_width) == __pyx_v_7questdb_7_client__GEOHASH_DTYPE_NONE);
if (__pyx_t_10) {
/* … */
}
+06174: continue
goto __pyx_L3_continue;
+06175: ty = _pyarrow_signed_int_type(width)
__pyx_t_6 = __pyx_f_7questdb_7_client__pyarrow_signed_int_type(__pyx_v_width); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6175, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_XDECREF_SET(__pyx_v_ty, __pyx_t_6); __pyx_t_6 = 0;
+06176: if columns is None:
__pyx_t_10 = (__pyx_v_columns == Py_None);
if (__pyx_t_10) {
/* … */
}
+06177: columns = list(table.columns)
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_table, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6177, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PySequence_ListKeepNew(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6177, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF_SET(__pyx_v_columns, __pyx_t_5); __pyx_t_5 = 0;
+06178: col = columns[i]
__pyx_t_5 = __Pyx_GetItemInt(__pyx_v_columns, __pyx_v_i, Py_ssize_t, 1, PyLong_FromSsize_t, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6178, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_XDECREF_SET(__pyx_v_col, __pyx_t_5); __pyx_t_5 = 0;
+06179: if isinstance(col, _PYARROW.ChunkedArray):
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_ChunkedArray); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6179, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_10 = PyObject_IsInstance(__pyx_v_col, __pyx_t_5); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 6179, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_10) { /* … */ goto __pyx_L9; }
+06180: columns[i] = _PYARROW.chunked_array(
__pyx_t_6 = __pyx_v_7questdb_7_client__PYARROW;
__Pyx_INCREF(__pyx_t_6);
{ /* enter inner scope */
if (unlikely((__Pyx_SetItemInt(__pyx_v_columns, __pyx_v_i, __pyx_t_5, Py_ssize_t, 1, PyLong_FromSsize_t, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 6180, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06181: [chunk.view(ty) for chunk in col.chunks], type=ty)
__pyx_t_9 = PyList_New(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6181, __pyx_L12_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_col, __pyx_mstate_global->__pyx_n_u_chunks); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6181, __pyx_L12_error) __Pyx_GOTREF(__pyx_t_1); if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { __pyx_t_12 = __pyx_t_1; __Pyx_INCREF(__pyx_t_12); __pyx_t_11 = 0; __pyx_t_13 = NULL; } else { __pyx_t_11 = -1; __pyx_t_12 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6181, __pyx_L12_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_13 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6181, __pyx_L12_error) } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { if (likely(!__pyx_t_13)) { if (likely(PyList_CheckExact(__pyx_t_12))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_12); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6181, __pyx_L12_error) #endif if (__pyx_t_11 >= __pyx_temp) break; } __pyx_t_1 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_12, __pyx_t_11, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_11; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_12); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6181, __pyx_L12_error) #endif if (__pyx_t_11 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_12, __pyx_t_11)); #else __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_12, __pyx_t_11); #endif ++__pyx_t_11; } if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6181, __pyx_L12_error) } else { __pyx_t_1 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_1)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 6181, __pyx_L12_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_9genexpr19__pyx_v_chunk, __pyx_t_1); __pyx_t_1 = 0; __pyx_t_14 = __pyx_9genexpr19__pyx_v_chunk; __Pyx_INCREF(__pyx_t_14); __pyx_t_7 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_14, __pyx_v_ty}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_view, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6181, __pyx_L12_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_GIVEREF(__pyx_t_1); if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_t_9, __pyx_t_1))) __PYX_ERR(0, 6181, __pyx_L12_error) __pyx_t_1 = 0; } __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_XDECREF(__pyx_9genexpr19__pyx_v_chunk); __pyx_9genexpr19__pyx_v_chunk = 0; goto __pyx_L16_exit_scope; __pyx_L12_error:; __Pyx_XDECREF(__pyx_9genexpr19__pyx_v_chunk); __pyx_9genexpr19__pyx_v_chunk = 0; goto __pyx_L1_error; __pyx_L16_exit_scope:; } /* exit inner scope */ /* … */ __pyx_t_7 = 0; { PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_9, __pyx_v_ty}; #if CYTHON_VECTORCALL __pyx_t_12 = __pyx_mstate_global->__pyx_tuple[10]; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6180, __pyx_L1_error) __Pyx_INCREF(__pyx_t_12); #else { PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_type}; __pyx_t_12 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6180, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); } #endif __pyx_t_5 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_chunked_array, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_12); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6180, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); }
06182: else:
+06183: columns[i] = col.view(ty)
/*else*/ {
__pyx_t_12 = __pyx_v_col;
__Pyx_INCREF(__pyx_t_12);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_v_ty};
__pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_view, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6183, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
if (unlikely((__Pyx_SetItemInt(__pyx_v_columns, __pyx_v_i, __pyx_t_5, Py_ssize_t, 1, PyLong_FromSsize_t, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 6183, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
}
__pyx_L9:;
+06184: schema = schema.set(i, field.with_type(ty))
__pyx_t_12 = __pyx_v_schema;
__Pyx_INCREF(__pyx_t_12);
__pyx_t_9 = PyLong_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6184, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__pyx_t_1 = __pyx_v_field;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_ty};
__pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_with_type, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6184, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
}
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_t_9, __pyx_t_6};
__pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_set, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6184, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
__Pyx_DECREF_SET(__pyx_v_schema, __pyx_t_5);
__pyx_t_5 = 0;
__pyx_L3_continue:;
}
+06185: if columns is None:
__pyx_t_10 = (__pyx_v_columns == Py_None);
if (__pyx_t_10) {
/* … */
}
+06186: return table
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_table);
__pyx_r = __pyx_v_table;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06187: return type(table).from_arrays(columns, schema=schema)
__pyx_t_6 = ((PyObject *)Py_TYPE(__pyx_v_table)); __Pyx_INCREF(__pyx_t_6); __pyx_t_7 = 0; { PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_v_columns, __pyx_v_schema}; #if CYTHON_VECTORCALL __pyx_t_9 = __pyx_mstate_global->__pyx_tuple[11]; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6187, __pyx_L1_error) __Pyx_INCREF(__pyx_t_9); #else { PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_schema}; __pyx_t_9 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } #endif __pyx_t_5 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_from_arrays, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_9); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_5; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_5 = 0; goto __pyx_L0;
06188:
06189:
+06190: cdef object _polars_reinterpret_unsigned_geohash(
static PyObject *__pyx_f_7questdb_7_client__polars_reinterpret_unsigned_geohash(PyObject *__pyx_v_df, PyObject *__pyx_v_schema_overrides) {
PyObject *__pyx_v_schema = 0;
PyObject *__pyx_v_name = 0;
PyObject *__pyx_v_dtype = 0;
PyObject *__pyx_v_unsigned = 0;
PyObject *__pyx_v_narrow = 0;
PyObject *__pyx_v_exprs = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_AddTraceback("questdb._client._polars_reinterpret_unsigned_geohash", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_schema);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_XDECREF(__pyx_v_unsigned);
__Pyx_XDECREF(__pyx_v_narrow);
__Pyx_XDECREF(__pyx_v_exprs);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06191: object df, object schema_overrides):
06192: """`_dataframe_reinterpret_unsigned_geohash` for a polars
06193: `DataFrame` or `LazyFrame`; a `LazyFrame` stays lazy.
06194:
06195: Each column keeps its bits. `reinterpret(signed=True)` does this
06196: without copying, but polars older than 1.39 accepts it only on 32-
06197: and 64-bit integers. On such a polars an 8- or 16-bit column takes
06198: a wrapping cast to the signed type of its width instead: the cast
06199: reduces each value modulo 2**width, which for the same width is
06200: the same bit pattern, and it copies the column. Nulls stay null
06201: either way.
06202: """
06203: cdef object schema, name, dtype
06204: cdef tuple unsigned = (
+06205: _POLARS.UInt8, _POLARS.UInt16, _POLARS.UInt32, _POLARS.UInt64)
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_UInt8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6205, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_UInt16); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6205, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_UInt32); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6205, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_UInt64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6205, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6205, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_1); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 6205, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2) != (0)) __PYX_ERR(0, 6205, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_3); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3) != (0)) __PYX_ERR(0, 6205, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_4); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4) != (0)) __PYX_ERR(0, 6205, __pyx_L1_error); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_v_unsigned = ((PyObject*)__pyx_t_5); __pyx_t_5 = 0;
+06206: cdef dict narrow = {_POLARS.UInt8: _POLARS.Int8,
__pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6206, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_UInt8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6206, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_Int8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6206, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_5, __pyx_t_4, __pyx_t_3) < (0)) __PYX_ERR(0, 6206, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06207: _POLARS.UInt16: _POLARS.Int16}
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_UInt16); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6207, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_Int16); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6207, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_t_5, __pyx_t_3, __pyx_t_4) < (0)) __PYX_ERR(0, 6206, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_narrow = ((PyObject*)__pyx_t_5); __pyx_t_5 = 0;
+06208: cdef list exprs = []
__pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6208, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_v_exprs = ((PyObject*)__pyx_t_5); __pyx_t_5 = 0;
+06209: schema = (df.collect_schema() if hasattr(df, 'collect_schema')
__pyx_t_6 = __Pyx_HasAttr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_collect_schema); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 6209, __pyx_L1_error) if (__pyx_t_6) { __pyx_t_3 = __pyx_v_df; __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_collect_schema, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6209, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_5 = __pyx_t_4; __pyx_t_4 = 0; } else {
+06210: else df.schema)
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6210, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __pyx_t_4; __pyx_t_4 = 0; } __pyx_v_schema = __pyx_t_5; __pyx_t_5 = 0;
+06211: for name, dtype in schema.items():
__pyx_t_8 = 0;
if (unlikely(__pyx_v_schema == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
__PYX_ERR(0, 6211, __pyx_L1_error)
}
__pyx_t_4 = __Pyx_dict_iterator(__pyx_v_schema, 0, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6211, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__pyx_t_5 = __pyx_t_4;
__pyx_t_4 = 0;
while (1) {
__pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_9, &__pyx_t_8, &__pyx_t_4, &__pyx_t_3, NULL, __pyx_t_10);
if (unlikely(__pyx_t_11 == 0)) break;
if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 6211, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_GOTREF(__pyx_t_3);
__Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_4);
__pyx_t_4 = 0;
__Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_3);
__pyx_t_3 = 0;
+06212: if (dtype in unsigned
__pyx_t_12 = (__Pyx_PySequence_ContainsTF(__pyx_v_dtype, __pyx_v_unsigned, Py_EQ)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 6212, __pyx_L1_error) if (__pyx_t_12) { } else { __pyx_t_6 = __pyx_t_12; goto __pyx_L6_bool_binop_done; } /* … */ if (__pyx_t_6) { /* … */ } } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06213: and _geohash_override_bits(schema_overrides, name)
__pyx_t_3 = __pyx_f_7questdb_7_client__geohash_override_bits(__pyx_v_schema_overrides, __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6213, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3);
+06214: is not None):
__pyx_t_12 = (__pyx_t_3 != Py_None);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_6 = __pyx_t_12;
__pyx_L6_bool_binop_done:;
+06215: if dtype in narrow and not _polars_reinterprets_narrow_ints():
__pyx_t_12 = (__Pyx_PyDict_ContainsTF(__pyx_v_dtype, __pyx_v_narrow, Py_EQ)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 6215, __pyx_L1_error) if (__pyx_t_12) { } else { __pyx_t_6 = __pyx_t_12; goto __pyx_L9_bool_binop_done; } __pyx_t_12 = __pyx_f_7questdb_7_client__polars_reinterprets_narrow_ints(); if (unlikely(__pyx_t_12 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6215, __pyx_L1_error) __pyx_t_13 = (!__pyx_t_12); __pyx_t_6 = __pyx_t_13; __pyx_L9_bool_binop_done:; if (__pyx_t_6) { /* … */ goto __pyx_L8; }
+06216: exprs.append(_POLARS.col(name).cast(
__pyx_t_1 = __pyx_v_7questdb_7_client__POLARS;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_name};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_col, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6216, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_4 = __pyx_t_2;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_15 = __Pyx_PyList_Append(__pyx_v_exprs, __pyx_t_3); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(0, 6216, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
{
PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_wrap_numerical};
__pyx_mstate_global->__pyx_tuple[29] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[29])) __PYX_ERR(0, 6216, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[29]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[29]);
+06217: narrow[dtype], wrap_numerical=True))
__pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_narrow, __pyx_v_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6217, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); /* … */ __pyx_t_7 = 0; { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_1, Py_True}; #if CYTHON_VECTORCALL __pyx_t_14 = __pyx_mstate_global->__pyx_tuple[29]; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 6216, __pyx_L1_error) __Pyx_INCREF(__pyx_t_14); #else { PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_wrap_numerical}; __pyx_t_14 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 6216, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); } #endif __pyx_t_3 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_cast, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_14); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6216, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); }
06218: else:
+06219: exprs.append(_POLARS.col(name).reinterpret(signed=True))
/*else*/ {
__pyx_t_1 = __pyx_v_7questdb_7_client__POLARS;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_name};
__pyx_t_14 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_col, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 6219, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_14);
}
__pyx_t_2 = __pyx_t_14;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, Py_True};
#if CYTHON_VECTORCALL
__pyx_t_1 = __pyx_mstate_global->__pyx_tuple[14];
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6219, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_1);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_signed};
__pyx_t_1 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6219, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
#endif
__pyx_t_3 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_reinterpret, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_1);
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6219, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__pyx_t_15 = __Pyx_PyList_Append(__pyx_v_exprs, __pyx_t_3); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(0, 6219, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
}
__pyx_L8:;
+06220: if not exprs:
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_exprs);
if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 6220, __pyx_L1_error)
__pyx_t_6 = (__pyx_temp != 0);
}
__pyx_t_13 = (!__pyx_t_6);
if (__pyx_t_13) {
/* … */
}
+06221: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06222: return df.with_columns(exprs)
__pyx_t_3 = __pyx_v_df; __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_exprs}; __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_with_columns, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6222, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_5; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_5 = 0; goto __pyx_L0;
06223:
06224:
+06225: cdef object _dataframe_normalize_claimed_arrow(object df):
static PyObject *__pyx_f_7questdb_7_client__dataframe_normalize_claimed_arrow(PyObject *__pyx_v_df) {
PyObject *__pyx_v_cols_meta = 0;
PyObject *__pyx_v_arrow_dtype = 0;
PyObject *__pyx_v_types = 0;
PyObject *__pyx_v_dtype = 0;
PyObject *__pyx_v_raw_ty = 0;
PyObject *__pyx_v_ty = 0;
PyObject *__pyx_v_meta = 0;
PyObject *__pyx_v_out = 0;
PyObject *__pyx_v_target_dtype = 0;
PyObject *__pyx_v_kind = 0;
PyObject *__pyx_v_convert = 0;
PyObject *__pyx_v_pos = NULL;
PyObject *__pyx_v_name = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_AddTraceback("questdb._client._dataframe_normalize_claimed_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_cols_meta);
__Pyx_XDECREF(__pyx_v_arrow_dtype);
__Pyx_XDECREF(__pyx_v_types);
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_XDECREF(__pyx_v_raw_ty);
__Pyx_XDECREF(__pyx_v_ty);
__Pyx_XDECREF(__pyx_v_meta);
__Pyx_XDECREF(__pyx_v_out);
__Pyx_XDECREF(__pyx_v_target_dtype);
__Pyx_XDECREF(__pyx_v_kind);
__Pyx_XDECREF(__pyx_v_convert);
__Pyx_XDECREF(__pyx_v_pos);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06226: """NumPy-dtype or object-dtype copies of the Arrow-backed columns
06227: whose round-trip claim the manual planner cannot honour in the
06228: shape they arrive in.
06229:
06230: A frame mixing Arrow-backed and NumPy columns routes whole to this
06231: planner, where an integer claim rides on the NumPy dtype named in
06232: the append call. Columns handed to the native Arrow importer have
06233: nowhere to put it, so their claim would be dropped and the column
06234: would land as its storage type — CHAR and GEOHASH as plain
06235: integers — auto-creating the destination table with the wrong
06236: column types. A UUID or LONG256 claim on a bare fixed-size binary
06237: column is read by the classifier instead, whose route sends the
06238: column's own buffer, and the planner refuses that route for a column
06239: in any layout but one zero-offset array.
06240:
06241: An integer claim copies to the NumPy width that carries it, which
06242: stays a raw buffer the whole way to the wire. An integer column
06243: holding a null copies to object dtype instead: that is the shape
06244: `_dataframe_apply_roundtrip_overrides` covers for every claimed
06245: kind, and what `dtype_backend='numpy_nullable'` hands these columns
06246: back as, so both backends write the same bytes again.
06247:
06248: UUID on a bare 16-byte column and LONG256 on a 32-byte one need no
06249: copy. The Arrow value buffer of such a column is already a packed
06250: run of 16- or 32-byte values, the layout `qwp_numpy_s16` and
06251: `qwp_numpy_s32` read, and its validity bitmap is the one the append
06252: call takes, nulls included. The classifier makes such a column
06253: `col_source_fsb_claimed_arrow`, and the append sends the buffer as
06254: it stands.
06255:
06256: TRADE-OFF, kept on purpose: that route needs the column to be one
06257: Arrow array starting at offset zero
06258: (`_arrow_col_is_one_zero_offset_buffer`). A column in several
06259: chunks -- a query result read in more than one batch, a
06260: `pd.concat` -- or one sliced away from its start (`df.iloc[n:]`
06261: with n > 0) copies to object dtype. That copy boxes one
06262: `bytes` per cell, roughly 4-5x the per-cell cost and about 73 MB
06263: of Python objects per million 32-byte cells, but it writes the
06264: column where the alternative is a refusal. This planner refuses an
06265: Arrow-backed column of any other type in several chunks, and one
06266: sliced away from its start too unless it goes to the native Arrow
06267: importer (variable-length binary, lists, millisecond timestamps):
06268: integer, float, boolean and string columns get "v1 requires one
06269: contiguous zero-offset buffer". So the fallback runs only on frames
06270: whose other Arrow-backed columns are all in one array, or are
06271: sliced and of those importer-bound types. Gathering the chunks into
06272: one fresh Arrow buffer would make the copy a memcpy, but it would be
06273: a third route for two kinds on layouts most kinds refuse, so the
06274: fallback stays on the object route the `numpy_nullable` backend
06275: already takes for the same columns.
06276:
06277: Only a frame that already fell back from the zero-copy Arrow path
06278: reaches here, and within it only the claimed columns that have no
06279: buffer-shaped route are copied, so the shapes that can carry their
06280: claim natively stay zero-copy.
06281: """
06282: cdef object cols_meta, arrow_dtype, types, dtype, raw_ty, ty, meta, out
06283: cdef object target_dtype
06284: cdef str kind
06285: cdef list convert
+06286: if not _is_pandas_dataframe_object(df):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6286, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+06287: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06288: cols_meta = _roundtrip_columns_meta(df)
__pyx_t_3 = __pyx_f_7questdb_7_client__roundtrip_columns_meta(__pyx_v_df); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6288, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_cols_meta = __pyx_t_3; __pyx_t_3 = 0;
+06289: if not cols_meta:
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_cols_meta); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6289, __pyx_L1_error) __pyx_t_1 = (!__pyx_t_2); if (__pyx_t_1) { /* … */ }
+06290: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06291: _dataframe_may_import_deps()
__pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6291, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06292: arrow_dtype = getattr(_PANDAS, 'ArrowDtype', None)
__pyx_t_3 = __pyx_v_7questdb_7_client__PANDAS; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetAttr3(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ArrowDtype, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6292, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_arrow_dtype = __pyx_t_4; __pyx_t_4 = 0;
+06293: if arrow_dtype is None:
__pyx_t_1 = (__pyx_v_arrow_dtype == Py_None);
if (__pyx_t_1) {
/* … */
}
+06294: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06295: if not _dataframe_try_import_pyarrow():
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_try_import_pyarrow(); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6295, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+06296: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06297: types = _PYARROW.types
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6297, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_types = __pyx_t_4; __pyx_t_4 = 0;
+06298: convert = []
__pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6298, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_convert = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0;
06299: # Walked by position rather than by label: `dtypes[name]` on a frame
06300: # with duplicate column names hands back a Series, not a dtype.
+06301: for pos, (name, dtype) in enumerate(zip(df.columns, df.dtypes)):
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_0); __pyx_t_4 = __pyx_mstate_global->__pyx_int_0; __pyx_t_5 = NULL; __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6301, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6301, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = 1; { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_t_7}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_zip, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6301, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) { __pyx_t_7 = __pyx_t_3; __Pyx_INCREF(__pyx_t_7); __pyx_t_9 = 0; __pyx_t_10 = NULL; } else { __pyx_t_9 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6301, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_10 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_7); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6301, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; for (;;) { if (likely(!__pyx_t_10)) { if (likely(PyList_CheckExact(__pyx_t_7))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_7); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6301, __pyx_L1_error) #endif if (__pyx_t_9 >= __pyx_temp) break; } __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_7, __pyx_t_9, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_9; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_7); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6301, __pyx_L1_error) #endif if (__pyx_t_9 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_9)); #else __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_7, __pyx_t_9); #endif ++__pyx_t_9; } if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6301, __pyx_L1_error) } else { __pyx_t_3 = __pyx_t_10(__pyx_t_7); if (unlikely(!__pyx_t_3)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 6301, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_3); if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 6301, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_6); __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_5); } else { __pyx_t_6 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6301, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6301, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_5); } #else __pyx_t_6 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6301, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6301, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6301, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_12 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_11); index = 0; __pyx_t_6 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_6)) goto __pyx_L9_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); index = 1; __pyx_t_5 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_5)) goto __pyx_L9_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < (0)) __PYX_ERR(0, 6301, __pyx_L1_error) __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L10_unpacking_done; __pyx_L9_unpacking_failed:; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 6301, __pyx_L1_error) __pyx_L10_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_5); __pyx_t_5 = 0; __Pyx_INCREF(__pyx_t_4); __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_4); __pyx_t_3 = __Pyx_PyLong_AddObjC(__pyx_t_4, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6301, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = __pyx_t_3; __pyx_t_3 = 0; /* … */ __pyx_L7_continue:; } __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06302: if not isinstance(dtype, arrow_dtype):
__pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_arrow_dtype); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 6302, __pyx_L1_error) __pyx_t_1 = (!__pyx_t_2); if (__pyx_t_1) { /* … */ }
+06303: continue
goto __pyx_L7_continue;
+06304: meta = cols_meta.get(name)
__pyx_t_5 = __pyx_v_cols_meta;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_name};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6304, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_XDECREF_SET(__pyx_v_meta, __pyx_t_3);
__pyx_t_3 = 0;
+06305: kind = _roundtrip_kind(meta)
__pyx_t_3 = __pyx_f_7questdb_7_client__roundtrip_kind(__pyx_v_meta); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6305, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_kind, ((PyObject*)__pyx_t_3)); __pyx_t_3 = 0;
+06306: if kind is None or kind not in _ATTRS_OVERRIDE_KINDS:
__pyx_t_2 = (__pyx_v_kind == ((PyObject*)Py_None));
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L13_bool_binop_done;
}
if (unlikely(__pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
__PYX_ERR(0, 6306, __pyx_L1_error)
}
__pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_v_kind, __pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6306, __pyx_L1_error)
__pyx_t_1 = __pyx_t_2;
__pyx_L13_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+06307: continue
goto __pyx_L7_continue;
+06308: raw_ty = dtype.pyarrow_dtype
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_pyarrow_dtype); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6308, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_raw_ty, __pyx_t_3); __pyx_t_3 = 0;
+06309: ty = raw_ty
__Pyx_INCREF(__pyx_v_raw_ty); __Pyx_XDECREF_SET(__pyx_v_ty, __pyx_v_raw_ty);
+06310: if isinstance(ty, _PYARROW.lib.BaseExtensionType):
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6310, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_BaseExtensionType); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6310, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_1 = PyObject_IsInstance(__pyx_v_ty, __pyx_t_5); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 6310, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_1) { /* … */ }
+06311: ty = ty.storage_type
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_ty, __pyx_mstate_global->__pyx_n_u_storage_type); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6311, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF_SET(__pyx_v_ty, __pyx_t_5); __pyx_t_5 = 0;
06312: # A claim that no longer fits the column is dropped rather than
06313: # reshaped: refusing value by value later would answer a retyped
06314: # column with an error where the contract promises the write
06315: # goes ahead. It says which claim it dropped on the way past,
06316: # because a type that can never carry the kind is a mistake
06317: # rather than drift, and the two look the same from here.
+06318: if not _attrs_override_fits(
__pyx_t_1 = __pyx_f_7questdb_7_client__attrs_override_fits(__pyx_v_types, __pyx_v_ty, __pyx_v_kind, __pyx_t_5); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 6318, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+06319: types, ty, kind, meta.get('precision_bits') or 0):
__pyx_t_6 = __pyx_v_meta;
__Pyx_INCREF(__pyx_t_6);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_n_u_precision_bits};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6319, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6319, __pyx_L1_error)
if (!__pyx_t_1) {
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
} else {
__Pyx_INCREF(__pyx_t_3);
__pyx_t_5 = __pyx_t_3;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L17_bool_binop_done;
}
__pyx_t_3 = __Pyx_PyLong_From_long(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6319, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_5 = __pyx_t_3;
__pyx_t_3 = 0;
__pyx_L17_bool_binop_done:;
+06320: _log_roundtrip_claim_dropped(name, kind, dtype)
__pyx_t_5 = __pyx_f_7questdb_7_client__log_roundtrip_claim_dropped(__pyx_v_name, __pyx_v_kind, __pyx_v_dtype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6320, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06321: continue
goto __pyx_L7_continue;
+06322: target_dtype = _claimed_arrow_col_reshape_dtype(
__pyx_t_3 = __pyx_f_7questdb_7_client__claimed_arrow_col_reshape_dtype(__pyx_v_types, __pyx_v_raw_ty, __pyx_v_ty, __pyx_v_kind, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6322, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF_SET(__pyx_v_target_dtype, __pyx_t_3); __pyx_t_3 = 0;
+06323: types, raw_ty, ty, kind, df.iloc[:, pos])
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6323, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6323, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 6323, __pyx_L1_error); __Pyx_INCREF(__pyx_v_pos); __Pyx_GIVEREF(__pyx_v_pos); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_pos) != (0)) __PYX_ERR(0, 6323, __pyx_L1_error); __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6323, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06324: if target_dtype is None:
__pyx_t_2 = (__pyx_v_target_dtype == Py_None);
if (__pyx_t_2) {
/* … */
}
+06325: continue
goto __pyx_L7_continue;
+06326: if target_dtype is not object and df.iloc[:, pos].isna().any():
__pyx_t_1 = (__pyx_v_target_dtype != __pyx_builtin_object);
if (__pyx_t_1) {
} else {
__pyx_t_2 = __pyx_t_1;
goto __pyx_L21_bool_binop_done;
}
__pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6326, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_13);
__pyx_t_14 = PyTuple_New(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 6326, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_14);
__Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]);
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 6326, __pyx_L1_error);
__Pyx_INCREF(__pyx_v_pos);
__Pyx_GIVEREF(__pyx_v_pos);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_v_pos) != (0)) __PYX_ERR(0, 6326, __pyx_L1_error);
__pyx_t_15 = __Pyx_PyObject_GetItem(__pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6326, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_15);
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
__pyx_t_11 = __pyx_t_15;
__Pyx_INCREF(__pyx_t_11);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_11, NULL};
__pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_isna, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6326, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
__pyx_t_6 = __pyx_t_5;
__Pyx_INCREF(__pyx_t_6);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_any, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6326, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6326, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_2 = __pyx_t_1;
__pyx_L21_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
06327: # A NumPy integer dtype has no null to copy a null into.
+06328: target_dtype = object
__Pyx_INCREF(__pyx_builtin_object); __Pyx_DECREF_SET(__pyx_v_target_dtype, __pyx_builtin_object);
+06329: convert.append((pos, target_dtype))
__pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6329, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_pos); __Pyx_GIVEREF(__pyx_v_pos); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_pos) != (0)) __PYX_ERR(0, 6329, __pyx_L1_error); __Pyx_INCREF(__pyx_v_target_dtype); __Pyx_GIVEREF(__pyx_v_target_dtype); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_target_dtype) != (0)) __PYX_ERR(0, 6329, __pyx_L1_error); __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_convert, __pyx_t_3); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 6329, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06330: if not convert:
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_convert);
if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 6330, __pyx_L1_error)
__pyx_t_2 = (__pyx_temp != 0);
}
__pyx_t_1 = (!__pyx_t_2);
if (__pyx_t_1) {
/* … */
}
+06331: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06332: out = df.copy(deep=False)
__pyx_t_7 = __pyx_v_df; __Pyx_INCREF(__pyx_t_7); __pyx_t_8 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_7, Py_False}; #if CYTHON_VECTORCALL __pyx_t_3 = __pyx_mstate_global->__pyx_tuple[2]; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6332, __pyx_L1_error) __Pyx_INCREF(__pyx_t_3); #else { PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_deep}; __pyx_t_3 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6332, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } #endif __pyx_t_4 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_copy, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6332, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_v_out = __pyx_t_4; __pyx_t_4 = 0;
+06333: for pos, target_dtype in convert:
__pyx_t_4 = __pyx_v_convert; __Pyx_INCREF(__pyx_t_4); __pyx_t_9 = 0; for (;;) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6333, __pyx_L1_error) #endif if (__pyx_t_9 >= __pyx_temp) break; } __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_4, __pyx_t_9, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_9; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6333, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 6333, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_7); __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_5); } else { __pyx_t_7 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6333, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_7); __pyx_t_5 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6333, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_5); } #else __pyx_t_7 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6333, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6333, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6333, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_12 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6); index = 0; __pyx_t_7 = __pyx_t_12(__pyx_t_6); if (unlikely(!__pyx_t_7)) goto __pyx_L27_unpacking_failed; __Pyx_GOTREF(__pyx_t_7); index = 1; __pyx_t_5 = __pyx_t_12(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L27_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_6), 2) < (0)) __PYX_ERR(0, 6333, __pyx_L1_error) __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L28_unpacking_done; __pyx_L27_unpacking_failed:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 6333, __pyx_L1_error) __pyx_L28_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF_SET(__pyx_v_target_dtype, __pyx_t_5); __pyx_t_5 = 0; /* … */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06334: _dataframe_set_column(
__pyx_t_17 = __pyx_f_7questdb_7_client__dataframe_set_column(__pyx_v_out, __pyx_v_df, __pyx_v_pos, __pyx_t_3); if (unlikely(__pyx_t_17 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6334, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06335: out, df, pos, df.iloc[:, pos].astype(target_dtype))
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 6335, __pyx_L1_error); __Pyx_INCREF(__pyx_v_pos); __Pyx_GIVEREF(__pyx_v_pos); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_pos) != (0)) __PYX_ERR(0, 6335, __pyx_L1_error); __pyx_t_15 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_5 = __pyx_t_15; __Pyx_INCREF(__pyx_t_5); __pyx_t_8 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_target_dtype}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); }
+06336: out.attrs = dict(df.attrs)
__pyx_t_3 = NULL; __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_attrs); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6336, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __pyx_t_8 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_15}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(&PyDict_Type), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6336, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } if (__Pyx_PyObject_SetAttrStr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_attrs, __pyx_t_4) < (0)) __PYX_ERR(0, 6336, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06337: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
06338:
06339:
+06340: cdef object _dataframe_normalize_claimed_date(object df):
static PyObject *__pyx_f_7questdb_7_client__dataframe_normalize_claimed_date(PyObject *__pyx_v_df) {
PyObject *__pyx_v_cols_meta = 0;
PyObject *__pyx_v_arrow_dtype = 0;
PyObject *__pyx_v_dtype = 0;
PyObject *__pyx_v_meta = 0;
PyObject *__pyx_v_out = 0;
PyObject *__pyx_v_unit = 0;
PyObject *__pyx_v_tz = 0;
PyObject *__pyx_v_kind = 0;
PyObject *__pyx_v_convert = 0;
PyObject *__pyx_v_pos = NULL;
PyObject *__pyx_v_name = NULL;
PyObject *__pyx_v_target_dtype = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_AddTraceback("questdb._client._dataframe_normalize_claimed_date", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_cols_meta);
__Pyx_XDECREF(__pyx_v_arrow_dtype);
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_XDECREF(__pyx_v_meta);
__Pyx_XDECREF(__pyx_v_out);
__Pyx_XDECREF(__pyx_v_unit);
__Pyx_XDECREF(__pyx_v_tz);
__Pyx_XDECREF(__pyx_v_kind);
__Pyx_XDECREF(__pyx_v_convert);
__Pyx_XDECREF(__pyx_v_pos);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_XDECREF(__pyx_v_target_dtype);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06341: """Arrow-backed copies of the millisecond datetime columns claimed
06342: as DATE.
06343:
06344: A DATE column is claimed by the column's own Arrow type, and the
06345: NumPy planner has no DATE target of any kind: it reaches DATE only
06346: through `col_target_column_arrow`, which needs the column to carry
06347: a `pa.timestamp('ms')`. Plain `to_pandas()` hands a DATE column back
06348: as a NumPy `datetime64[ms]`, which the planner widens to a
06349: microsecond TIMESTAMP -- so reading a table and writing the frame
06350: straight back created the destination table with a TIMESTAMP column
06351: where the source had DATE, and said nothing.
06352:
06353: The claim carries the missing half. `'date'` is not in
06354: `_ATTRS_OVERRIDE_KINDS` because there is no Arrow override to
06355: restore DATE with; what restores it is the column's type, so the
06356: claim reshapes the column and the type does the rest. Both Arrow
06357: backends already hand the column back as `pa.timestamp('ms')`, so
06358: this is what makes the three backends write the same column type.
06359:
06360: A tz-aware millisecond column is reshaped the same way. On its own
06361: the planner refuses that dtype outright, so a claimed one turns a
06362: hard rejection into the type the claim names.
06363:
06364: pyarrow is what carries a column to DATE, and without it the frame
06365: has no route there to be put back on -- the same early return the
06366: rest of the claim machinery takes.
06367: """
06368: cdef object cols_meta, arrow_dtype, dtype, meta, out, unit, tz
06369: cdef str kind
06370: cdef list convert
+06371: if not _is_pandas_dataframe_object(df):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6371, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+06372: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06373: cols_meta = _roundtrip_columns_meta(df)
__pyx_t_3 = __pyx_f_7questdb_7_client__roundtrip_columns_meta(__pyx_v_df); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_cols_meta = __pyx_t_3; __pyx_t_3 = 0;
+06374: if not cols_meta:
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_cols_meta); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6374, __pyx_L1_error) __pyx_t_1 = (!__pyx_t_2); if (__pyx_t_1) { /* … */ }
+06375: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06376: _dataframe_may_import_deps()
__pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06377: arrow_dtype = getattr(_PANDAS, 'ArrowDtype', None)
__pyx_t_3 = __pyx_v_7questdb_7_client__PANDAS; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetAttr3(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ArrowDtype, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6377, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_arrow_dtype = __pyx_t_4; __pyx_t_4 = 0;
+06378: if arrow_dtype is None:
__pyx_t_1 = (__pyx_v_arrow_dtype == Py_None);
if (__pyx_t_1) {
/* … */
}
+06379: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06380: if not _dataframe_try_import_pyarrow():
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_try_import_pyarrow(); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6380, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+06381: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06382: convert = []
__pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6382, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_convert = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0;
06383: # Walked by position rather than by label: `dtypes[name]` on a frame
06384: # with duplicate column names hands back a Series, not a dtype.
+06385: for pos, (name, dtype) in enumerate(zip(df.columns, df.dtypes)):
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_0); __pyx_t_4 = __pyx_mstate_global->__pyx_int_0; __pyx_t_5 = NULL; __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6385, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6385, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = 1; { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_t_7}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_zip, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6385, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) { __pyx_t_7 = __pyx_t_3; __Pyx_INCREF(__pyx_t_7); __pyx_t_9 = 0; __pyx_t_10 = NULL; } else { __pyx_t_9 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6385, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_10 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_7); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6385, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; for (;;) { if (likely(!__pyx_t_10)) { if (likely(PyList_CheckExact(__pyx_t_7))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_7); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6385, __pyx_L1_error) #endif if (__pyx_t_9 >= __pyx_temp) break; } __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_7, __pyx_t_9, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_9; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_7); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6385, __pyx_L1_error) #endif if (__pyx_t_9 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_9)); #else __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_7, __pyx_t_9); #endif ++__pyx_t_9; } if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6385, __pyx_L1_error) } else { __pyx_t_3 = __pyx_t_10(__pyx_t_7); if (unlikely(!__pyx_t_3)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 6385, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_3); if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 6385, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_6); __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_5); } else { __pyx_t_6 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6385, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6385, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_5); } #else __pyx_t_6 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6385, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6385, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6385, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_12 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_11); index = 0; __pyx_t_6 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_6)) goto __pyx_L9_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); index = 1; __pyx_t_5 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_5)) goto __pyx_L9_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < (0)) __PYX_ERR(0, 6385, __pyx_L1_error) __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L10_unpacking_done; __pyx_L9_unpacking_failed:; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 6385, __pyx_L1_error) __pyx_L10_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_5); __pyx_t_5 = 0; __Pyx_INCREF(__pyx_t_4); __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_4); __pyx_t_3 = __Pyx_PyLong_AddObjC(__pyx_t_4, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6385, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = __pyx_t_3; __pyx_t_3 = 0; /* … */ __pyx_L7_continue:; } __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06386: meta = cols_meta.get(name)
__pyx_t_5 = __pyx_v_cols_meta;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_name};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6386, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_XDECREF_SET(__pyx_v_meta, __pyx_t_3);
__pyx_t_3 = 0;
+06387: kind = _roundtrip_kind(meta)
__pyx_t_3 = __pyx_f_7questdb_7_client__roundtrip_kind(__pyx_v_meta); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6387, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_kind, ((PyObject*)__pyx_t_3)); __pyx_t_3 = 0;
+06388: if kind != 'date':
__pyx_t_2 = __Pyx_PyObject_CompareBoolNe_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_date, Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6388, __pyx_L1_error) if (__pyx_t_2) { /* … */ }
+06389: continue
goto __pyx_L7_continue;
06390: # An Arrow-backed column already states the type itself.
+06391: if isinstance(dtype, arrow_dtype):
__pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_arrow_dtype); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 6391, __pyx_L1_error) if (__pyx_t_2) { /* … */ }
+06392: continue
goto __pyx_L7_continue;
+06393: if getattr(dtype, 'kind', None) != 'M':
__pyx_t_3 = __Pyx_GetAttr3(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_kind, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6393, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = (__Pyx_PyObject_Equals_obj_ch77(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_M, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6393, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_2) { /* … */ }
+06394: continue
goto __pyx_L7_continue;
+06395: tz = getattr(dtype, 'tz', None)
__pyx_t_3 = __Pyx_GetAttr3(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_tz, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6395, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_tz, __pyx_t_3); __pyx_t_3 = 0;
+06396: unit = getattr(dtype, 'unit', None)
__pyx_t_3 = __Pyx_GetAttr3(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_unit, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6396, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_unit, __pyx_t_3); __pyx_t_3 = 0;
+06397: if unit is None:
__pyx_t_2 = (__pyx_v_unit == Py_None);
if (__pyx_t_2) {
/* … */
}
+06398: unit = numpy.datetime_data(dtype)[0]
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_numpy); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6398, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_datetime_data); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6398, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_t_8 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_11))) {
__pyx_t_5 = PyMethod_GET_SELF(__pyx_t_11);
assert(__pyx_t_5);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
__Pyx_INCREF(__pyx_t_5);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
__pyx_t_8 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_dtype};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6398, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__pyx_t_11 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6398, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF_SET(__pyx_v_unit, __pyx_t_11);
__pyx_t_11 = 0;
06399: # Only a millisecond column holds what a DATE column held. A
06400: # column retyped to another unit since it was read is drift, and
06401: # drift is written as the column's own type implies.
+06402: if unit != 'ms':
__pyx_t_2 = __Pyx_PyObject_CompareBoolNe_object_str(__pyx_v_unit, __pyx_mstate_global->__pyx_n_u_ms, Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6402, __pyx_L1_error) if (__pyx_t_2) { /* … */ }
+06403: continue
goto __pyx_L7_continue;
+06404: convert.append((
__pyx_t_16 = __Pyx_PyList_Append(__pyx_v_convert, __pyx_t_5); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 6404, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06405: pos,
__pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6405, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_pos); __Pyx_GIVEREF(__pyx_v_pos); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_pos) != (0)) __PYX_ERR(0, 6405, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_11); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_11) != (0)) __PYX_ERR(0, 6405, __pyx_L1_error); __pyx_t_11 = 0;
+06406: arrow_dtype(
__pyx_t_3 = NULL;
__Pyx_INCREF(__pyx_v_arrow_dtype);
__pyx_t_5 = __pyx_v_arrow_dtype;
+06407: _PYARROW.timestamp('ms')
__pyx_t_14 = __pyx_v_7questdb_7_client__PYARROW;
__Pyx_INCREF(__pyx_t_14);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_14, __pyx_mstate_global->__pyx_n_u_ms};
__pyx_t_13 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_timestamp, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6407, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_13);
}
__pyx_t_6 = __pyx_t_13;
__pyx_t_13 = 0;
} else {
+06408: if tz is None
__pyx_t_2 = (__pyx_v_tz == Py_None);
if (__pyx_t_2) {
+06409: else _PYARROW.timestamp('ms', str(tz)))))
__pyx_t_14 = __pyx_v_7questdb_7_client__PYARROW;
__Pyx_INCREF(__pyx_t_14);
__pyx_t_15 = __Pyx_PyObject_Unicode(__pyx_v_tz); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6409, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_15);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_14, __pyx_mstate_global->__pyx_n_u_ms, __pyx_t_15};
__pyx_t_13 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_timestamp, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6409, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_13);
}
__pyx_t_6 = __pyx_t_13;
__pyx_t_13 = 0;
}
__pyx_t_8 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_5))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
__pyx_t_8 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_6};
__pyx_t_11 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6406, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
}
+06410: if not convert:
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_convert);
if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 6410, __pyx_L1_error)
__pyx_t_2 = (__pyx_temp != 0);
}
__pyx_t_1 = (!__pyx_t_2);
if (__pyx_t_1) {
/* … */
}
+06411: return df
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_df);
__pyx_r = __pyx_v_df;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+06412: out = df.copy(deep=False)
__pyx_t_7 = __pyx_v_df; __Pyx_INCREF(__pyx_t_7); __pyx_t_8 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_7, Py_False}; #if CYTHON_VECTORCALL __pyx_t_5 = __pyx_mstate_global->__pyx_tuple[2]; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6412, __pyx_L1_error) __Pyx_INCREF(__pyx_t_5); #else { PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_deep}; __pyx_t_5 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6412, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } #endif __pyx_t_4 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_copy, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_5); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6412, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_v_out = __pyx_t_4; __pyx_t_4 = 0;
+06413: for pos, target_dtype in convert:
__pyx_t_4 = __pyx_v_convert; __Pyx_INCREF(__pyx_t_4); __pyx_t_9 = 0; for (;;) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6413, __pyx_L1_error) #endif if (__pyx_t_9 >= __pyx_temp) break; } __pyx_t_5 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_4, __pyx_t_9, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_9; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6413, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) { PyObject* sequence = __pyx_t_5; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 6413, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_7); __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_11); } else { __pyx_t_7 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6413, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_7); __pyx_t_11 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6413, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_11); } #else __pyx_t_7 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6413, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_11 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6413, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); #endif __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } else { Py_ssize_t index = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6413, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_12 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6); index = 0; __pyx_t_7 = __pyx_t_12(__pyx_t_6); if (unlikely(!__pyx_t_7)) goto __pyx_L20_unpacking_failed; __Pyx_GOTREF(__pyx_t_7); index = 1; __pyx_t_11 = __pyx_t_12(__pyx_t_6); if (unlikely(!__pyx_t_11)) goto __pyx_L20_unpacking_failed; __Pyx_GOTREF(__pyx_t_11); if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_6), 2) < (0)) __PYX_ERR(0, 6413, __pyx_L1_error) __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L21_unpacking_done; __pyx_L20_unpacking_failed:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 6413, __pyx_L1_error) __pyx_L21_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF_SET(__pyx_v_target_dtype, __pyx_t_11); __pyx_t_11 = 0; /* … */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06414: _dataframe_set_column(
__pyx_t_17 = __pyx_f_7questdb_7_client__dataframe_set_column(__pyx_v_out, __pyx_v_df, __pyx_v_pos, __pyx_t_5); if (unlikely(__pyx_t_17 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6414, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06415: out, df, pos, df.iloc[:, pos].astype(target_dtype))
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6415, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6415, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 6415, __pyx_L1_error); __Pyx_INCREF(__pyx_v_pos); __Pyx_GIVEREF(__pyx_v_pos); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_pos) != (0)) __PYX_ERR(0, 6415, __pyx_L1_error); __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6415, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_11 = __pyx_t_3; __Pyx_INCREF(__pyx_t_11); __pyx_t_8 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_v_target_dtype}; __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6415, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); }
+06416: out.attrs = dict(df.attrs)
__pyx_t_5 = NULL; __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_attrs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6416, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_8 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(&PyDict_Type), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6416, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } if (__Pyx_PyObject_SetAttrStr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_attrs, __pyx_t_4) < (0)) __PYX_ERR(0, 6416, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06417: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
06418:
06419:
+06420: cdef void_int _dataframe_claim_all_null_source(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_claim_all_null_source(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, PyObject *__pyx_v_kind, PyObject *__pyx_v_bits) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._dataframe_claim_all_null_source", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06421: col_t* col, str kind, object bits) except -1:
06422: """Give an all-null claimed column the object-column shape its
06423: claim names.
06424:
06425: Every cell being null leaves the planner nothing to sniff a type
06426: from, so such a column is skipped and never reaches the wire. A
06427: round-trip claim states the type anyway, and a destination table
06428: auto-created without the column is the outcome the claim exists to
06429: prevent -- so the claim picks the source, and the object-column
06430: builder writes a column of nulls in the claimed width. This is the
06431: same source the shape would have taken with one non-null cell in
06432: it, and what the Arrow path emits for the same frame.
06433:
06434: A claim the column cannot carry -- a geohash precision outside
06435: 1..=60 -- leaves the column skipped, and the tail of
06436: `_dataframe_apply_roundtrip_overrides` says so, as it does for any
06437: claim no source took.
06438: """
+06439: if kind == 'uuid':
__pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_uuid, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6439, __pyx_L1_error) if (__pyx_t_1) { /* … */ goto __pyx_L3; }
+06440: col.setup.source = col_source_t.col_source_bytes_pyobj
__pyx_v_col->setup->source = __pyx_e_7questdb_7_client_col_source_bytes_pyobj;
+06441: col.setup.target = col_target_t.col_target_column_binary
__pyx_v_col->setup->target = __pyx_e_7questdb_7_client_col_target_column_binary;
+06442: elif kind in ('ipv4', 'char', 'long256', 'geohash'):
__Pyx_INCREF(__pyx_v_kind); __pyx_t_2 = __pyx_v_kind; __pyx_t_3 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ipv4, Py_EQ); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6442, __pyx_L1_error) if (!__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L4_bool_binop_done; } __pyx_t_3 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_char_2, Py_EQ); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6442, __pyx_L1_error) if (!__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L4_bool_binop_done; } __pyx_t_3 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_long256, Py_EQ); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6442, __pyx_L1_error) if (!__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L4_bool_binop_done; } __pyx_t_3 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6442, __pyx_L1_error) __pyx_t_1 = __pyx_t_3; __pyx_L4_bool_binop_done:; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __pyx_t_1; if (__pyx_t_3) { /* … */ goto __pyx_L3; }
+06443: if kind == 'geohash' and not (
__pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6443, __pyx_L1_error) if (__pyx_t_1) { } else { __pyx_t_3 = __pyx_t_1; goto __pyx_L9_bool_binop_done; } /* … */ __pyx_t_4 = (!__pyx_t_1); __pyx_t_3 = __pyx_t_4; __pyx_L9_bool_binop_done:; if (__pyx_t_3) { /* … */ }
+06444: _is_integral_not_bool(bits) and 1 <= int(bits) <= 60):
__pyx_t_4 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_bits); if (unlikely(__pyx_t_4 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6444, __pyx_L1_error) if (__pyx_t_4) { } else { __pyx_t_1 = __pyx_t_4; goto __pyx_L11_bool_binop_done; } __pyx_t_5 = __Pyx_PyNumber_Int(__pyx_v_bits); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6444, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = __Pyx_PyObject_CompareBoolLe_int_int(__pyx_mstate_global->__pyx_int_1, __pyx_t_5, Py_LE); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 6444, __pyx_L1_error) if (__pyx_t_4) { __pyx_t_4 = __Pyx_PyObject_CompareBoolLe_int_int(__pyx_t_5, __pyx_mstate_global->__pyx_int_60, Py_LE); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 6444, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_1 = __pyx_t_4; __pyx_L11_bool_binop_done:;
+06445: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+06446: col.setup.source = col_source_t.col_source_int_pyobj
__pyx_v_col->setup->source = __pyx_e_7questdb_7_client_col_source_int_pyobj;
+06447: col.setup.target = col_target_t.col_target_column_i64
__pyx_v_col->setup->target = __pyx_e_7questdb_7_client_col_target_column_i64;
06448: else:
+06449: return 0
/*else*/ {
{
__pyx_r = 0;
}
goto __pyx_L0;
}
__pyx_L3:;
+06450: col.dispatch_code = <col_dispatch_code_t>(
__pyx_v_col->dispatch_code = ((enum __pyx_t_7questdb_7_client_col_dispatch_code_t)(((int)__pyx_v_col->setup->source) + ((int)__pyx_v_col->setup->target)));
06451: <int>col.setup.source + <int>col.setup.target)
+06452: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
06453:
06454:
+06455: cdef _log_roundtrip_claim_dropped(object name, str kind, object shape):
static PyObject *__pyx_f_7questdb_7_client__log_roundtrip_claim_dropped(PyObject *__pyx_v_name, PyObject *__pyx_v_kind, PyObject *__pyx_v_shape) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_AddTraceback("questdb._client._log_roundtrip_claim_dropped", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06456: """Say that a column's ``df.attrs['questdb']`` claim was not applied.
06457:
06458: A claim that no longer matches its column is not an error. The frame
06459: may have been retyped since it was read, and the write goes ahead as
06460: the column's own type implies -- rejecting it would answer ordinary
06461: schema drift with a failure.
06462:
06463: A claim quietly doing nothing is also how a column reaches the
06464: database as the wrong type, though, and the two are indistinguishable
06465: from the outside. Drift is the case the silence is for; a type that
06466: can never carry the kind -- a float under ``geohash``, say, or a
06467: 16-bit integer claimed at 20 bits -- is a mistake the caller wants
06468: to hear about. Naming the claim and the type
06469: that turned it away tells them apart without failing either.
06470:
06471: This leniency covers ``df.attrs`` claims alone. The same claim in
06472: Arrow field metadata (``questdb.column_type``) is refused when the
06473: field's type cannot carry it, deliberately; `_capsule_consume_stream`
06474: says why the two routes differ.
06475: """
06476: # A stale claim does not invalidate the frame. Unlike the naive-datetime
06477: # and reconnect warnings, it is not a migration/performance pattern the
06478: # caller should be able to promote to an error with `-W error`.
+06479: logging.getLogger('questdb').warning(
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6479, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6479, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_n_u_questdb}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6479, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_t_2 = __pyx_t_3; __Pyx_INCREF(__pyx_t_2);
06480: 'questdb: column %r carries a df.attrs[\'questdb\'] claim of '
06481: 'kind %r, which a column of type %s cannot carry. The claim is '
06482: 'ignored, and the column goes out as its own type decides -- '
06483: 'which for some shapes means it is left out of the write, or '
06484: 'refused by it. Cast the column to a type the kind fits, state '
06485: 'the type outright with schema_overrides, or drop the claim to '
06486: 'silence this.',
06487: name,
06488: kind,
+06489: shape)
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[5] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_questdb_column_r_carries_a_df_at_2, __pyx_v_name, __pyx_v_kind, __pyx_v_shape};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_warning, __pyx_callargs+__pyx_t_7, (5-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6479, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
06490:
06491:
+06492: cdef bint _roundtrip_claim_already_carried(
static int __pyx_f_7questdb_7_client__roundtrip_claim_already_carried(PyObject *__pyx_v_kind, struct __pyx_t_7questdb_7_client_col_t const *__pyx_v_col) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_WriteUnraisable("questdb._client._roundtrip_claim_already_carried", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__pyx_L0:;
return __pyx_r;
}
06493: str kind, const col_t* col) noexcept:
06494: """Whether the column carries the claimed kind without an override.
06495:
06496: An object column of `uuid.UUID` or `ipaddress.IPv4Address` is
06497: already written as UUID or IPV4 by the source alone -- which is the
06498: shape plain `to_pandas()` hands back -- so no override is set for
06499: it and none is missing. Without this, the claim such a frame comes
06500: back with would be reported as dropped on every write, on the one
06501: path the claim exists to serve.
06502:
06503: `col_source_fsb_claimed_arrow` is the classifier acting on the
06504: claim itself: it takes that source only for a `uuid` claim on a
06505: 16-byte column or a `long256` claim on a 32-byte one, so the width
06506: already names the kind.
06507: """
+06508: if kind == 'uuid':
__pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_uuid, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6508, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+06509: return (col.setup.source == col_source_t.col_source_uuid_pyobj
case __pyx_e_7questdb_7_client_col_source_fsb_claimed_arrow:
+06510: or col.setup.source
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_uuid_pyobj:
/* … */
__pyx_t_1 = 1;
break;
default:
__pyx_t_1 = 0;
break;
}
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
06511: == col_source_t.col_source_fsb_claimed_arrow)
+06512: if kind == 'long256':
__pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_long256, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6512, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
06513: return (col.setup.source
+06514: == col_source_t.col_source_fsb_claimed_arrow)
{
__pyx_r = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_fsb_claimed_arrow);
}
goto __pyx_L0;
+06515: if kind == 'ipv4':
__pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_ipv4, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6515, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+06516: return col.setup.source == col_source_t.col_source_ipv4_pyobj
{
__pyx_r = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_ipv4_pyobj);
}
goto __pyx_L0;
+06517: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
06518:
06519:
+06520: cdef void_int _dataframe_apply_roundtrip_overrides(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_apply_roundtrip_overrides(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan) {
size_t __pyx_v_col_index;
struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col;
int __pyx_v_gh;
PyObject *__pyx_v_arrow_dtype = 0;
PyObject *__pyx_v_dtype = 0;
PyObject *__pyx_v_cols_meta = NULL;
PyObject *__pyx_v_df_cols = NULL;
PyObject *__pyx_v_meta = NULL;
PyObject *__pyx_v_kind = NULL;
PyObject *__pyx_v_bits = NULL;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("questdb._client._dataframe_apply_roundtrip_overrides", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_arrow_dtype);
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_XDECREF(__pyx_v_cols_meta);
__Pyx_XDECREF(__pyx_v_df_cols);
__Pyx_XDECREF(__pyx_v_meta);
__Pyx_XDECREF(__pyx_v_kind);
__Pyx_XDECREF(__pyx_v_bits);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06521: object df, dataframe_plan_t* plan) except -1:
06522: cdef size_t col_index
06523: cdef col_t* col
06524: cdef int gh
06525: cdef object arrow_dtype, dtype
+06526: for col_index in range(plan.col_count):
__pyx_t_1 = __pyx_v_plan->col_count;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_col_index = __pyx_t_3;
+06527: plan.cols.d[col_index].setup.has_override = False
(__pyx_v_plan->cols.d[__pyx_v_col_index]).setup->has_override = 0; }
+06528: cols_meta = _roundtrip_columns_meta(df)
__pyx_t_4 = __pyx_f_7questdb_7_client__roundtrip_columns_meta(__pyx_v_df); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6528, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_cols_meta = __pyx_t_4; __pyx_t_4 = 0;
+06529: if not cols_meta:
__pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_cols_meta); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 6529, __pyx_L1_error) __pyx_t_6 = (!__pyx_t_5); if (__pyx_t_6) { /* … */ }
+06530: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+06531: df_cols = list(df.columns)
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6531, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = __Pyx_PySequence_ListKeepNew(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6531, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_df_cols = ((PyObject*)__pyx_t_7); __pyx_t_7 = 0;
+06532: _dataframe_may_import_deps()
__pyx_t_7 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6532, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+06533: arrow_dtype = getattr(_PANDAS, 'ArrowDtype', None)
__pyx_t_7 = __pyx_v_7questdb_7_client__PANDAS; __Pyx_INCREF(__pyx_t_7); __pyx_t_4 = __Pyx_GetAttr3(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_ArrowDtype, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6533, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_arrow_dtype = __pyx_t_4; __pyx_t_4 = 0;
+06534: for col_index in range(plan.col_count):
__pyx_t_1 = __pyx_v_plan->col_count;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_col_index = __pyx_t_3;
+06535: col = &plan.cols.d[col_index]
__pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_col_index]));
+06536: if col.setup.orig_index >= <size_t>len(df_cols):
__pyx_t_8 = __Pyx_PyList_GET_SIZE(__pyx_v_df_cols); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 6536, __pyx_L1_error) __pyx_t_6 = (__pyx_v_col->setup->orig_index >= ((size_t)__pyx_t_8)); if (__pyx_t_6) { /* … */ }
+06537: continue
goto __pyx_L6_continue;
+06538: meta = cols_meta.get(df_cols[col.setup.orig_index])
__pyx_t_7 = __pyx_v_cols_meta;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_9 = __Pyx_GetItemInt_List(__pyx_v_df_cols, __pyx_v_col->setup->orig_index, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6538, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__pyx_t_10 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_9};
__pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6538, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_XDECREF_SET(__pyx_v_meta, __pyx_t_4);
__pyx_t_4 = 0;
+06539: kind = _roundtrip_kind(meta)
__pyx_t_4 = __pyx_f_7questdb_7_client__roundtrip_kind(__pyx_v_meta); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6539, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_XDECREF_SET(__pyx_v_kind, ((PyObject*)__pyx_t_4)); __pyx_t_4 = 0;
+06540: if kind is None:
__pyx_t_6 = (__pyx_v_kind == ((PyObject*)Py_None));
if (__pyx_t_6) {
/* … */
}
+06541: continue
goto __pyx_L6_continue;
+06542: if col.setup.source == col_source_t.col_source_nulls:
__pyx_t_6 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_nulls);
if (__pyx_t_6) {
/* … */
}
+06543: _dataframe_claim_all_null_source(
__pyx_t_11 = __pyx_f_7questdb_7_client__dataframe_claim_all_null_source(__pyx_v_col, __pyx_v_kind, __pyx_t_4); if (unlikely(__pyx_t_11 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6543, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06544: col, kind, meta.get('precision_bits') or 0)
__pyx_t_7 = __pyx_v_meta;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_10 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_n_u_precision_bits};
__pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6544, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
}
__pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 6544, __pyx_L1_error)
if (!__pyx_t_6) {
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
} else {
__Pyx_INCREF(__pyx_t_9);
__pyx_t_4 = __pyx_t_9;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
goto __pyx_L11_bool_binop_done;
}
__pyx_t_9 = __Pyx_PyLong_From_long(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6544, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__pyx_t_4 = __pyx_t_9;
__pyx_t_9 = 0;
__pyx_L11_bool_binop_done:;
06545: # `col_source_int_pyobj` is what a pandas masked dtype turns
06546: # into: `to_pandas(dtype_backend='numpy_nullable')` returns
06547: # IPV4 / CHAR / GEOHASH as UInt32 / UInt16 / Int* extension
06548: # columns, and `_dataframe_normalize_nullable` converts every
06549: # masked column to object-dtype Python ints before planning.
06550: # `col_source_bytes_pyobj` is the same story for the two binary
06551: # kinds, which that backend hands back as object-dtype `bytes`.
06552: # `col_source_u32_arrow` is an Arrow uint32 column, which
06553: # resolves to `col_target_column_i64` and so reaches the wire as
06554: # a raw buffer with the append call naming its dtype — the same
06555: # place the claim lands for the NumPy and object shapes.
+06556: if (kind == 'ipv4'
__pyx_t_5 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_ipv4, Py_EQ); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 6556, __pyx_L1_error) if (__pyx_t_5) { } else { __pyx_t_6 = __pyx_t_5; goto __pyx_L14_bool_binop_done; } /* … */ if (__pyx_t_6) { /* … */ goto __pyx_L13; }
+06557: and col.setup.source in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_u32_numpy:
/* … */
__pyx_t_5 = 1;
break;
default:
__pyx_t_5 = 0;
break;
}
__pyx_t_12 = __pyx_t_5;
__pyx_t_6 = __pyx_t_12;
__pyx_L14_bool_binop_done:;
+06558: col_source_t.col_source_u32_numpy,
case __pyx_e_7questdb_7_client_col_source_u32_arrow:
+06559: col_source_t.col_source_u32_arrow,
case __pyx_e_7questdb_7_client_col_source_int_pyobj:
06560: col_source_t.col_source_int_pyobj)):
+06561: col.setup.has_override = True
__pyx_v_col->setup->has_override = 1;
+06562: col.setup.override_dtype = \
__pyx_v_col->setup->override_dtype = qwp_numpy_u32_ipv4;
06563: qwp_numpy_dtype.qwp_numpy_u32_ipv4
+06564: elif (kind == 'char'
__pyx_t_12 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_char_2, Py_EQ); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 6564, __pyx_L1_error) if (__pyx_t_12) { } else { __pyx_t_6 = __pyx_t_12; goto __pyx_L16_bool_binop_done; } /* … */ if (__pyx_t_6) { /* … */ goto __pyx_L13; }
+06565: and col.setup.source in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_u16_numpy:
/* … */
__pyx_t_12 = 1;
break;
default:
__pyx_t_12 = 0;
break;
}
__pyx_t_5 = __pyx_t_12;
__pyx_t_6 = __pyx_t_5;
__pyx_L16_bool_binop_done:;
+06566: col_source_t.col_source_u16_numpy,
case __pyx_e_7questdb_7_client_col_source_int_pyobj:
06567: col_source_t.col_source_int_pyobj)):
+06568: col.setup.has_override = True
__pyx_v_col->setup->has_override = 1;
+06569: col.setup.override_dtype = \
__pyx_v_col->setup->override_dtype = qwp_numpy_u16_char;
06570: qwp_numpy_dtype.qwp_numpy_u16_char
+06571: elif (kind == 'uuid'
__pyx_t_5 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_uuid, Py_EQ); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 6571, __pyx_L1_error) if (__pyx_t_5) { } else { __pyx_t_6 = __pyx_t_5; goto __pyx_L18_bool_binop_done; } /* … */ if (__pyx_t_6) { /* … */ goto __pyx_L13; }
+06572: and col.setup.source == col_source_t.col_source_bytes_pyobj):
__pyx_t_5 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_bytes_pyobj);
__pyx_t_6 = __pyx_t_5;
__pyx_L18_bool_binop_done:;
+06573: col.setup.has_override = True
__pyx_v_col->setup->has_override = 1;
+06574: col.setup.override_dtype = qwp_numpy_dtype.qwp_numpy_s16
__pyx_v_col->setup->override_dtype = qwp_numpy_s16;
+06575: elif (kind == 'long256'
__pyx_t_5 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_long256, Py_EQ); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 6575, __pyx_L1_error) if (__pyx_t_5) { } else { __pyx_t_6 = __pyx_t_5; goto __pyx_L20_bool_binop_done; } /* … */ if (__pyx_t_6) { /* … */ goto __pyx_L13; }
+06576: and col.setup.source in (
switch (__pyx_v_col->setup->source) {
case __pyx_e_7questdb_7_client_col_source_int_pyobj:
/* … */
__pyx_t_5 = 1;
break;
default:
__pyx_t_5 = 0;
break;
}
__pyx_t_12 = __pyx_t_5;
__pyx_t_6 = __pyx_t_12;
__pyx_L20_bool_binop_done:;
+06577: col_source_t.col_source_int_pyobj,
case __pyx_e_7questdb_7_client_col_source_bytes_pyobj:
06578: col_source_t.col_source_bytes_pyobj)):
06579: # Plain `to_pandas()` hands a LONG256 column back as Python
06580: # ints — the only shape wide enough to hold one without
06581: # pyarrow — and `numpy_nullable` as raw 32-byte `bytes`.
06582: # Either way the claim is what tells the 32-byte encoder
06583: # from the LONG or BINARY column the shape alone implies.
+06584: col.setup.has_override = True
__pyx_v_col->setup->has_override = 1;
+06585: col.setup.override_dtype = qwp_numpy_dtype.qwp_numpy_s32
__pyx_v_col->setup->override_dtype = qwp_numpy_s32;
+06586: elif kind == 'geohash':
__pyx_t_6 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 6586, __pyx_L1_error) if (__pyx_t_6) { /* … */ } __pyx_L13:;
+06587: gh = _geohash_override_dtype(col.setup.source)
__pyx_v_gh = __pyx_f_7questdb_7_client__geohash_override_dtype(__pyx_v_col->setup->source);
+06588: bits = meta.get('precision_bits') or 0
__pyx_t_7 = __pyx_v_meta;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_10 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_n_u_precision_bits};
__pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6588, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
}
__pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 6588, __pyx_L1_error)
if (!__pyx_t_6) {
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
} else {
__Pyx_INCREF(__pyx_t_9);
__pyx_t_4 = __pyx_t_9;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
goto __pyx_L22_bool_binop_done;
}
__pyx_t_9 = __Pyx_PyLong_From_long(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6588, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__pyx_t_4 = __pyx_t_9;
__pyx_t_9 = 0;
__pyx_L22_bool_binop_done:;
__Pyx_XDECREF_SET(__pyx_v_bits, __pyx_t_4);
__pyx_t_4 = 0;
+06589: bits = int(bits) if _is_integral_not_bool(bits) else 0
__pyx_t_6 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_bits); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6589, __pyx_L1_error) if (__pyx_t_6) { __pyx_t_9 = __Pyx_PyNumber_Int(__pyx_v_bits); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6589, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_4 = __pyx_t_9; __pyx_t_9 = 0; } else { __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0); __pyx_t_4 = __pyx_mstate_global->__pyx_int_0; } __Pyx_DECREF_SET(__pyx_v_bits, __pyx_t_4); __pyx_t_4 = 0;
06590: # The precision is held to the column's own width, not just
06591: # to 1..=60. A claim wider than the slot carrying it is one
06592: # the column cannot express, so it is dropped rather than
06593: # left for the native writer to refuse mid-flush, with the
06594: # connection already open and a message naming neither the
06595: # column nor the claim.
+06596: if (gh != _GEOHASH_DTYPE_NONE
__pyx_t_12 = (__pyx_v_gh != __pyx_v_7questdb_7_client__GEOHASH_DTYPE_NONE);
if (__pyx_t_12) {
} else {
__pyx_t_6 = __pyx_t_12;
goto __pyx_L25_bool_binop_done;
}
/* … */
if (__pyx_t_6) {
/* … */
}
+06597: and gh != _GEOHASH_DTYPE_UNSIGNED
__pyx_t_12 = (__pyx_v_gh != __pyx_v_7questdb_7_client__GEOHASH_DTYPE_UNSIGNED);
if (__pyx_t_12) {
} else {
__pyx_t_6 = __pyx_t_12;
goto __pyx_L25_bool_binop_done;
}
+06598: and 1 <= bits <= _geohash_dtype_max_bits(gh)):
__pyx_t_12 = __Pyx_PyObject_CompareBoolLe_int_object(__pyx_mstate_global->__pyx_int_1, __pyx_v_bits, Py_LE); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 6598, __pyx_L1_error) if (__pyx_t_12) { __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_f_7questdb_7_client__geohash_dtype_max_bits(__pyx_v_gh)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6598, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_12 = __Pyx_PyObject_CompareBoolLe_object_int(__pyx_v_bits, __pyx_t_4, Py_LE); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 6598, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } __pyx_t_6 = __pyx_t_12; __pyx_L25_bool_binop_done:;
+06599: col.setup.has_override = True
__pyx_v_col->setup->has_override = 1;
+06600: col.setup.override_dtype = <qwp_numpy_dtype>gh
__pyx_v_col->setup->override_dtype = ((enum qwp_numpy_dtype)__pyx_v_gh);
+06601: col.setup.override_geohash_bits = <uint8_t>bits
__pyx_t_13 = __Pyx_PyLong_As_uint8_t(__pyx_v_bits); if (unlikely((__pyx_t_13 == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 6601, __pyx_L1_error) __pyx_v_col->setup->override_geohash_bits = ((uint8_t)__pyx_t_13);
+06602: if (not col.setup.has_override
__pyx_t_12 = (!__pyx_v_col->setup->has_override);
if (__pyx_t_12) {
} else {
__pyx_t_6 = __pyx_t_12;
goto __pyx_L29_bool_binop_done;
}
/* … */
if (__pyx_t_6) {
/* … */
}
__pyx_L6_continue:;
}
+06603: and kind in _ATTRS_OVERRIDE_KINDS
if (unlikely(__pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
__PYX_ERR(0, 6603, __pyx_L1_error)
}
__pyx_t_12 = (__Pyx_PyDict_ContainsTF(__pyx_v_kind, __pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS, Py_EQ)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 6603, __pyx_L1_error)
if (__pyx_t_12) {
} else {
__pyx_t_6 = __pyx_t_12;
goto __pyx_L29_bool_binop_done;
}
+06604: and not _roundtrip_claim_already_carried(kind, col)):
__pyx_t_12 = (!__pyx_f_7questdb_7_client__roundtrip_claim_already_carried(__pyx_v_kind, __pyx_v_col));
__pyx_t_6 = __pyx_t_12;
__pyx_L29_bool_binop_done:;
06605: # The claim names a kind this column cannot carry -- a
06606: # width that cannot hold the precision, an unsigned column,
06607: # or a type with no route to the kind at all. That is a
06608: # mistake rather than drift, so it is said out loud, and
06609: # saying it here rather than per kind is what makes all
06610: # five answer the way the Arrow path already answers them.
06611: # The write still goes ahead as the column's own type
06612: # implies.
06613: #
06614: # An Arrow-backed column has already been through
06615: # `_dataframe_normalize_claimed_arrow`, which says the same
06616: # thing against the Arrow type and is the one that knows
06617: # whether the claim could be reshaped. Saying it twice for
06618: # one claim would be worse than either.
+06619: dtype = df.dtypes.iloc[col.setup.orig_index]
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6619, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6619, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_9, __pyx_v_col->setup->orig_index, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6619, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_4); __pyx_t_4 = 0;
+06620: if arrow_dtype is None or not isinstance(dtype, arrow_dtype):
__pyx_t_12 = (__pyx_v_arrow_dtype == Py_None);
if (!__pyx_t_12) {
} else {
__pyx_t_6 = __pyx_t_12;
goto __pyx_L33_bool_binop_done;
}
__pyx_t_12 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_arrow_dtype); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 6620, __pyx_L1_error)
__pyx_t_5 = (!__pyx_t_12);
__pyx_t_6 = __pyx_t_5;
__pyx_L33_bool_binop_done:;
if (__pyx_t_6) {
/* … */
}
+06621: _log_roundtrip_claim_dropped(
__pyx_t_9 = __pyx_f_7questdb_7_client__log_roundtrip_claim_dropped(__pyx_t_4, __pyx_v_kind, __pyx_v_dtype); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6621, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+06622: df_cols[col.setup.orig_index], kind, dtype)
__pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_df_cols, __pyx_v_col->setup->orig_index, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6622, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4);
+06623: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
06624:
06625:
+06626: cdef void_int _dataframe_columnar_populate_chunk(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_populate_chunk(struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan, struct qwp_chunk *__pyx_v_chunk, size_t __pyx_v_row_offset, size_t __pyx_v_row_count) {
size_t __pyx_v_col_index;
struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col;
struct __pyx_t_7questdb_7_client_col_t *__pyx_v_at_col;
size_t __pyx_v_at_col_index;
size_t __pyx_v_field_count;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_prebuilt;
struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_at_prebuilt;
struct line_sender_error *__pyx_v_err;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_populate_chunk", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06627: dataframe_plan_t* plan,
06628: qwp_chunk* chunk,
06629: size_t row_offset,
06630: size_t row_count) except -1:
06631: cdef size_t col_index
06632: cdef col_t* col
+06633: cdef col_t* at_col = NULL
__pyx_v_at_col = NULL;
+06634: cdef size_t at_col_index = 0
__pyx_v_at_col_index = 0;
+06635: cdef size_t field_count = 0
__pyx_v_field_count = 0;
+06636: cdef pyobj_built_t* prebuilt = NULL
__pyx_v_prebuilt = NULL;
+06637: cdef pyobj_built_t* at_prebuilt = NULL
__pyx_v_at_prebuilt = NULL;
+06638: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
06639:
+06640: for col_index in range(plan.col_count):
__pyx_t_1 = __pyx_v_plan->col_count;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_col_index = __pyx_t_3;
+06641: col = &plan.cols.d[col_index]
__pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_col_index]));
+06642: if col.setup.target == col_target_t.col_target_at:
__pyx_t_4 = (__pyx_v_col->setup->target == __pyx_e_7questdb_7_client_col_target_at);
if (__pyx_t_4) {
/* … */
goto __pyx_L5;
}
+06643: at_col = col
__pyx_v_at_col = __pyx_v_col;
+06644: at_col_index = col_index
__pyx_v_at_col_index = __pyx_v_col_index;
+06645: elif col.setup.target in (
switch (__pyx_v_col->setup->target) {
case __pyx_e_7questdb_7_client_col_target_column_bool:
/* … */
__pyx_t_4 = 1;
break;
default:
__pyx_t_4 = 0;
break;
}
__pyx_t_5 = __pyx_t_4;
if (__pyx_t_5) {
/* … */
goto __pyx_L5;
}
+06646: col_target_t.col_target_column_bool,
case __pyx_e_7questdb_7_client_col_target_column_i64:
+06647: col_target_t.col_target_column_i64,
case __pyx_e_7questdb_7_client_col_target_column_f64:
+06648: col_target_t.col_target_column_f64,
case __pyx_e_7questdb_7_client_col_target_column_ts:
+06649: col_target_t.col_target_column_ts,
case __pyx_e_7questdb_7_client_col_target_column_str:
+06650: col_target_t.col_target_column_str,
case __pyx_e_7questdb_7_client_col_target_symbol:
+06651: col_target_t.col_target_symbol,
case __pyx_e_7questdb_7_client_col_target_column_i8:
+06652: col_target_t.col_target_column_i8,
case __pyx_e_7questdb_7_client_col_target_column_i16:
+06653: col_target_t.col_target_column_i16,
case __pyx_e_7questdb_7_client_col_target_column_i32:
+06654: col_target_t.col_target_column_i32,
case __pyx_e_7questdb_7_client_col_target_column_f32:
+06655: col_target_t.col_target_column_f32,
case __pyx_e_7questdb_7_client_col_target_column_uuid:
+06656: col_target_t.col_target_column_uuid,
case __pyx_e_7questdb_7_client_col_target_column_ipv4:
+06657: col_target_t.col_target_column_ipv4,
case __pyx_e_7questdb_7_client_col_target_column_binary:
+06658: col_target_t.col_target_column_binary,
case __pyx_e_7questdb_7_client_col_target_column_arrow:
+06659: col_target_t.col_target_column_arrow,
case __pyx_e_7questdb_7_client_col_target_column_decimal:
06660: col_target_t.col_target_column_decimal):
+06661: if plan.pyobj_built != NULL:
__pyx_t_5 = (__pyx_v_plan->pyobj_built != NULL);
if (__pyx_t_5) {
/* … */
goto __pyx_L6;
}
+06662: prebuilt = plan.pyobj_built[col_index]
__pyx_v_prebuilt = (__pyx_v_plan->pyobj_built[__pyx_v_col_index]);
06663: else:
+06664: prebuilt = NULL
/*else*/ {
__pyx_v_prebuilt = NULL;
}
__pyx_L6:;
+06665: _dataframe_columnar_append_field(
__pyx_t_6 = __pyx_f_7questdb_7_client__dataframe_columnar_append_field(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6665, __pyx_L1_error)
06666: chunk, col, prebuilt, row_offset, row_count)
+06667: field_count += 1
__pyx_v_field_count = (__pyx_v_field_count + 1);
+06668: elif col.setup.target != col_target_t.col_target_skip:
__pyx_t_5 = (__pyx_v_col->setup->target != __pyx_e_7questdb_7_client_col_target_skip);
if (unlikely(__pyx_t_5)) {
/* … */
}
__pyx_L5:;
}
+06669: raise RuntimeError(
__pyx_t_8 = NULL;
06670: 'Unsupported columnar field target: %d.'
+06671: % <int>col.setup.target)
__pyx_t_9 = __Pyx_PyLong_From_int(((int)__pyx_v_col->setup->target)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6671, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Unsupported_columnar_field_targe_2, __pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6671, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_11 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_10}; __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6669, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __Pyx_Raise(__pyx_t_7, 0, 0, 0); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __PYX_ERR(0, 6669, __pyx_L1_error)
06672:
+06673: if field_count == 0:
__pyx_t_5 = (__pyx_v_field_count == 0);
if (unlikely(__pyx_t_5)) {
/* … */
}
+06674: raise RuntimeError(
__pyx_t_10 = NULL;
__pyx_t_1 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_mstate_global->__pyx_kp_u_Validated_columnar_plan_has_no_n};
__pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_1, (2-__pyx_t_1) | (__pyx_t_1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6674, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
}
__Pyx_Raise(__pyx_t_7, 0, 0, 0);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__PYX_ERR(0, 6674, __pyx_L1_error)
06675: 'Validated columnar plan has no non-timestamp data columns.')
+06676: if plan.at_value == _AT_IS_SERVER_NOW:
__pyx_t_5 = (__pyx_v_plan->at_value == __pyx_v_7questdb_7_client__AT_IS_SERVER_NOW);
if (__pyx_t_5) {
/* … */
}
06677: # Explicit `at=ServerTimestamp` opt-in: the frame carries no
06678: # designated timestamp column; the server stamps rows on arrival.
+06679: if not qwp_chunk_at_now(chunk, &err):
__pyx_t_5 = (!qwp_chunk_at_now(__pyx_v_chunk, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+06680: raise c_err_to_py(err)
__pyx_t_7 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6680, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_Raise(__pyx_t_7, 0, 0, 0); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __PYX_ERR(0, 6680, __pyx_L1_error)
+06681: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+06682: if plan.at_value >= 0:
__pyx_t_5 = (__pyx_v_plan->at_value >= 0);
if (__pyx_t_5) {
/* … */
}
06683: # Fixed scalar designated timestamp shared by every row.
+06684: if not qwp_chunk_at_scalar_nanos(
__pyx_t_5 = (!qwp_chunk_at_scalar_nanos(__pyx_v_chunk, __pyx_v_plan->at_value, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
06685: chunk, plan.at_value, &err):
+06686: raise c_err_to_py(err)
__pyx_t_7 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_Raise(__pyx_t_7, 0, 0, 0); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __PYX_ERR(0, 6686, __pyx_L1_error)
+06687: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+06688: if at_col == NULL:
__pyx_t_5 = (__pyx_v_at_col == NULL);
if (unlikely(__pyx_t_5)) {
/* … */
}
+06689: raise RuntimeError('Validated columnar plan has no timestamp column.')
__pyx_t_10 = NULL;
__pyx_t_1 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_mstate_global->__pyx_kp_u_Validated_columnar_plan_has_no_t};
__pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_1, (2-__pyx_t_1) | (__pyx_t_1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6689, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
}
__Pyx_Raise(__pyx_t_7, 0, 0, 0);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__PYX_ERR(0, 6689, __pyx_L1_error)
+06690: if plan.pyobj_built != NULL:
__pyx_t_5 = (__pyx_v_plan->pyobj_built != NULL);
if (__pyx_t_5) {
/* … */
}
+06691: at_prebuilt = plan.pyobj_built[at_col_index]
__pyx_v_at_prebuilt = (__pyx_v_plan->pyobj_built[__pyx_v_at_col_index]);
+06692: _dataframe_columnar_append_at(
__pyx_t_6 = __pyx_f_7questdb_7_client__dataframe_columnar_append_at(__pyx_v_chunk, __pyx_v_at_col, __pyx_v_at_prebuilt, __pyx_v_row_offset, __pyx_v_row_count); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6692, __pyx_L1_error)
06693: chunk, at_col, at_prebuilt, row_offset, row_count)
06694:
06695:
+06696: cdef void_int _dataframe_columnar_sync(qwp_direct_sender* conn) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_sync(struct qwp_direct_sender *__pyx_v_conn) {
struct line_sender_error *__pyx_v_err;
int __pyx_v_ok;
PyThreadState *__pyx_v_gs;
uint64_t __pyx_v_start_ns;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_sync", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+06697: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+06698: cdef bint ok = False
__pyx_v_ok = 0;
+06699: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+06700: cdef uint64_t start_ns = 0
__pyx_v_start_ns = 0;
06701: global _dataframe_columnar_sync_calls
06702: global _dataframe_columnar_sync_ns
+06703: if _dataframe_columnar_count_io_stats:
if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
}
+06704: start_ns = time.perf_counter_ns()
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6704, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6704, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_2);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_2);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6704, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_1); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 6704, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_v_start_ns = __pyx_t_6;
+06705: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+06706: ok = qwp_direct_sender_commit(
__pyx_v_ok = qwp_direct_sender_commit(__pyx_v_conn, qwpws_ack_level_ok, (&__pyx_v_err));
06707: conn,
06708: qwpws_ack_level.qwpws_ack_level_ok,
06709: &err)
+06710: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+06711: if _dataframe_columnar_count_io_stats:
if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
}
+06712: _dataframe_columnar_sync_calls += 1
__pyx_v_7questdb_7_client__dataframe_columnar_sync_calls = (__pyx_v_7questdb_7_client__dataframe_columnar_sync_calls + 1);
+06713: _dataframe_columnar_sync_ns += time.perf_counter_ns() - start_ns
__pyx_t_1 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__dataframe_columnar_sync_ns); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_7 = __Pyx_PyLong_From_uint64_t(__pyx_v_start_ns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = __Pyx_PyNumber_Subtract_object_int(__pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyNumber_InPlaceAdd_int_object(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6713, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_7); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 6713, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_7questdb_7_client__dataframe_columnar_sync_ns = __pyx_t_6;
+06714: if not ok:
__pyx_t_8 = (!__pyx_v_ok);
if (unlikely(__pyx_t_8)) {
/* … */
}
+06715: raise c_err_to_py(err)
__pyx_t_7 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6715, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_Raise(__pyx_t_7, 0, 0, 0); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __PYX_ERR(0, 6715, __pyx_L1_error)
06716:
06717:
+06718: cdef bint _dataframe_columnar_force_drop_after_error(
static int __pyx_f_7questdb_7_client__dataframe_columnar_force_drop_after_error(struct qwp_direct_sender *__pyx_v_conn, int __pyx_v_flushed) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
06719: qwp_direct_sender* conn,
06720: bint flushed) noexcept:
06721: # A failed call keeps the frames it pipelined after its last commit out
06722: # of the table. Batches up to its last commit -- the first flush on a
06723: # fresh connection commits on its own, and so does each checkpoint --
06724: # may already be in the table, and the caller hears so through
06725: # `in_doubt`. The direct pool's return path best-effort-commits
06726: # pipelined frames, so a connection that saw any flush is dropped
06727: # (discarding the uncommitted frames) instead of returned. When no
06728: # flush succeeded there is nothing pipelined and the connection can be
06729: # returned normally: the FFI return path itself closes (rather than
06730: # recycles) a conn that recorded a terminal transport or protocol
06731: # error.
+06732: if conn == NULL:
__pyx_t_1 = (__pyx_v_conn == NULL);
if (__pyx_t_1) {
/* … */
}
+06733: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+06734: return flushed
{
__pyx_r = __pyx_v_flushed;
}
goto __pyx_L0;
06735:
06736:
+06737: cdef bint _dataframe_columnar_is_deferred_capacity_error(
static int __pyx_f_7questdb_7_client__dataframe_columnar_is_deferred_capacity_error(struct line_sender_error *__pyx_v_err) {
size_t __pyx_v_msg_len;
char const *__pyx_v_msg;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
06738: line_sender_error* err) noexcept:
+06739: cdef size_t msg_len = 0
__pyx_v_msg_len = 0;
+06740: cdef const char* msg = line_sender_error_msg(err, &msg_len)
__pyx_v_msg = line_sender_error_msg(__pyx_v_err, (&__pyx_v_msg_len));
+06741: if msg_len < 47:
__pyx_t_1 = (__pyx_v_msg_len < 47);
if (__pyx_t_1) {
/* … */
}
+06742: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+06743: return strncmp(
{
__pyx_r = (strncmp(__pyx_v_msg, __pyx_k_column_sender_deferred_flush_cap, 47) == 0);
}
goto __pyx_L0;
06744: msg,
06745: "column sender deferred flush capacity exhausted",
06746: 47) == 0
06747:
06748:
+06749: cdef void_int _dataframe_columnar_flush(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_flush(struct qwp_direct_sender *__pyx_v_conn, struct qwp_chunk *__pyx_v_chunk, int __pyx_v_retry_after_sync, int *__pyx_v_may_have_committed_prefix) {
struct line_sender_error *__pyx_v_err;
enum line_sender_error_code __pyx_v_err_code;
int __pyx_v_ok;
PyThreadState *__pyx_v_gs;
uint64_t __pyx_v_start_ns;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client._dataframe_columnar_flush", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06750: qwp_direct_sender* conn,
06751: qwp_chunk* chunk,
06752: bint retry_after_sync,
06753: bint* may_have_committed_prefix) except -1:
+06754: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
06755: cdef line_sender_error_code err_code
+06756: cdef bint ok = False
__pyx_v_ok = 0;
+06757: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+06758: cdef uint64_t start_ns = 0
__pyx_v_start_ns = 0;
06759: global _dataframe_columnar_flush_calls
06760: global _dataframe_columnar_flush_ns
06761: global _dataframe_columnar_flush_retry_syncs
06762:
+06763: if _dataframe_columnar_count_io_stats:
if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
}
+06764: start_ns = time.perf_counter_ns()
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6764, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6764, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_2);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_2);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6764, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_1); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 6764, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_v_start_ns = __pyx_t_6;
+06765: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+06766: ok = qwp_direct_sender_flush(conn, chunk, &err)
__pyx_v_ok = qwp_direct_sender_flush(__pyx_v_conn, __pyx_v_chunk, (&__pyx_v_err));
+06767: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+06768: if _dataframe_columnar_count_io_stats:
if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
}
+06769: _dataframe_columnar_flush_calls += 1
__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls = (__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls + 1);
+06770: _dataframe_columnar_flush_ns += time.perf_counter_ns() - start_ns
__pyx_t_1 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__dataframe_columnar_flush_ns); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6770, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6770, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6770, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6770, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_7 = __Pyx_PyLong_From_uint64_t(__pyx_v_start_ns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6770, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = __Pyx_PyNumber_Subtract_object_int(__pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6770, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyNumber_InPlaceAdd_int_object(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6770, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_7); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 6770, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_7questdb_7_client__dataframe_columnar_flush_ns = __pyx_t_6;
+06771: if ok:
if (__pyx_v_ok) {
/* … */
}
+06772: may_have_committed_prefix[0] = True
(__pyx_v_may_have_committed_prefix[0]) = 1;
+06773: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
06774:
+06775: err_code = line_sender_error_get_code(err)
__pyx_v_err_code = line_sender_error_get_code(__pyx_v_err);
+06776: if (retry_after_sync and err_code == line_sender_error_invalid_api_call and
if (__pyx_v_retry_after_sync) {
} else {
__pyx_t_8 = __pyx_v_retry_after_sync;
goto __pyx_L7_bool_binop_done;
}
__pyx_t_9 = (__pyx_v_err_code == line_sender_error_invalid_api_call);
if (__pyx_t_9) {
} else {
__pyx_t_8 = __pyx_t_9;
goto __pyx_L7_bool_binop_done;
}
/* … */
if (__pyx_t_8) {
/* … */
}
+06777: _dataframe_columnar_is_deferred_capacity_error(err)):
__pyx_t_9 = __pyx_f_7questdb_7_client__dataframe_columnar_is_deferred_capacity_error(__pyx_v_err); __pyx_t_8 = __pyx_t_9; __pyx_L7_bool_binop_done:;
+06778: if _dataframe_columnar_count_io_stats:
if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
}
+06779: _dataframe_columnar_flush_retry_syncs += 1
__pyx_v_7questdb_7_client__dataframe_columnar_flush_retry_syncs = (__pyx_v_7questdb_7_client__dataframe_columnar_flush_retry_syncs + 1);
+06780: line_sender_error_free(err)
line_sender_error_free(__pyx_v_err);
+06781: err = NULL
__pyx_v_err = NULL;
+06782: _dataframe_columnar_sync(conn)
__pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_sync(__pyx_v_conn); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6782, __pyx_L1_error)
+06783: may_have_committed_prefix[0] = True
(__pyx_v_may_have_committed_prefix[0]) = 1;
+06784: if _dataframe_columnar_count_io_stats:
if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
}
+06785: start_ns = time.perf_counter_ns()
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6785, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6785, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_2);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_2);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6785, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
}
__pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_7); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 6785, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_v_start_ns = __pyx_t_6;
+06786: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+06787: ok = qwp_direct_sender_flush(conn, chunk, &err)
__pyx_v_ok = qwp_direct_sender_flush(__pyx_v_conn, __pyx_v_chunk, (&__pyx_v_err));
+06788: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+06789: if _dataframe_columnar_count_io_stats:
if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
}
+06790: _dataframe_columnar_flush_calls += 1
__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls = (__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls + 1);
+06791: _dataframe_columnar_flush_ns += time.perf_counter_ns() - start_ns
__pyx_t_7 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__dataframe_columnar_flush_ns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6791, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6791, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6791, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6791, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_start_ns); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6791, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyNumber_Subtract_object_int(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6791, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyNumber_InPlaceAdd_int_object(__pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6791, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_3); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 6791, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_7questdb_7_client__dataframe_columnar_flush_ns = __pyx_t_6;
+06792: if ok:
if (__pyx_v_ok) {
/* … */
}
+06793: may_have_committed_prefix[0] = True
(__pyx_v_may_have_committed_prefix[0]) = 1;
+06794: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
06795:
+06796: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6796, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 6796, __pyx_L1_error)
06797:
06798:
+06799: cdef int _arrow_flush_once(
static int __pyx_f_7questdb_7_client__arrow_flush_once(struct qwp_direct_sender *__pyx_v_conn, struct line_sender_table_name __pyx_v_table, struct ArrowArray *__pyx_v_array, struct ArrowSchema *__pyx_v_schema, struct line_sender_column_name *__pyx_v_ts_column, int __pyx_v_at_scalar_set, int64_t __pyx_v_at_scalar_nanos, struct qwp_arrow_override const *__pyx_v_overrides, size_t __pyx_v_overrides_len, struct line_sender_error **__pyx_v_err) {
int __pyx_v_ok;
PyThreadState *__pyx_v_gs;
uint64_t __pyx_v_start_ns;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client._arrow_flush_once", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06800: qwp_direct_sender* conn,
06801: line_sender_table_name table,
06802: ArrowArray* array,
06803: ArrowSchema* schema,
06804: line_sender_column_name* ts_column,
06805: bint at_scalar_set,
06806: int64_t at_scalar_nanos,
06807: const qwp_arrow_override* overrides,
06808: size_t overrides_len,
06809: line_sender_error** err) except -1:
+06810: cdef bint ok = False
__pyx_v_ok = 0;
+06811: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+06812: cdef uint64_t start_ns = 0
__pyx_v_start_ns = 0;
06813: global _dataframe_columnar_flush_calls
06814: global _dataframe_columnar_flush_ns
06815:
+06816: if _dataframe_columnar_count_io_stats:
if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
}
+06817: start_ns = time.perf_counter_ns()
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6817, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6817, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_2);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_2);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6817, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_1); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 6817, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_v_start_ns = __pyx_t_6;
+06818: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+06819: if ts_column != NULL:
__pyx_t_7 = (__pyx_v_ts_column != NULL);
if (__pyx_t_7) {
/* … */
goto __pyx_L4;
}
+06820: ok = qwp_direct_sender_flush_arrow_batch_at_column(
__pyx_v_ok = qwp_direct_sender_flush_arrow_batch_at_column(__pyx_v_conn, __pyx_v_table, __pyx_v_array, __pyx_v_schema, (__pyx_v_ts_column[0]), __pyx_v_overrides, __pyx_v_overrides_len, __pyx_v_err);
06821: conn, table, array, schema, ts_column[0],
06822: overrides, overrides_len, err)
+06823: elif at_scalar_set:
if (__pyx_v_at_scalar_set) {
/* … */
goto __pyx_L4;
}
+06824: ok = qwp_direct_sender_flush_arrow_batch_at_scalar_nanos(
__pyx_v_ok = qwp_direct_sender_flush_arrow_batch_at_scalar_nanos(__pyx_v_conn, __pyx_v_table, __pyx_v_array, __pyx_v_schema, __pyx_v_at_scalar_nanos, __pyx_v_overrides, __pyx_v_overrides_len, __pyx_v_err);
06825: conn, table, array, schema, at_scalar_nanos,
06826: overrides, overrides_len, err)
06827: else:
+06828: ok = qwp_direct_sender_flush_arrow_batch_at_now(
/*else*/ {
/* … */
__pyx_v_ok = qwp_direct_sender_flush_arrow_batch_at_now(__pyx_v_conn, __pyx_v_table, __pyx_v_array, __pyx_v_schema, __pyx_v_overrides, __pyx_v_overrides_len, __pyx_v_err);
}
__pyx_L4:;
06829: conn, table, array, schema,
06830: overrides, overrides_len, err)
+06831: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+06832: if _dataframe_columnar_count_io_stats:
if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
}
+06833: _dataframe_columnar_flush_calls += 1
__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls = (__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls + 1);
+06834: _dataframe_columnar_flush_ns += time.perf_counter_ns() - start_ns
__pyx_t_1 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__dataframe_columnar_flush_ns); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6834, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6834, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6834, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_8))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_8, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6834, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __pyx_t_8 = __Pyx_PyLong_From_uint64_t(__pyx_v_start_ns); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6834, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_2 = __Pyx_PyNumber_Subtract_object_int(__pyx_t_4, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6834, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = __Pyx_PyNumber_InPlaceAdd_int_object(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6834, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_8); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 6834, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_v_7questdb_7_client__dataframe_columnar_flush_ns = __pyx_t_6;
+06835: return 1 if ok else 0
if (__pyx_v_ok) {
__pyx_t_9 = 1;
} else {
__pyx_t_9 = 0;
}
{
__pyx_r = __pyx_t_9;
}
goto __pyx_L0;
06836:
06837:
+06838: cdef void_int _dataframe_arrow_flush_batch(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_arrow_flush_batch(struct qwp_direct_sender *__pyx_v_conn, struct line_sender_table_name __pyx_v_table, struct ArrowArray *__pyx_v_array, struct ArrowSchema *__pyx_v_schema, struct line_sender_column_name *__pyx_v_ts_column, int __pyx_v_at_scalar_set, int64_t __pyx_v_at_scalar_nanos, struct qwp_arrow_override const *__pyx_v_overrides, size_t __pyx_v_overrides_len, int __pyx_v_retry_after_sync, int *__pyx_v_may_have_committed_prefix, size_t *__pyx_v_deferred_since_sync) {
struct line_sender_error *__pyx_v_err;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._dataframe_arrow_flush_batch", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
06839: qwp_direct_sender* conn,
06840: line_sender_table_name table,
06841: ArrowArray* array,
06842: ArrowSchema* schema,
06843: line_sender_column_name* ts_column,
06844: bint at_scalar_set,
06845: int64_t at_scalar_nanos,
06846: const qwp_arrow_override* overrides,
06847: size_t overrides_len,
06848: bint retry_after_sync,
06849: bint* may_have_committed_prefix,
06850: size_t* deferred_since_sync) except -1:
+06851: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
06852: global _dataframe_columnar_flush_retry_syncs
06853:
+06854: if _arrow_flush_once(
__pyx_t_1 = __pyx_f_7questdb_7_client__arrow_flush_once(__pyx_v_conn, __pyx_v_table, __pyx_v_array, __pyx_v_schema, __pyx_v_ts_column, __pyx_v_at_scalar_set, __pyx_v_at_scalar_nanos, __pyx_v_overrides, __pyx_v_overrides_len, (&__pyx_v_err)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 6854, __pyx_L1_error)
__pyx_t_2 = (__pyx_t_1 != 0);
if (__pyx_t_2) {
/* … */
}
06855: conn, table, array, schema, ts_column,
06856: at_scalar_set, at_scalar_nanos,
06857: overrides, overrides_len, &err):
+06858: may_have_committed_prefix[0] = True
(__pyx_v_may_have_committed_prefix[0]) = 1;
+06859: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
06860:
06861: # A batch larger than the server per-batch cap is split into several
06862: # deferred frames, so the caller's batch counter can undercount the
06863: # 127-slot in-flight window; commit to drain it and retry once. The
06864: # failed frame itself never hit the wire (`array` was re-exported;
06865: # `release` must still be set for the retry to be safe). The native split
06866: # path never exposes a retryable error after committing an internal prefix;
06867: # this explicit sync nevertheless makes the higher-level source prefix
06868: # sticky before the failed batch is retried.
+06869: if (retry_after_sync
if (__pyx_v_retry_after_sync) {
} else {
__pyx_t_2 = __pyx_v_retry_after_sync;
goto __pyx_L5_bool_binop_done;
}
/* … */
if (__pyx_t_2) {
/* … */
}
+06870: and line_sender_error_get_code(err) ==
__pyx_t_3 = (line_sender_error_get_code(__pyx_v_err) == line_sender_error_invalid_api_call);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L5_bool_binop_done;
}
06871: line_sender_error_invalid_api_call
+06872: and _dataframe_columnar_is_deferred_capacity_error(err)
__pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_columnar_is_deferred_capacity_error(__pyx_v_err);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L5_bool_binop_done;
}
+06873: and array.release != NULL):
__pyx_t_3 = (__pyx_v_array->release != NULL); __pyx_t_2 = __pyx_t_3; __pyx_L5_bool_binop_done:;
+06874: if _dataframe_columnar_count_io_stats:
if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
}
+06875: _dataframe_columnar_flush_retry_syncs += 1
__pyx_v_7questdb_7_client__dataframe_columnar_flush_retry_syncs = (__pyx_v_7questdb_7_client__dataframe_columnar_flush_retry_syncs + 1);
+06876: line_sender_error_free(err)
line_sender_error_free(__pyx_v_err);
+06877: err = NULL
__pyx_v_err = NULL;
+06878: _dataframe_columnar_sync(conn)
__pyx_t_4 = __pyx_f_7questdb_7_client__dataframe_columnar_sync(__pyx_v_conn); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6878, __pyx_L1_error)
+06879: may_have_committed_prefix[0] = True
(__pyx_v_may_have_committed_prefix[0]) = 1;
+06880: deferred_since_sync[0] = 0
(__pyx_v_deferred_since_sync[0]) = 0;
+06881: if _arrow_flush_once(
__pyx_t_1 = __pyx_f_7questdb_7_client__arrow_flush_once(__pyx_v_conn, __pyx_v_table, __pyx_v_array, __pyx_v_schema, __pyx_v_ts_column, __pyx_v_at_scalar_set, __pyx_v_at_scalar_nanos, __pyx_v_overrides, __pyx_v_overrides_len, (&__pyx_v_err)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 6881, __pyx_L1_error)
__pyx_t_2 = (__pyx_t_1 != 0);
if (__pyx_t_2) {
/* … */
}
06882: conn, table, array, schema, ts_column,
06883: at_scalar_set, at_scalar_nanos,
06884: overrides, overrides_len, &err):
+06885: may_have_committed_prefix[0] = True
(__pyx_v_may_have_committed_prefix[0]) = 1;
+06886: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
06887:
+06888: raise c_err_to_py(err)
__pyx_t_5 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6888, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __PYX_ERR(0, 6888, __pyx_L1_error)
06889:
06890:
+06891: def _debug_dataframe_columnar_io_stats(
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_24_debug_dataframe_columnar_io_stats(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_23_debug_dataframe_columnar_io_stats, "\n Internal benchmark hook for columnar flush/sync timing.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_24_debug_dataframe_columnar_io_stats = {"_debug_dataframe_columnar_io_stats", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_24_debug_dataframe_columnar_io_stats, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_23_debug_dataframe_columnar_io_stats}; static PyObject *__pyx_pw_7questdb_7_client_24_debug_dataframe_columnar_io_stats(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_enabled = 0; int __pyx_v_reset; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_dataframe_columnar_io_stats (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_enabled,&__pyx_mstate_global->__pyx_n_u_reset,0}; PyObject* values[2] = {0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 6891, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 6891, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 6891, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_dataframe_columnar_io_stats", 0) < (0)) __PYX_ERR(0, 6891, __pyx_L3_error) /* … */ /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_23_debug_dataframe_columnar_io_stats(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_enabled, int __pyx_v_reset) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client._debug_dataframe_columnar_io_stats", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ { PyObject* __pyx_temp[2] = {Py_None, __pyx_t_17}; __pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 6891, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); } __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_24_debug_dataframe_columnar_io_stats, 0, __pyx_mstate_global->__pyx_n_u_debug_dataframe_columnar_io_sta, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[115])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 6891, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_17, __pyx_t_20); __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_dataframe_columnar_io_sta, __pyx_t_17) < (0)) __PYX_ERR(0, 6891, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+06892: object enabled=None,
if (!values[0]) values[0] = __Pyx_NewRef(((PyObject *)Py_None)); } else { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 6891, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 6891, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } if (!values[0]) values[0] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_enabled = values[0]; if (values[1]) { __pyx_v_reset = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_reset == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6893, __pyx_L3_error) } else {
+06893: bint reset=False):
__pyx_v_reset = ((int)((int)0));
}
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("_debug_dataframe_columnar_io_stats", 0, 0, 2, __pyx_nargs); __PYX_ERR(0, 6891, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client._debug_dataframe_columnar_io_stats", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_23_debug_dataframe_columnar_io_stats(__pyx_self, __pyx_v_enabled, __pyx_v_reset);
/* … */
__pyx_t_17 = __Pyx_PyBool_FromLong(((int)0)); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 6893, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
06894: """
06895: Internal benchmark hook for columnar flush/sync timing.
06896: """
06897: global _dataframe_columnar_count_io_stats
06898: global _dataframe_columnar_flush_calls
06899: global _dataframe_columnar_flush_ns
06900: global _dataframe_columnar_sync_calls
06901: global _dataframe_columnar_sync_ns
06902: global _dataframe_columnar_flush_retry_syncs
06903:
+06904: if reset:
if (__pyx_v_reset) {
/* … */
}
+06905: _dataframe_columnar_flush_calls = 0
__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls = 0;
+06906: _dataframe_columnar_flush_ns = 0
__pyx_v_7questdb_7_client__dataframe_columnar_flush_ns = 0;
+06907: _dataframe_columnar_sync_calls = 0
__pyx_v_7questdb_7_client__dataframe_columnar_sync_calls = 0;
+06908: _dataframe_columnar_sync_ns = 0
__pyx_v_7questdb_7_client__dataframe_columnar_sync_ns = 0;
+06909: _dataframe_columnar_flush_retry_syncs = 0
__pyx_v_7questdb_7_client__dataframe_columnar_flush_retry_syncs = 0;
+06910: if enabled is not None:
__pyx_t_1 = (__pyx_v_enabled != Py_None);
if (__pyx_t_1) {
/* … */
}
+06911: _dataframe_columnar_count_io_stats = bool(enabled)
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_enabled};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6911, __pyx_L1_error)
__Pyx_GOTREF((PyObject *)__pyx_t_2);
}
__pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_t_2)); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6911, __pyx_L1_error)
__Pyx_DECREF((PyObject *)__pyx_t_2); __pyx_t_2 = 0;
__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats = __pyx_t_1;
06912: return {
+06913: 'enabled': _dataframe_columnar_count_io_stats,
__pyx_t_2 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6913, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6913, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_enabled, __pyx_t_3) < (0)) __PYX_ERR(0, 6913, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06914: 'flush_calls': _dataframe_columnar_flush_calls,
__pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6914, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_flush_calls, __pyx_t_3) < (0)) __PYX_ERR(0, 6913, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06915: 'flush_s': _dataframe_columnar_flush_ns / 1_000_000_000.0,
__pyx_t_3 = PyFloat_FromDouble((((double)__pyx_v_7questdb_7_client__dataframe_columnar_flush_ns) / 1000000000.0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6915, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_flush_s, __pyx_t_3) < (0)) __PYX_ERR(0, 6913, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06916: 'sync_calls': _dataframe_columnar_sync_calls,
__pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__dataframe_columnar_sync_calls); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6916, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_sync_calls, __pyx_t_3) < (0)) __PYX_ERR(0, 6913, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06917: 'sync_s': _dataframe_columnar_sync_ns / 1_000_000_000.0,
__pyx_t_3 = PyFloat_FromDouble((((double)__pyx_v_7questdb_7_client__dataframe_columnar_sync_ns) / 1000000000.0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6917, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_sync_s, __pyx_t_3) < (0)) __PYX_ERR(0, 6913, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06918: 'flush_retry_syncs': _dataframe_columnar_flush_retry_syncs,
__pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__dataframe_columnar_flush_retry_syncs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6918, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_flush_retry_syncs, __pyx_t_3) < (0)) __PYX_ERR(0, 6913, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
06919: }
06920:
06921:
+06922: def _debug_dataframe_columnar_plan(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_26_debug_dataframe_columnar_plan(PyObject *__pyx_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_26_debug_dataframe_columnar_plan = {"_debug_dataframe_columnar_plan", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_26_debug_dataframe_columnar_plan, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_26_debug_dataframe_columnar_plan(PyObject *__pyx_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_df = 0;
PyObject *__pyx_v_table_name = 0;
PyObject *__pyx_v_table_name_col = 0;
PyObject *__pyx_v_symbols = 0;
PyObject *__pyx_v_at = 0;
#if !CYTHON_VECTORCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_debug_dataframe_columnar_plan (wrapper)", 0);
#if !CYTHON_VECTORCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_df_2,&__pyx_mstate_global->__pyx_n_u_table_name,&__pyx_mstate_global->__pyx_n_u_table_name_col,&__pyx_mstate_global->__pyx_n_u_symbols,&__pyx_mstate_global->__pyx_n_u_at,0};
PyObject* values[5] = {0,0,0,0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 6922, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 6922, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_dataframe_columnar_plan", 0) < (0)) __PYX_ERR(0, 6922, __pyx_L3_error)
/* … */
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_25_debug_dataframe_columnar_plan(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at) {
struct qdb_pystr_buf *__pyx_v_b;
struct __pyx_t_7questdb_7_client_dataframe_plan_t __pyx_v_plan;
PyObject *__pyx_v_failures = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._debug_dataframe_columnar_plan", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_failures);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_17 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 6922, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
/* … */
__pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_26_debug_dataframe_columnar_plan, 0, __pyx_mstate_global->__pyx_n_u_debug_dataframe_columnar_plan, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[116])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 6922, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_20);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20);
#endif
__Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_20, __pyx_t_17);
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_dataframe_columnar_plan, __pyx_t_20) < (0)) __PYX_ERR(0, 6922, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
06923: object df,
06924: *,
+06925: object table_name=None,
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 6922, __pyx_L1_error)
+06926: object table_name_col=None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)((PyObject*)__pyx_mstate_global->__pyx_n_u_auto))); /* … */ if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)((PyObject*)__pyx_mstate_global->__pyx_n_u_auto))); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_table_name_col, Py_None) < (0)) __PYX_ERR(0, 6922, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_symbols, ((PyObject*)__pyx_mstate_global->__pyx_n_u_auto)) < (0)) __PYX_ERR(0, 6922, __pyx_L1_error)
06927: object symbols='auto',
+06928: object at=None):
if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_dataframe_columnar_plan", 1, 1, 1, i); __PYX_ERR(0, 6922, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 6922, __pyx_L3_error) /* … */ if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_df = values[0]; __pyx_v_table_name = values[1]; __pyx_v_table_name_col = values[2]; __pyx_v_symbols = values[3]; __pyx_v_at = values[4]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_debug_dataframe_columnar_plan", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 6922, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._debug_dataframe_columnar_plan", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_25_debug_dataframe_columnar_plan(__pyx_self, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_at, Py_None) < (0)) __PYX_ERR(0, 6922, __pyx_L1_error)
+06929: cdef qdb_pystr_buf* b = qdb_pystr_buf_new()
__pyx_v_b = qdb_pystr_buf_new();
+06930: cdef dataframe_plan_t plan = dataframe_plan_blank()
__pyx_v_plan = __pyx_f_7questdb_7_client_dataframe_plan_blank();
06931: cdef object failures
+06932: try:
/*try:*/ {
+06933: _dataframe_plan_build(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_plan_build(__pyx_v_b, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, (&__pyx_v_plan), ((PyObject*)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6933, __pyx_L4_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
06934: b,
06935: df,
06936: table_name,
06937: table_name_col,
06938: symbols,
06939: at,
06940: &plan,
+06941: _FIELD_TARGETS_QWP)
__pyx_t_1 = __pyx_v_7questdb_7_client__FIELD_TARGETS_QWP;
__Pyx_INCREF(__pyx_t_1);
+06942: _dataframe_columnar_promote_cols(df, &plan)
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_promote_cols(__pyx_v_df, (&__pyx_v_plan)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6942, __pyx_L4_error)
+06943: failures = _dataframe_columnar_plan_failures(df, &plan)
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_plan_failures(__pyx_v_df, (&__pyx_v_plan)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6943, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_failures = __pyx_t_1; __pyx_t_1 = 0;
06944: return {
+06945: 'supported': not bool(failures),
__pyx_t_1 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6945, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = NULL; __pyx_t_5 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_failures}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6945, __pyx_L4_error) __Pyx_GOTREF((PyObject *)__pyx_t_3); } __pyx_t_6 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_t_3)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 6945, __pyx_L4_error) __Pyx_DECREF((PyObject *)__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyBool_FromLong((!__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6945, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_supported, __pyx_t_3) < (0)) __PYX_ERR(0, 6945, __pyx_L4_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06946: 'failures': failures,
if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_failures, __pyx_v_failures) < (0)) __PYX_ERR(0, 6945, __pyx_L4_error)
+06947: 'normalizations': _dataframe_columnar_plan_normalizations(
__pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_columnar_plan_normalizations(__pyx_v_df, (&__pyx_v_plan)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6947, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_normalizations, __pyx_t_3) < (0)) __PYX_ERR(0, 6945, __pyx_L4_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L3_return; }
06948: df,
06949: &plan),
06950: }
06951: finally:
+06952: dataframe_plan_release(&plan)
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_ExceptionSwap(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
if ( unlikely(__Pyx_GetException(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12) < 0)) __Pyx_ErrFetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__pyx_t_7 = __pyx_lineno; __pyx_t_8 = __pyx_clineno; __pyx_t_9 = __pyx_filename;
{
__pyx_f_7questdb_7_client_dataframe_plan_release((&__pyx_v_plan));
/* … */
__pyx_f_7questdb_7_client_dataframe_plan_release((&__pyx_v_plan));
+06953: qdb_pystr_buf_free(b)
qdb_pystr_buf_free(__pyx_v_b);
}
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ErrRestore(__pyx_t_10, __pyx_t_11, __pyx_t_12);
__pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0;
__pyx_lineno = __pyx_t_7; __pyx_clineno = __pyx_t_8; __pyx_filename = __pyx_t_9;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_15 = __pyx_r;
__pyx_r = 0;
/* … */
qdb_pystr_buf_free(__pyx_v_b);
__pyx_r = __pyx_t_15;
__pyx_t_15 = 0;
goto __pyx_L0;
}
}
06954:
06955:
+06956: def _bench_dataframe_flush_arrow_batch(
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_28_bench_dataframe_flush_arrow_batch(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_27_bench_dataframe_flush_arrow_batch, "\n Internal benchmark hook for `qwp_direct_sender_flush_arrow_batch_at_now`\n FFI.\n\n `arrow_source` must expose the Arrow PyCapsule Interface\n (`__arrow_c_stream__`) \342\200\224 pa.RecordBatch, pa.Table, pa.RecordBatchReader,\n pl.DataFrame, or any other Arrow-native container. Pandas frames are\n not accepted here on purpose: this hook benches the Arrow FFI itself,\n not pandas\342\206\222Arrow conversion. Use `_bench_dataframe_plan_and_populate_\n column_chunks` for the pandas chunk-based path. Intentionally kept out\n of `__all__`.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_28_bench_dataframe_flush_arrow_batch = {"_bench_dataframe_flush_arrow_batch", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_28_bench_dataframe_flush_arrow_batch, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_27_bench_dataframe_flush_arrow_batch}; static PyObject *__pyx_pw_7questdb_7_client_28_bench_dataframe_flush_arrow_batch(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_arrow_source = 0; PyObject *__pyx_v_table_name = 0; PyObject *__pyx_v_at = 0; PyObject *__pyx_v_conf = 0; size_t __pyx_v_iterations; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_bench_dataframe_flush_arrow_batch (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_arrow_source,&__pyx_mstate_global->__pyx_n_u_table_name,&__pyx_mstate_global->__pyx_n_u_at,&__pyx_mstate_global->__pyx_n_u_conf,&__pyx_mstate_global->__pyx_n_u_iterations,0}; PyObject* values[5] = {0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 6956, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 6956, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_bench_dataframe_flush_arrow_batch", 0) < (0)) __PYX_ERR(0, 6956, __pyx_L3_error) /* … */ /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_27_bench_dataframe_flush_arrow_batch(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_arrow_source, PyObject *__pyx_v_table_name, PyObject *__pyx_v_at, PyObject *__pyx_v_conf, size_t __pyx_v_iterations) { CYTHON_UNUSED size_t __pyx_v_iteration; size_t __pyx_v_row_count; size_t __pyx_v_col_count; size_t __pyx_v_completed; struct questdb_db *__pyx_v_db; struct qwp_direct_sender *__pyx_v_conn; struct line_sender_error *__pyx_v_err; struct qdb_pystr_buf *__pyx_v_b; PyThreadState *__pyx_v_gs; PyObject *__pyx_v_conf_bytes = 0; int __pyx_v_any_flushed; int __pyx_v_may_have_committed_prefix; size_t __pyx_v_deferred_since_sync; struct line_sender_table_name __pyx_v_c_table_name; struct line_sender_column_name __pyx_v_c_ts_column; struct line_sender_column_name *__pyx_v_c_ts_column_ptr; struct ArrowSchema __pyx_v_c_schema; int __pyx_v_at_is_column; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("questdb._client._bench_dataframe_flush_arrow_batch", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_conf_bytes); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 6956, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); /* … */ __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_28_bench_dataframe_flush_arrow_batch, 0, __pyx_mstate_global->__pyx_n_u_bench_dataframe_flush_arrow_bat_2, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[117])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 6956, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_17, __pyx_t_20); __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_bench_dataframe_flush_arrow_bat_2, __pyx_t_17) < (0)) __PYX_ERR(0, 6956, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
06957: object arrow_source,
06958: *,
+06959: object table_name=None,
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 6956, __pyx_L1_error)
+06960: object at=None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_at, Py_None) < (0)) __PYX_ERR(0, 6956, __pyx_L1_error)
+06961: object conf=None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_bench_dataframe_flush_arrow_batch", 1, 1, 1, i); __PYX_ERR(0, 6956, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 6956, __pyx_L3_error) /* … */ if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_arrow_source = values[0]; __pyx_v_table_name = values[1]; __pyx_v_at = values[2]; __pyx_v_conf = values[3]; if (values[4]) { __pyx_v_iterations = __Pyx_PyLong_As_size_t(values[4]); if (unlikely((__pyx_v_iterations == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 6962, __pyx_L3_error) } else { __pyx_v_iterations = ((size_t)((size_t)1)); } } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_bench_dataframe_flush_arrow_batch", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 6956, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._bench_dataframe_flush_arrow_batch", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_27_bench_dataframe_flush_arrow_batch(__pyx_self, __pyx_v_arrow_source, __pyx_v_table_name, __pyx_v_at, __pyx_v_conf, __pyx_v_iterations); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_conf, Py_None) < (0)) __PYX_ERR(0, 6956, __pyx_L1_error)
+06962: size_t iterations=1):
__pyx_t_17 = __Pyx_PyLong_FromSize_t(((size_t)1)); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 6962, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_iterations, __pyx_t_17) < (0)) __PYX_ERR(0, 6956, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
06963: """
06964: Internal benchmark hook for `qwp_direct_sender_flush_arrow_batch_at_now`
06965: FFI.
06966:
06967: `arrow_source` must expose the Arrow PyCapsule Interface
06968: (`__arrow_c_stream__`) — pa.RecordBatch, pa.Table, pa.RecordBatchReader,
06969: pl.DataFrame, or any other Arrow-native container. Pandas frames are
06970: not accepted here on purpose: this hook benches the Arrow FFI itself,
06971: not pandas→Arrow conversion. Use `_bench_dataframe_plan_and_populate_
06972: column_chunks` for the pandas chunk-based path. Intentionally kept out
06973: of `__all__`.
06974: """
06975: cdef size_t iteration
+06976: cdef size_t row_count = 0
__pyx_v_row_count = 0;
+06977: cdef size_t col_count = 0
__pyx_v_col_count = 0;
+06978: cdef size_t completed = 0
__pyx_v_completed = 0;
+06979: cdef questdb_db* db = NULL
__pyx_v_db = NULL;
+06980: cdef qwp_direct_sender* conn = NULL
__pyx_v_conn = NULL;
+06981: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+06982: cdef qdb_pystr_buf* b = NULL
__pyx_v_b = NULL;
+06983: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
06984: cdef bytes conf_bytes
+06985: cdef bint any_flushed = False
__pyx_v_any_flushed = 0;
+06986: cdef bint may_have_committed_prefix = False
__pyx_v_may_have_committed_prefix = 0;
+06987: cdef size_t deferred_since_sync = 0
__pyx_v_deferred_since_sync = 0;
06988: cdef line_sender_table_name c_table_name
06989: cdef line_sender_column_name c_ts_column
+06990: cdef line_sender_column_name* c_ts_column_ptr = NULL
__pyx_v_c_ts_column_ptr = NULL;
06991: cdef ArrowSchema c_schema
+06992: cdef bint at_is_column = False
__pyx_v_at_is_column = 0;
06993:
+06994: if iterations == 0:
__pyx_t_1 = (__pyx_v_iterations == 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+06995: raise ValueError('iterations must be greater than zero')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_iterations_must_be_greater_than};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6995, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 6995, __pyx_L1_error)
+06996: if conf is None:
__pyx_t_1 = (__pyx_v_conf == Py_None);
if (unlikely(__pyx_t_1)) {
/* … */
}
+06997: raise ValueError('conf is required for flush_arrow_batch bench.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_conf_is_required_for_flush_arrow};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6997, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 6997, __pyx_L1_error)
+06998: if not hasattr(arrow_source, '__arrow_c_stream__'):
__pyx_t_1 = __Pyx_HasAttr(__pyx_v_arrow_source, __pyx_mstate_global->__pyx_n_u_arrow_c_stream_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 6998, __pyx_L1_error) __pyx_t_5 = (!__pyx_t_1); if (unlikely(__pyx_t_5)) { /* … */ }
+06999: raise TypeError(
__pyx_t_3 = NULL;
+07000: '_bench_dataframe_flush_arrow_batch requires an Arrow-native '
__pyx_t_9 = 164;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[1]);
#endif
__pyx_t_10 = 0;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_10 |= __Pyx_PyUnicode_KIND_04(__pyx_t_8[1]);
#endif
__pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, __pyx_t_9, __pyx_t_10);
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7000, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_6};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6999, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 6999, __pyx_L1_error)
07001: 'source exposing __arrow_c_stream__ '
07002: '(pa.RecordBatch / pa.Table / pl.DataFrame / RecordBatchReader). '
+07003: f'Got {type(arrow_source).__name__}.')
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_arrow_source)), __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7003, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_t_6, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7003, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_bench_dataframe_flush_arrow_bat; __pyx_t_8[1] = __pyx_t_7; __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u__3;
+07004: if not isinstance(table_name, str):
__pyx_t_5 = PyUnicode_Check(__pyx_v_table_name);
__pyx_t_1 = (!__pyx_t_5);
if (unlikely(__pyx_t_1)) {
/* … */
}
+07005: raise TypeError(
__pyx_t_6 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_table_name_must_be_str_for_Arrow};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7005, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 7005, __pyx_L1_error)
07006: 'table_name must be str for Arrow-native DataFrame input.')
+07007: if at is None or isinstance(at, ServerTimestampType):
__pyx_t_5 = (__pyx_v_at == Py_None);
if (!__pyx_t_5) {
} else {
__pyx_t_1 = __pyx_t_5;
goto __pyx_L8_bool_binop_done;
}
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ServerTimestampType); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7007, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_5 = PyObject_IsInstance(__pyx_v_at, __pyx_t_2); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 7007, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_1 = __pyx_t_5;
__pyx_L8_bool_binop_done:;
if (__pyx_t_1) {
/* … */
goto __pyx_L7;
}
+07008: at_is_column = False
__pyx_v_at_is_column = 0;
+07009: elif isinstance(at, str):
__pyx_t_1 = PyUnicode_Check(__pyx_v_at);
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L7;
}
+07010: at_is_column = True
__pyx_v_at_is_column = 1;
07011: else:
+07012: raise TypeError(
/*else*/ {
__pyx_t_6 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_at_must_be_a_column_name_str_Ser};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7012, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 7012, __pyx_L1_error)
}
__pyx_L7:;
07013: 'at must be a column name str, ServerTimestamp, or None '
07014: 'for Arrow-native DataFrame input.')
07015:
+07016: row_count = int(
__pyx_t_6 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7016, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_PyLong_As_size_t(__pyx_t_6); if (unlikely((__pyx_t_4 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 7016, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_row_count = __pyx_t_4;
+07017: getattr(arrow_source, 'num_rows', None)
__pyx_t_6 = __Pyx_GetAttr3(__pyx_v_arrow_source, __pyx_mstate_global->__pyx_n_u_num_rows, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7017, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7017, __pyx_L1_error) if (!__pyx_t_1) { __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } else { __Pyx_INCREF(__pyx_t_6); __pyx_t_2 = __pyx_t_6; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L10_bool_binop_done; }
+07018: or getattr(arrow_source, 'height', None)
__pyx_t_6 = __Pyx_GetAttr3(__pyx_v_arrow_source, __pyx_mstate_global->__pyx_n_u_height, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7018, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7018, __pyx_L1_error) if (!__pyx_t_1) { __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } else { __Pyx_INCREF(__pyx_t_6); __pyx_t_2 = __pyx_t_6; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L10_bool_binop_done; }
+07019: or 0)
__pyx_t_6 = __Pyx_PyLong_From_long(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7019, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_2 = __pyx_t_6; __pyx_t_6 = 0; __pyx_L10_bool_binop_done:;
+07020: col_count = int(
__pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7020, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_4 = __Pyx_PyLong_As_size_t(__pyx_t_2); if (unlikely((__pyx_t_4 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 7020, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_col_count = __pyx_t_4;
+07021: getattr(arrow_source, 'num_columns', None)
__pyx_t_2 = __Pyx_GetAttr3(__pyx_v_arrow_source, __pyx_mstate_global->__pyx_n_u_num_columns, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7021, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7021, __pyx_L1_error) if (!__pyx_t_1) { __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = __pyx_t_2; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L13_bool_binop_done; }
+07022: or getattr(arrow_source, 'width', None)
__pyx_t_2 = __Pyx_GetAttr3(__pyx_v_arrow_source, __pyx_mstate_global->__pyx_n_u_width, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7022, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7022, __pyx_L1_error) if (!__pyx_t_1) { __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = __pyx_t_2; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L13_bool_binop_done; }
+07023: or 0)
__pyx_t_2 = __Pyx_PyLong_From_long(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7023, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = __pyx_t_2; __pyx_t_2 = 0; __pyx_L13_bool_binop_done:;
07024:
+07025: conf_bytes = conf.encode('utf-8') if isinstance(conf, str) else conf
__pyx_t_1 = PyUnicode_Check(__pyx_v_conf); if (__pyx_t_1) { __pyx_t_3 = __pyx_v_conf; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_utf_8}; __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7025, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); } if (!(likely(PyBytes_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_6))) __PYX_ERR(0, 7025, __pyx_L1_error) __pyx_t_2 = __pyx_t_6; __pyx_t_6 = 0; } else { __pyx_t_6 = __pyx_v_conf; __Pyx_INCREF(__pyx_t_6); if (!(likely(PyBytes_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_6))) __PYX_ERR(0, 7025, __pyx_L1_error) __pyx_t_2 = __pyx_t_6; __pyx_t_6 = 0; } __pyx_v_conf_bytes = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
+07026: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+07027: db = questdb_db_connect(conf_bytes, len(conf_bytes), &err)
if (unlikely(__pyx_v_conf_bytes == Py_None)) {
PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
__PYX_ERR(0, 7027, __pyx_L1_error)
}
__pyx_t_11 = __Pyx_PyBytes_AsString(__pyx_v_conf_bytes); if (unlikely((!__pyx_t_11) && PyErr_Occurred())) __PYX_ERR(0, 7027, __pyx_L1_error)
if (unlikely(__pyx_v_conf_bytes == Py_None)) {
PyErr_SetString(PyExc_TypeError, "object of type \047NoneType\047 has no len()");
__PYX_ERR(0, 7027, __pyx_L1_error)
}
__pyx_t_9 = __Pyx_PyBytes_GET_SIZE(__pyx_v_conf_bytes); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 7027, __pyx_L1_error)
__pyx_v_db = questdb_db_connect(__pyx_t_11, __pyx_t_9, (&__pyx_v_err));
+07028: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+07029: if db == NULL:
__pyx_t_1 = (__pyx_v_db == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+07030: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7030, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 7030, __pyx_L1_error)
+07031: b = qdb_pystr_buf_new()
__pyx_v_b = qdb_pystr_buf_new();
+07032: memset(&c_schema, 0, sizeof(ArrowSchema))
(void)(memset((&__pyx_v_c_schema), 0, (sizeof(struct ArrowSchema))));
+07033: try:
/*try:*/ {
+07034: str_to_table_name(b, <PyObject*>table_name, &c_table_name)
__pyx_t_12 = __pyx_f_7questdb_7_client_str_to_table_name(__pyx_v_b, ((PyObject *)__pyx_v_table_name), (&__pyx_v_c_table_name)); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7034, __pyx_L18_error)
+07035: if at_is_column:
if (__pyx_v_at_is_column) {
/* … */
}
+07036: str_to_column_name(b, at, &c_ts_column)
__pyx_t_2 = __pyx_v_at;
__Pyx_INCREF(__pyx_t_2);
if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_2))) __PYX_ERR(0, 7036, __pyx_L18_error)
__pyx_t_12 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_v_b, ((PyObject*)__pyx_t_2), (&__pyx_v_c_ts_column)); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7036, __pyx_L18_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+07037: c_ts_column_ptr = &c_ts_column
__pyx_v_c_ts_column_ptr = (&__pyx_v_c_ts_column);
07038:
+07039: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+07040: conn = questdb_db_borrow_direct_sender(db, &err)
__pyx_v_conn = questdb_db_borrow_direct_sender(__pyx_v_db, (&__pyx_v_err));
+07041: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+07042: if conn == NULL:
__pyx_t_1 = (__pyx_v_conn == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+07043: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7043, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 7043, __pyx_L18_error)
+07044: try:
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
goto __pyx_L30_try_end;
__pyx_L25_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
__pyx_L27_except_error:;
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15);
goto __pyx_L23_error;
__pyx_L30_try_end:;
}
}
+07045: for iteration in range(iterations):
__pyx_t_4 = __pyx_v_iterations;
__pyx_t_16 = __pyx_t_4;
for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
__pyx_v_iteration = __pyx_t_17;
+07046: _capsule_consume_stream(
__pyx_t_12 = __pyx_f_7questdb_7_client__capsule_consume_stream(__pyx_v_conn, __pyx_v_arrow_source, __pyx_v_c_table_name, __pyx_v_c_ts_column_ptr, 0, 0, (&__pyx_v_c_schema), NULL, 0, (&__pyx_v_any_flushed), (&__pyx_v_deferred_since_sync), (&__pyx_v_may_have_committed_prefix), Py_None, Py_None); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7046, __pyx_L25_error)
}
07047: conn, arrow_source, c_table_name, c_ts_column_ptr,
07048: False, 0, &c_schema, NULL, 0, &any_flushed,
07049: &deferred_since_sync, &may_have_committed_prefix,
07050: None, None)
+07051: if any_flushed:
if (__pyx_v_any_flushed) {
/* … */
}
+07052: _dataframe_columnar_sync(conn)
__pyx_t_12 = __pyx_f_7questdb_7_client__dataframe_columnar_sync(__pyx_v_conn); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7052, __pyx_L25_error)
+07053: completed = iterations
__pyx_v_completed = __pyx_v_iterations;
+07054: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._bench_dataframe_flush_arrow_batch", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_6, &__pyx_t_3) < 0) __PYX_ERR(0, 7054, __pyx_L27_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_3);
+07055: questdb_db_drop_direct_sender(db, conn)
questdb_db_drop_direct_sender(__pyx_v_db, __pyx_v_conn);
+07056: conn = NULL
__pyx_v_conn = NULL;
+07057: raise
__Pyx_GIVEREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_6, __pyx_t_3); __pyx_t_2 = 0; __pyx_t_6 = 0; __pyx_t_3 = 0; __PYX_ERR(0, 7057, __pyx_L27_except_error) }
07058: finally:
+07059: if conn != NULL:
/*finally:*/ {
/*normal exit:*/{
__pyx_t_1 = (__pyx_v_conn != NULL);
if (__pyx_t_1) {
/* … */
}
goto __pyx_L24;
}
__pyx_L23_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_ExceptionSwap(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
if ( unlikely(__Pyx_GetException(&__pyx_t_15, &__pyx_t_14, &__pyx_t_13) < 0)) __Pyx_ErrFetch(&__pyx_t_15, &__pyx_t_14, &__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_20);
__Pyx_XGOTREF(__pyx_t_21);
__Pyx_XGOTREF(__pyx_t_22);
__pyx_t_10 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
{
__pyx_t_1 = (__pyx_v_conn != NULL);
if (__pyx_t_1) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_XGIVEREF(__pyx_t_21);
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_ExceptionReset(__pyx_t_20, __pyx_t_21, __pyx_t_22);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ErrRestore(__pyx_t_15, __pyx_t_14, __pyx_t_13);
__pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
__pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19;
goto __pyx_L18_error;
}
__pyx_L24:;
}
}
+07060: questdb_db_return_direct_sender(db, conn)
questdb_db_return_direct_sender(__pyx_v_db, __pyx_v_conn);
/* … */
questdb_db_return_direct_sender(__pyx_v_db, __pyx_v_conn);
07061: finally:
+07062: if c_schema.release != NULL:
/*finally:*/ {
/*normal exit:*/{
__pyx_t_1 = (__pyx_v_c_schema.release != NULL);
if (__pyx_t_1) {
/* … */
}
/* … */
__pyx_t_1 = (__pyx_v_c_schema.release != NULL);
if (__pyx_t_1) {
/* … */
}
+07063: c_schema.release(&c_schema)
__pyx_v_c_schema.release((&__pyx_v_c_schema));
/* … */
__pyx_v_c_schema.release((&__pyx_v_c_schema));
+07064: if b != NULL:
__pyx_t_1 = (__pyx_v_b != NULL);
if (__pyx_t_1) {
/* … */
}
/* … */
__pyx_t_1 = (__pyx_v_b != NULL);
if (__pyx_t_1) {
/* … */
}
+07065: qdb_pystr_buf_free(b)
qdb_pystr_buf_free(__pyx_v_b);
/* … */
qdb_pystr_buf_free(__pyx_v_b);
+07066: if db != NULL:
__pyx_t_1 = (__pyx_v_db != NULL);
if (__pyx_t_1) {
/* … */
}
goto __pyx_L19;
}
__pyx_L18_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_ExceptionSwap(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
if ( unlikely(__Pyx_GetException(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20);
__Pyx_XGOTREF(__pyx_t_22);
__Pyx_XGOTREF(__pyx_t_21);
__Pyx_XGOTREF(__pyx_t_20);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__pyx_t_18 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
{
/* … */
__pyx_t_1 = (__pyx_v_db != NULL);
if (__pyx_t_1) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_XGIVEREF(__pyx_t_21);
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_ErrRestore(__pyx_t_22, __pyx_t_21, __pyx_t_20);
__pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0;
__pyx_lineno = __pyx_t_18; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_19;
goto __pyx_L1_error;
}
__pyx_L19:;
}
+07067: questdb_db_close(db)
questdb_db_close(__pyx_v_db);
/* … */
questdb_db_close(__pyx_v_db);
07068:
07069: return {
+07070: 'iterations': iterations,
__pyx_t_3 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7070, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = __Pyx_PyLong_FromSize_t(__pyx_v_iterations); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7070, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_iterations, __pyx_t_6) < (0)) __PYX_ERR(0, 7070, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+07071: 'row_count': row_count,
__pyx_t_6 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7071, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_row_count, __pyx_t_6) < (0)) __PYX_ERR(0, 7070, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+07072: 'col_count': col_count,
__pyx_t_6 = __Pyx_PyLong_FromSize_t(__pyx_v_col_count); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7072, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_col_count, __pyx_t_6) < (0)) __PYX_ERR(0, 7070, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+07073: 'logical_cells': row_count * col_count,
__pyx_t_6 = __Pyx_PyLong_FromSize_t((__pyx_v_row_count * __pyx_v_col_count)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7073, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_logical_cells, __pyx_t_6) < (0)) __PYX_ERR(0, 7070, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+07074: 'completed': completed,
__pyx_t_6 = __Pyx_PyLong_FromSize_t(__pyx_v_completed); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7074, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_completed, __pyx_t_6) < (0)) __PYX_ERR(0, 7070, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
07075: }
07076:
07077:
+07078: def _bench_dataframe_plan_and_populate_column_chunks(
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_30_bench_dataframe_plan_and_populate_column_chunks(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_29_bench_dataframe_plan_and_populate_column_chunks, "\n Internal benchmark hook for Layer 1 pandas columnar work.\n\n This builds the shared dataframe plan and populates #148 chunks, but it\n never flushes to a sender. It is intentionally kept out of ``__all__``.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_30_bench_dataframe_plan_and_populate_column_chunks = {"_bench_dataframe_plan_and_populate_column_chunks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_30_bench_dataframe_plan_and_populate_column_chunks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_29_bench_dataframe_plan_and_populate_column_chunks}; static PyObject *__pyx_pw_7questdb_7_client_30_bench_dataframe_plan_and_populate_column_chunks(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_df = 0; PyObject *__pyx_v_table_name = 0; PyObject *__pyx_v_table_name_col = 0; PyObject *__pyx_v_symbols = 0; PyObject *__pyx_v_at = 0; size_t __pyx_v_iterations; size_t __pyx_v_max_rows_per_chunk; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_bench_dataframe_plan_and_populate_column_chunks (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_df_2,&__pyx_mstate_global->__pyx_n_u_table_name,&__pyx_mstate_global->__pyx_n_u_table_name_col,&__pyx_mstate_global->__pyx_n_u_symbols,&__pyx_mstate_global->__pyx_n_u_at,&__pyx_mstate_global->__pyx_n_u_iterations,&__pyx_mstate_global->__pyx_n_u_max_rows_per_chunk,0}; PyObject* values[7] = {0,0,0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 7078, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 7078, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_bench_dataframe_plan_and_populate_column_chunks", 0) < (0)) __PYX_ERR(0, 7078, __pyx_L3_error) /* … */ /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_29_bench_dataframe_plan_and_populate_column_chunks(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at, size_t __pyx_v_iterations, size_t __pyx_v_max_rows_per_chunk) { CYTHON_UNUSED size_t __pyx_v_iteration; struct qdb_pystr_buf *__pyx_v_b; struct __pyx_t_7questdb_7_client_dataframe_plan_t __pyx_v_plan; struct qwp_chunk *__pyx_v_chunk; struct line_sender_error *__pyx_v_err; uint64_t __pyx_v_start_row_path_emissions; uint64_t __pyx_v_end_row_path_emissions; size_t __pyx_v_row_count; size_t __pyx_v_col_count; size_t __pyx_v_populated_rows; size_t __pyx_v_populated_rows_total; size_t __pyx_v_populated_chunks; size_t __pyx_v_rows_per_chunk; size_t __pyx_v_row_offset; size_t __pyx_v_chunk_rows; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client._bench_dataframe_plan_and_populate_column_chunks", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 7078, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); /* … */ __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_30_bench_dataframe_plan_and_populate_column_chunks, 0, __pyx_mstate_global->__pyx_n_u_bench_dataframe_plan_and_popula, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[118])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 7078, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20); #endif __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_20, __pyx_t_17); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_bench_dataframe_plan_and_popula, __pyx_t_20) < (0)) __PYX_ERR(0, 7078, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
07079: object df,
07080: *,
+07081: object table_name=None,
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 7078, __pyx_L1_error)
+07082: object table_name_col=None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)((PyObject*)__pyx_mstate_global->__pyx_n_u_auto))); /* … */ if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)((PyObject*)__pyx_mstate_global->__pyx_n_u_auto))); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_table_name_col, Py_None) < (0)) __PYX_ERR(0, 7078, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_symbols, ((PyObject*)__pyx_mstate_global->__pyx_n_u_auto)) < (0)) __PYX_ERR(0, 7078, __pyx_L1_error)
07083: object symbols='auto',
+07084: object at=None,
if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_bench_dataframe_plan_and_populate_column_chunks", 1, 1, 1, i); __PYX_ERR(0, 7078, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 7078, __pyx_L3_error) /* … */ if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_df = values[0]; __pyx_v_table_name = values[1]; __pyx_v_table_name_col = values[2]; __pyx_v_symbols = values[3]; __pyx_v_at = values[4]; if (values[5]) { __pyx_v_iterations = __Pyx_PyLong_As_size_t(values[5]); if (unlikely((__pyx_v_iterations == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 7085, __pyx_L3_error) } else { __pyx_v_iterations = ((size_t)((size_t)1)); } if (values[6]) { __pyx_v_max_rows_per_chunk = __Pyx_PyLong_As_size_t(values[6]); if (unlikely((__pyx_v_max_rows_per_chunk == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 7086, __pyx_L3_error) } else { __pyx_v_max_rows_per_chunk = ((size_t)((size_t)0x4000)); } } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_bench_dataframe_plan_and_populate_column_chunks", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 7078, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._bench_dataframe_plan_and_populate_column_chunks", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_29_bench_dataframe_plan_and_populate_column_chunks(__pyx_self, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_v_iterations, __pyx_v_max_rows_per_chunk); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_at, Py_None) < (0)) __PYX_ERR(0, 7078, __pyx_L1_error)
+07085: size_t iterations=1,
__pyx_t_20 = __Pyx_PyLong_FromSize_t(((size_t)1)); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 7085, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_iterations, __pyx_t_20) < (0)) __PYX_ERR(0, 7078, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+07086: size_t max_rows_per_chunk=16384):
__pyx_t_20 = __Pyx_PyLong_FromSize_t(((size_t)0x4000)); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 7086, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_max_rows_per_chunk, __pyx_t_20) < (0)) __PYX_ERR(0, 7078, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
07087: """
07088: Internal benchmark hook for Layer 1 pandas columnar work.
07089:
07090: This builds the shared dataframe plan and populates #148 chunks, but it
07091: never flushes to a sender. It is intentionally kept out of ``__all__``.
07092: """
07093: cdef size_t iteration
+07094: cdef qdb_pystr_buf* b = NULL
__pyx_v_b = NULL;
07095: cdef dataframe_plan_t plan
+07096: cdef qwp_chunk* chunk = NULL
__pyx_v_chunk = NULL;
+07097: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
07098: cdef uint64_t start_row_path_emissions
07099: cdef uint64_t end_row_path_emissions
+07100: cdef size_t row_count = 0
__pyx_v_row_count = 0;
+07101: cdef size_t col_count = 0
__pyx_v_col_count = 0;
+07102: cdef size_t populated_rows = 0
__pyx_v_populated_rows = 0;
+07103: cdef size_t populated_rows_total = 0
__pyx_v_populated_rows_total = 0;
+07104: cdef size_t populated_chunks = 0
__pyx_v_populated_chunks = 0;
+07105: cdef size_t rows_per_chunk = 0
__pyx_v_rows_per_chunk = 0;
07106: cdef size_t row_offset
07107: cdef size_t chunk_rows
07108: global _dataframe_count_row_path_emissions
07109: global _dataframe_row_path_emissions
07110:
+07111: if iterations == 0:
__pyx_t_1 = (__pyx_v_iterations == 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+07112: raise ValueError('iterations must be greater than zero')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_iterations_must_be_greater_than};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7112, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 7112, __pyx_L1_error)
07113:
+07114: start_row_path_emissions = _dataframe_row_path_emissions
__pyx_v_start_row_path_emissions = __pyx_v_7questdb_7_client__dataframe_row_path_emissions;
+07115: _dataframe_count_row_path_emissions = True
__pyx_v_7questdb_7_client__dataframe_count_row_path_emissions = 1;
+07116: try:
/*try:*/ {
+07117: for iteration in range(iterations):
__pyx_t_4 = __pyx_v_iterations;
__pyx_t_5 = __pyx_t_4;
for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
__pyx_v_iteration = __pyx_t_6;
+07118: b = qdb_pystr_buf_new()
__pyx_v_b = qdb_pystr_buf_new();
+07119: plan = dataframe_plan_blank()
__pyx_v_plan = __pyx_f_7questdb_7_client_dataframe_plan_blank();
+07120: try:
/*try:*/ {
+07121: _dataframe_plan_build(
__pyx_t_7 = __pyx_f_7questdb_7_client__dataframe_plan_build(__pyx_v_b, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, (&__pyx_v_plan), ((PyObject*)__pyx_t_2)); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7121, __pyx_L12_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
07122: b,
07123: df,
07124: table_name,
07125: table_name_col,
07126: symbols,
07127: at,
07128: &plan,
+07129: _FIELD_TARGETS_QWP)
__pyx_t_2 = __pyx_v_7questdb_7_client__FIELD_TARGETS_QWP;
__Pyx_INCREF(__pyx_t_2);
+07130: row_count = plan.row_count
__pyx_t_8 = __pyx_v_plan.row_count;
__pyx_v_row_count = __pyx_t_8;
+07131: col_count = plan.col_count
__pyx_t_8 = __pyx_v_plan.col_count;
__pyx_v_col_count = __pyx_t_8;
+07132: if (plan.col_count == 0) or (plan.row_count == 0):
__pyx_t_9 = (__pyx_v_plan.col_count == 0);
if (!__pyx_t_9) {
} else {
__pyx_t_1 = __pyx_t_9;
goto __pyx_L15_bool_binop_done;
}
__pyx_t_9 = (__pyx_v_plan.row_count == 0);
__pyx_t_1 = __pyx_t_9;
__pyx_L15_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+07133: continue
goto __pyx_L9_continue;
07134:
+07135: _dataframe_columnar_promote_cols(df, &plan)
__pyx_t_7 = __pyx_f_7questdb_7_client__dataframe_columnar_promote_cols(__pyx_v_df, (&__pyx_v_plan)); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7135, __pyx_L12_error)
+07136: _dataframe_columnar_validate_plan(df, &plan)
__pyx_t_7 = __pyx_f_7questdb_7_client__dataframe_columnar_validate_plan(__pyx_v_df, (&__pyx_v_plan)); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7136, __pyx_L12_error)
+07137: _dataframe_columnar_prebuild_pyobj(df, &plan)
__pyx_t_7 = __pyx_f_7questdb_7_client__dataframe_columnar_prebuild_pyobj(__pyx_v_df, (&__pyx_v_plan)); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7137, __pyx_L12_error)
+07138: rows_per_chunk = _dataframe_columnar_rows_per_chunk(
__pyx_v_rows_per_chunk = __pyx_f_7questdb_7_client__dataframe_columnar_rows_per_chunk((&__pyx_v_plan), __pyx_v_max_rows_per_chunk);
07139: &plan,
07140: max_rows_per_chunk)
+07141: chunk = qwp_chunk_new(
__pyx_v_chunk = qwp_chunk_new(__pyx_v_plan.c_table_name.buf, __pyx_v_plan.c_table_name.len, (&__pyx_v_err));
07142: plan.c_table_name.buf,
07143: plan.c_table_name.len,
07144: &err)
+07145: if chunk == NULL:
__pyx_t_1 = (__pyx_v_chunk == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+07146: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7146, __pyx_L12_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 7146, __pyx_L12_error)
+07147: row_offset = 0
__pyx_v_row_offset = 0;
+07148: while row_offset < plan.row_count:
while (1) {
__pyx_t_1 = (__pyx_v_row_offset < __pyx_v_plan.row_count);
if (!__pyx_t_1) break;
+07149: if not qwp_chunk_clear(chunk, &err):
__pyx_t_1 = (!qwp_chunk_clear(__pyx_v_chunk, (&__pyx_v_err)));
if (unlikely(__pyx_t_1)) {
/* … */
}
+07150: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7150, __pyx_L12_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 7150, __pyx_L12_error)
+07151: chunk_rows = rows_per_chunk
__pyx_v_chunk_rows = __pyx_v_rows_per_chunk;
+07152: if chunk_rows > plan.row_count - row_offset:
__pyx_t_1 = (__pyx_v_chunk_rows > (__pyx_v_plan.row_count - __pyx_v_row_offset));
if (__pyx_t_1) {
/* … */
}
+07153: chunk_rows = plan.row_count - row_offset
__pyx_v_chunk_rows = (__pyx_v_plan.row_count - __pyx_v_row_offset);
+07154: _dataframe_columnar_populate_chunk(
__pyx_t_7 = __pyx_f_7questdb_7_client__dataframe_columnar_populate_chunk((&__pyx_v_plan), __pyx_v_chunk, __pyx_v_row_offset, __pyx_v_chunk_rows); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7154, __pyx_L12_error)
07155: &plan,
07156: chunk,
07157: row_offset,
07158: chunk_rows)
+07159: populated_rows = qwp_chunk_row_count(chunk, &err)
__pyx_v_populated_rows = qwp_chunk_row_count(__pyx_v_chunk, (&__pyx_v_err));
+07160: if populated_rows == <size_t>-1:
__pyx_t_1 = (__pyx_v_populated_rows == ((size_t)-1L));
if (unlikely(__pyx_t_1)) {
/* … */
}
+07161: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7161, __pyx_L12_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 7161, __pyx_L12_error)
+07162: if populated_rows != 0:
__pyx_t_1 = (__pyx_v_populated_rows != 0);
if (__pyx_t_1) {
/* … */
}
+07163: populated_chunks += 1
__pyx_v_populated_chunks = (__pyx_v_populated_chunks + 1);
+07164: populated_rows_total += populated_rows
__pyx_v_populated_rows_total = (__pyx_v_populated_rows_total + __pyx_v_populated_rows);
+07165: row_offset += chunk_rows
__pyx_v_row_offset = (__pyx_v_row_offset + __pyx_v_chunk_rows);
}
}
07166: finally:
+07167: if chunk != NULL:
/*finally:*/ {
/*normal exit:*/{
__pyx_t_1 = (__pyx_v_chunk != NULL);
if (__pyx_t_1) {
/* … */
}
/* … */
__pyx_t_1 = (__pyx_v_chunk != NULL);
if (__pyx_t_1) {
/* … */
}
/* … */
__pyx_t_1 = (__pyx_v_chunk != NULL);
if (__pyx_t_1) {
/* … */
}
+07168: qwp_chunk_free(chunk)
qwp_chunk_free(__pyx_v_chunk);
/* … */
qwp_chunk_free(__pyx_v_chunk);
/* … */
qwp_chunk_free(__pyx_v_chunk);
+07169: chunk = NULL
__pyx_v_chunk = NULL;
/* … */
__pyx_v_chunk = NULL;
/* … */
__pyx_v_chunk = NULL;
+07170: dataframe_plan_release(&plan)
__pyx_f_7questdb_7_client_dataframe_plan_release((&__pyx_v_plan));
/* … */
__pyx_f_7questdb_7_client_dataframe_plan_release((&__pyx_v_plan));
/* … */
__pyx_f_7questdb_7_client_dataframe_plan_release((&__pyx_v_plan));
+07171: if b != NULL:
__pyx_t_1 = (__pyx_v_b != NULL);
if (__pyx_t_1) {
/* … */
}
goto __pyx_L13;
}
__pyx_L12_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
if ( unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__pyx_t_10 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_12 = __pyx_filename;
{
/* … */
__pyx_t_1 = (__pyx_v_b != NULL);
if (__pyx_t_1) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ErrRestore(__pyx_t_13, __pyx_t_14, __pyx_t_15);
__pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
__pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_12;
goto __pyx_L5_error;
}
__pyx_L9_continue: {
/* … */
__pyx_t_1 = (__pyx_v_b != NULL);
if (__pyx_t_1) {
/* … */
}
goto __pyx_L7_continue;
}
__pyx_L13:;
}
__pyx_L7_continue:;
}
}
+07172: qdb_pystr_buf_free(b)
qdb_pystr_buf_free(__pyx_v_b);
/* … */
qdb_pystr_buf_free(__pyx_v_b);
/* … */
qdb_pystr_buf_free(__pyx_v_b);
+07173: b = NULL
__pyx_v_b = NULL;
/* … */
__pyx_v_b = NULL;
/* … */
__pyx_v_b = NULL;
07174: finally:
+07175: _dataframe_count_row_path_emissions = False
/*finally:*/ {
/*normal exit:*/{
__pyx_v_7questdb_7_client__dataframe_count_row_path_emissions = 0;
goto __pyx_L6;
}
__pyx_L5_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_14, &__pyx_t_13);
if ( unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_17, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_17, &__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_13);
__pyx_t_11 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_12 = __pyx_filename;
{
__pyx_v_7questdb_7_client__dataframe_count_row_path_emissions = 0;
}
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_15, __pyx_t_14, __pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_ErrRestore(__pyx_t_18, __pyx_t_17, __pyx_t_16);
__pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0;
__pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_12;
goto __pyx_L1_error;
}
__pyx_L6:;
}
07176:
+07177: end_row_path_emissions = _dataframe_row_path_emissions
__pyx_v_end_row_path_emissions = __pyx_v_7questdb_7_client__dataframe_row_path_emissions;
07178: return {
+07179: 'iterations': iterations,
__pyx_t_2 = __Pyx_PyDict_NewPresized(9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7179, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_iterations); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7179, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_iterations, __pyx_t_3) < (0)) __PYX_ERR(0, 7179, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07180: 'row_count': row_count,
__pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7180, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_row_count, __pyx_t_3) < (0)) __PYX_ERR(0, 7179, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07181: 'col_count': col_count,
__pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_col_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7181, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_col_count, __pyx_t_3) < (0)) __PYX_ERR(0, 7179, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07182: 'logical_cells': row_count * col_count,
__pyx_t_3 = __Pyx_PyLong_FromSize_t((__pyx_v_row_count * __pyx_v_col_count)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7182, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_logical_cells, __pyx_t_3) < (0)) __PYX_ERR(0, 7179, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07183: 'rows_per_chunk': rows_per_chunk,
__pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_rows_per_chunk); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7183, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_rows_per_chunk, __pyx_t_3) < (0)) __PYX_ERR(0, 7179, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07184: 'populated_chunks': populated_chunks,
__pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_populated_chunks); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_populated_chunks, __pyx_t_3) < (0)) __PYX_ERR(0, 7179, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07185: 'populated_rows_total': populated_rows_total,
__pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_populated_rows_total); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7185, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_populated_rows_total, __pyx_t_3) < (0)) __PYX_ERR(0, 7179, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07186: 'last_populated_rows': populated_rows,
__pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_populated_rows); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7186, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_last_populated_rows, __pyx_t_3) < (0)) __PYX_ERR(0, 7179, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
07187: 'row_path_cell_emissions': (
+07188: end_row_path_emissions - start_row_path_emissions),
__pyx_t_3 = __Pyx_PyLong_From_uint64_t((__pyx_v_end_row_path_emissions - __pyx_v_start_row_path_emissions)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7188, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_row_path_cell_emissions, __pyx_t_3) < (0)) __PYX_ERR(0, 7179, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
07189: }
07190:
07191:
+07192: cdef object _POLARS = None
__Pyx_INCREF(Py_None); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS, Py_None); __Pyx_GIVEREF(Py_None);
+07193: cdef object _POLARS_DATAFRAME_T = None
__Pyx_INCREF(Py_None); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS_DATAFRAME_T); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS_DATAFRAME_T, Py_None); __Pyx_GIVEREF(Py_None);
+07194: cdef object _POLARS_LAZYFRAME_T = None
__Pyx_INCREF(Py_None); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS_LAZYFRAME_T); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS_LAZYFRAME_T, Py_None); __Pyx_GIVEREF(Py_None);
+07195: cdef object _POLARS_SERIES_T = None
__Pyx_INCREF(Py_None); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS_SERIES_T); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS_SERIES_T, Py_None); __Pyx_GIVEREF(Py_None);
07196:
07197: # Whether this polars reinterprets 8- and 16-bit integers (1.39+).
07198: # None until first asked. A plain module global, so tests can set it.
+07199: _POLARS_NARROW_REINTERPRET = None
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_POLARS_NARROW_REINTERPRET, Py_None) < (0)) __PYX_ERR(0, 7199, __pyx_L1_error)
07200:
07201:
+07202: cdef bint _polars_reinterprets_narrow_ints():
static int __pyx_f_7questdb_7_client__polars_reinterprets_narrow_ints(void) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_AddTraceback("questdb._client._polars_reinterprets_narrow_ints", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07203: """Whether `reinterpret` works on an 8- or 16-bit polars column.
07204:
07205: Probed once, by trying it, rather than read off the version string.
07206: A `LazyFrame` raises only when collected, so the call that builds
07207: the expression cannot tell. Any failure means "no": the exception
07208: class differs across polars versions. Two threads that both find
07209: the answer missing both probe and store the same value. Called only
07210: after `_try_import_polars()` has set `_POLARS`.
07211: """
07212: global _POLARS_NARROW_REINTERPRET
+07213: if _POLARS_NARROW_REINTERPRET is None:
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_POLARS_NARROW_REINTERPRET); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7213, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = (__pyx_t_1 == Py_None); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ }
+07214: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L1_error;
__pyx_L5_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
__pyx_L9_try_end:;
}
+07215: _POLARS.Series([0], dtype=_POLARS.UInt8).reinterpret(signed=True)
__pyx_t_8 = __pyx_v_7questdb_7_client__POLARS;
__Pyx_INCREF(__pyx_t_8);
__pyx_t_9 = PyList_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7215, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0);
if (__Pyx_PyList_SET_ITEM(__pyx_t_9, 0, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 7215, __pyx_L4_error);
__pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_UInt8); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 7215, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_11 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_9, __pyx_t_10};
#if CYTHON_VECTORCALL
__pyx_t_12 = __pyx_mstate_global->__pyx_tuple[4];
if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7215, __pyx_L4_error)
__Pyx_INCREF(__pyx_t_12);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_dtype};
__pyx_t_12 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7215, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_12);
}
#endif
__pyx_t_7 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_Series, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_12);
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7215, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_7);
}
__pyx_t_6 = __pyx_t_7;
__Pyx_INCREF(__pyx_t_6);
__pyx_t_11 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, Py_True};
#if CYTHON_VECTORCALL
__pyx_t_12 = __pyx_mstate_global->__pyx_tuple[14];
if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7215, __pyx_L4_error)
__Pyx_INCREF(__pyx_t_12);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_signed};
__pyx_t_12 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7215, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_12);
}
#endif
__pyx_t_1 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_reinterpret, __pyx_callargs+__pyx_t_11, (1-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_12);
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7215, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+07216: _POLARS_NARROW_REINTERPRET = True
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_POLARS_NARROW_REINTERPRET, Py_True) < (0)) __PYX_ERR(0, 7216, __pyx_L4_error)
+07217: except Exception:
__pyx_t_13 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_13) { __Pyx_AddTraceback("questdb._client._polars_reinterprets_narrow_ints", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_7, &__pyx_t_12) < 0) __PYX_ERR(0, 7217, __pyx_L6_except_error) __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_7); __Pyx_XGOTREF(__pyx_t_12);
+07218: _POLARS_NARROW_REINTERPRET = False
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_POLARS_NARROW_REINTERPRET, Py_False) < (0)) __PYX_ERR(0, 7218, __pyx_L6_except_error) __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; goto __pyx_L5_exception_handled; } goto __pyx_L6_except_error;
+07219: return _POLARS_NARROW_REINTERPRET
__Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_POLARS_NARROW_REINTERPRET); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7219, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7219, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; { __pyx_r = __pyx_t_2; } goto __pyx_L0;
07220:
07221:
+07222: cdef bint _try_import_polars():
static int __pyx_f_7questdb_7_client__try_import_polars(void) {
PyObject *__pyx_v_polars = NULL;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._try_import_polars", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_polars);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07223: global _POLARS, _POLARS_DATAFRAME_T, _POLARS_LAZYFRAME_T
07224: global _POLARS_SERIES_T
+07225: if _POLARS is not None:
__pyx_t_1 = (__pyx_v_7questdb_7_client__POLARS != Py_None);
if (__pyx_t_1) {
/* … */
}
+07226: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+07227: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L7_except_return:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L0;
__pyx_L9_try_end:;
}
+07228: import polars
__pyx_t_6 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_polars, 0, 0, NULL, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7228, __pyx_L4_error) __pyx_t_5 = __pyx_t_6; __Pyx_GOTREF(__pyx_t_5); __pyx_v_polars = __pyx_t_5; __pyx_t_5 = 0;
+07229: except ImportError:
__pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_ImportError)))); if (__pyx_t_7) { __Pyx_ErrRestore(0,0,0);
+07230: return False
{
__pyx_r = 0;
}
goto __pyx_L7_except_return;
}
goto __pyx_L6_except_error;
+07231: _POLARS_DATAFRAME_T = polars.DataFrame
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_polars, __pyx_mstate_global->__pyx_n_u_DataFrame); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7231, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS_DATAFRAME_T); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS_DATAFRAME_T, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0;
+07232: _POLARS_LAZYFRAME_T = polars.LazyFrame
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_polars, __pyx_mstate_global->__pyx_n_u_LazyFrame); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7232, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS_LAZYFRAME_T); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS_LAZYFRAME_T, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0;
+07233: _POLARS_SERIES_T = polars.Series
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_polars, __pyx_mstate_global->__pyx_n_u_Series); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7233, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS_SERIES_T); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS_SERIES_T, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0;
+07234: _POLARS = polars
__Pyx_INCREF(__pyx_v_polars); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS, __pyx_v_polars); __Pyx_GIVEREF(__pyx_v_polars);
+07235: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
07236:
07237:
+07238: cdef bint _is_polars_dataframe_or_lazy(object obj):
static int __pyx_f_7questdb_7_client__is_polars_dataframe_or_lazy(PyObject *__pyx_v_obj) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._is_polars_dataframe_or_lazy", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+07239: if not _try_import_polars():
__pyx_t_1 = __pyx_f_7questdb_7_client__try_import_polars(); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7239, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+07240: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+07241: return isinstance(obj, (_POLARS_DATAFRAME_T, _POLARS_LAZYFRAME_T))
__Pyx_INCREF(__pyx_v_7questdb_7_client__POLARS_DATAFRAME_T); __pyx_t_3 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T; __Pyx_INCREF(__pyx_v_7questdb_7_client__POLARS_LAZYFRAME_T); __pyx_t_4 = __pyx_v_7questdb_7_client__POLARS_LAZYFRAME_T; __pyx_t_1 = PyObject_IsInstance(__pyx_v_obj, __pyx_t_3); if (!__pyx_t_1) { } else { __pyx_t_2 = __pyx_t_1; goto __pyx_L4_bool_binop_done; } __pyx_t_1 = PyObject_IsInstance(__pyx_v_obj, __pyx_t_4); __pyx_t_2 = __pyx_t_1; __pyx_L4_bool_binop_done:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; { __pyx_r = __pyx_t_2; } goto __pyx_L0;
07242:
07243:
+07244: cdef object _polars_named_dtypes(object frame):
static PyObject *__pyx_f_7questdb_7_client__polars_named_dtypes(PyObject *__pyx_v_frame) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._polars_named_dtypes", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07245: """`(name, dtype)` for each column a polars DataFrame or Series
07246: exports, in order; None for any other object. A Series exports as a
07247: single column named after it. Call only after `_try_import_polars()`
07248: has returned True."""
+07249: if isinstance(frame, _POLARS_DATAFRAME_T):
__pyx_t_1 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7249, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ }
+07250: return list(frame.schema.items())
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7250, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __pyx_t_4; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_items, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7250, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_4 = __Pyx_PySequence_ListKeepNew(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7250, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_4; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_4 = 0; goto __pyx_L0;
+07251: if isinstance(frame, _POLARS_SERIES_T):
__pyx_t_4 = __pyx_v_7questdb_7_client__POLARS_SERIES_T; __Pyx_INCREF(__pyx_t_4); __pyx_t_2 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_4); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7251, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_2) { /* … */ }
+07252: return [(frame.name, frame.dtype)]
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7252, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7252, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7252, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_4); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4) != (0)) __PYX_ERR(0, 7252, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_1); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1) != (0)) __PYX_ERR(0, 7252, __pyx_L1_error); __pyx_t_4 = 0; __pyx_t_1 = 0; __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7252, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_3); if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_3) != (0)) __PYX_ERR(0, 7252, __pyx_L1_error); __pyx_t_3 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+07253: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
07254:
07255:
+07256: cdef void_int _reject_polars_object_columns(object frame) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__reject_polars_object_columns(PyObject *__pyx_v_frame) {
PyObject *__pyx_v_object_dtype = 0;
PyObject *__pyx_v_columns = 0;
PyObject *__pyx_v_name = 0;
PyObject *__pyx_v_dtype = 0;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_AddTraceback("questdb._client._reject_polars_object_columns", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_object_dtype);
__Pyx_XDECREF(__pyx_v_columns);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07257: """polars exports an ``Object`` column as ``fixed_size_binary(8)``
07258: holding in-process handles, which the server would store as BINARY
07259: blobs of raw memory addresses. Reject such a column of a polars
07260: DataFrame or Series before the Arrow export, mirroring the Rust
07261: polars API. The code is `ArrowUnsupportedColumnKind`, the one 5.0
07262: raises for these inputs. The same column reaching the client in any
07263: other shape is refused by its width, in `_refuse_fsb8_columns`."""
07264: cdef object object_dtype
07265: cdef object columns
07266: cdef object name
07267: cdef object dtype
+07268: if not _try_import_polars():
__pyx_t_1 = __pyx_f_7questdb_7_client__try_import_polars(); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7268, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+07269: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+07270: columns = _polars_named_dtypes(frame)
__pyx_t_3 = __pyx_f_7questdb_7_client__polars_named_dtypes(__pyx_v_frame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7270, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_columns = __pyx_t_3; __pyx_t_3 = 0;
+07271: if columns is None:
__pyx_t_2 = (__pyx_v_columns == Py_None);
if (__pyx_t_2) {
/* … */
}
+07272: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+07273: object_dtype = getattr(_POLARS, 'Object', None)
__pyx_t_3 = __pyx_v_7questdb_7_client__POLARS; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetAttr3(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Object, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_object_dtype = __pyx_t_4; __pyx_t_4 = 0;
+07274: if object_dtype is None:
__pyx_t_2 = (__pyx_v_object_dtype == Py_None);
if (__pyx_t_2) {
/* … */
}
+07275: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+07276: for name, dtype in columns:
if (likely(PyList_CheckExact(__pyx_v_columns)) || PyTuple_CheckExact(__pyx_v_columns)) { __pyx_t_4 = __pyx_v_columns; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; __pyx_t_6 = NULL; } else { __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_columns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7276, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7276, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_6)) { if (likely(PyList_CheckExact(__pyx_t_4))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7276, __pyx_L1_error) #endif if (__pyx_t_5 >= __pyx_temp) break; } __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_4, __pyx_t_5, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_5; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7276, __pyx_L1_error) #endif if (__pyx_t_5 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5)); #else __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5); #endif ++__pyx_t_5; } if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7276, __pyx_L1_error) } else { __pyx_t_3 = __pyx_t_6(__pyx_t_4); if (unlikely(!__pyx_t_3)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7276, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_3); if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 7276, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_7); __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_8); } else { __pyx_t_7 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7276, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7276, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_8); } #else __pyx_t_7 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7276, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7276, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7276, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_10 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_9); index = 0; __pyx_t_7 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_7); index = 1; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_8); if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < (0)) __PYX_ERR(0, 7276, __pyx_L1_error) __pyx_t_10 = NULL; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L9_unpacking_done; __pyx_L8_unpacking_failed:; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_10 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 7276, __pyx_L1_error) __pyx_L9_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_8); __pyx_t_8 = 0; /* … */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+07277: if dtype == object_dtype:
__pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_v_dtype, __pyx_v_object_dtype, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7277, __pyx_L1_error) if (unlikely(__pyx_t_2)) { /* … */ }
+07278: raise QuestDBError(
__pyx_t_8 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7278, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
+07279: QuestDBErrorCode.ArrowUnsupportedColumnKind,
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7279, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_ArrowUnsupportedColumnKind); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7279, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+07280: f'Bad column {name!r}: polars Object dtype is not '
__pyx_t_9 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7280, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_12[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_12[1] = __pyx_t_9; __pyx_t_12[2] = __pyx_mstate_global->__pyx_kp_u_polars_Object_dtype_is_not_supp; __pyx_t_13 = 121; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12[1]); #endif __pyx_t_14 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_14 |= __Pyx_PyUnicode_KIND_04(__pyx_t_12[1]); #endif __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_12, 3, __pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7280, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
07281: f'supported; it exports as handles to objects in this '
07282: f'process rather than as data. '
+07283: + _polars_object_remedy(name))
__pyx_t_9 = __pyx_f_7questdb_7_client__polars_object_remedy(__pyx_v_name); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7283, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_16 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_t_15, __pyx_t_9); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 7283, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_17 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_8); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_17 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_11, __pyx_t_16}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_17, (3-__pyx_t_17) | (__pyx_t_17*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7278, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 7278, __pyx_L1_error)
+07284: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
07285:
07286:
+07287: cdef object _arrow_source_column_names(object frame):
static PyObject *__pyx_f_7questdb_7_client__arrow_source_column_names(PyObject *__pyx_v_frame) {
PyObject *__pyx_v_names = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client._arrow_source_column_names", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_names);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07288: """The names `frame`'s Arrow export gives its columns, as the Python
07289: objects they come from: a pandas DataFrame's column labels, plus the
07290: level names of an index other than a RangeIndex; a polars
07291: DataFrame's columns; a polars Series' own name; the schema names of a
07292: pyarrow Table, RecordBatch or RecordBatchReader. None for any other
07293: type."""
07294: cdef list names
+07295: if _is_pandas_dataframe_object(frame):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_frame); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7295, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+07296: names = frame.columns.tolist()
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7296, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __pyx_t_4; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_tolist, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7296, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } if (!(likely(PyList_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_2))) __PYX_ERR(0, 7296, __pyx_L1_error) __pyx_v_names = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
07297: # pyarrow's pandas conversion writes each level of an index
07298: # other than a RangeIndex as a column. The level's own name is
07299: # what the NUL-name check needs; `_pandas_export_dtypes` gives
07300: # the same levels the names the export writes them under.
+07301: _dataframe_may_import_deps()
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7301, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+07302: if not isinstance(frame.index, _PANDAS.RangeIndex):
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7302, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_RangeIndex); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7302, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyObject_IsInstance(__pyx_t_2, __pyx_t_4); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 7302, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = (!__pyx_t_1); if (__pyx_t_6) { /* … */ }
+07303: names.extend(frame.index.names)
if (unlikely(__pyx_v_names == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "extend");
__PYX_ERR(0, 7303, __pyx_L1_error)
}
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_index); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7303, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_names); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7303, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_7 = __Pyx_PyList_Extend(__pyx_v_names, __pyx_t_2); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 7303, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+07304: return names
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_names);
__pyx_r = __pyx_v_names;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+07305: if _try_import_polars():
__pyx_t_6 = __pyx_f_7questdb_7_client__try_import_polars(); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7305, __pyx_L1_error) if (__pyx_t_6) { /* … */ }
+07306: if isinstance(frame, _POLARS_DATAFRAME_T):
__pyx_t_2 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_6 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_2); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 7306, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_6) {
/* … */
}
+07307: return frame.columns
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7307, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+07308: if isinstance(frame, _POLARS_SERIES_T):
__pyx_t_2 = __pyx_v_7questdb_7_client__POLARS_SERIES_T;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_6 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_2); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 7308, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_6) {
/* … */
}
+07309: return [frame.name]
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7309, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7309, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 7309, __pyx_L1_error); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_4; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_4 = 0; goto __pyx_L0;
+07310: if _PYARROW is None and sys.modules.get('pyarrow') is None:
__pyx_t_1 = (__pyx_v_7questdb_7_client__PYARROW == Py_None);
if (__pyx_t_1) {
} else {
__pyx_t_6 = __pyx_t_1;
goto __pyx_L9_bool_binop_done;
}
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_sys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7310, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_modules); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7310, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_2 = __pyx_t_8;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_n_u_pyarrow};
__pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7310, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__pyx_t_1 = (__pyx_t_4 == Py_None);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_6 = __pyx_t_1;
__pyx_L9_bool_binop_done:;
if (__pyx_t_6) {
/* … */
}
07311: # A pyarrow object exists only once pyarrow is imported.
+07312: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+07313: _dataframe_require_pyarrow()
__pyx_t_4 = __pyx_f_7questdb_7_client__dataframe_require_pyarrow(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+07314: if isinstance(frame, (_PYARROW.Table, _PYARROW.RecordBatch,
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7314, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_RecordBatch); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7314, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); /* … */ __pyx_t_1 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_4); if (!__pyx_t_1) { } else { __pyx_t_6 = __pyx_t_1; goto __pyx_L12_bool_binop_done; } __pyx_t_1 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_8); if (!__pyx_t_1) { } else { __pyx_t_6 = __pyx_t_1; goto __pyx_L12_bool_binop_done; } /* … */ if (__pyx_t_6) { /* … */ }
+07315: _PYARROW.RecordBatchReader)):
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_RecordBatchReader); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7315, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); /* … */ __pyx_t_1 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_2); __pyx_t_6 = __pyx_t_1; __pyx_L12_bool_binop_done:; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+07316: return frame.schema.names
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_names); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_8; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_8 = 0; goto __pyx_L0;
+07317: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
07318:
07319:
+07320: cdef object _pandas_export_dtypes(object df, object dtypes):
static PyObject *__pyx_f_7questdb_7_client__pandas_export_dtypes(PyObject *__pyx_v_df, PyObject *__pyx_v_dtypes) {
PyObject *__pyx_v_index = 0;
PyObject *__pyx_v_name = 0;
PyObject *__pyx_v_taken = 0;
PyObject *__pyx_v_names = 0;
PyObject *__pyx_v_level_dtypes = 0;
Py_ssize_t __pyx_v_i;
Py_ssize_t __pyx_v_j;
PyObject *__pyx_9genexpr20__pyx_v_label = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_AddTraceback("questdb._client._pandas_export_dtypes", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_index);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_XDECREF(__pyx_v_taken);
__Pyx_XDECREF(__pyx_v_names);
__Pyx_XDECREF(__pyx_v_level_dtypes);
__Pyx_XDECREF(__pyx_9genexpr20__pyx_v_label);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07321: """`dtypes`, the frame's `df.dtypes`, extended with the dtype of each
07322: index level the frame's Arrow export writes as a column.
07323:
07324: pyarrow's pandas conversion writes every level of an index other
07325: than a RangeIndex as a column. It names the column after the level,
07326: converted to a string, unless the level has no name or its name is
07327: already taken; then it takes the first free `__index_level_{j}__`,
07328: counting from the level's position. A check that judges exported
07329: columns by their pandas dtype needs those columns too, or an index
07330: level escapes it. None when `dtypes` is None.
07331:
07332: The rule is the one current pyarrow applies. Older pyarrow does not
07333: skip a `__index_level_{j}__` that a data column already holds, so the
07334: two disagree only on a frame with a data column of that name: the
07335: level is then refused under another name, or its claim is not
07336: found. `_arrow_source_column_names` lists the same levels under
07337: their own names, which is what the NUL-name check reads."""
07338: cdef object index
07339: cdef object name
07340: cdef list taken
+07341: cdef list names = []
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7341, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_names = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
07342: cdef list level_dtypes
07343: cdef Py_ssize_t i
07344: cdef Py_ssize_t j
+07345: if dtypes is None:
__pyx_t_2 = (__pyx_v_dtypes == Py_None);
if (__pyx_t_2) {
/* … */
}
+07346: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+07347: index = df.index
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_index); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7347, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_index = __pyx_t_1; __pyx_t_1 = 0;
+07348: if isinstance(index, _PANDAS.RangeIndex):
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_RangeIndex); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7348, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_IsInstance(__pyx_v_index, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7348, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ }
+07349: return dtypes
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_dtypes);
__pyx_r = __pyx_v_dtypes;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
07350: # Each level's dtype, read from the index's metadata rather than
07351: # from its materialized values.
+07352: if isinstance(index, _PANDAS.MultiIndex):
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_MultiIndex); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7352, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_IsInstance(__pyx_v_index, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7352, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ goto __pyx_L5; }
+07353: level_dtypes = list(index.dtypes)
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7353, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PySequence_ListKeepNew(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7353, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_level_dtypes = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
07354: else:
+07355: level_dtypes = [index.dtype]
/*else*/ {
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7355, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7355, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_GIVEREF(__pyx_t_3);
if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_3) != (0)) __PYX_ERR(0, 7355, __pyx_L1_error);
__pyx_t_3 = 0;
__pyx_v_level_dtypes = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
}
__pyx_L5:;
+07356: taken = [_arrow_export_name(label) for label in df.columns]
{ /* enter inner scope */
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7356, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7356, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_3);
if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
__pyx_t_4 = __pyx_t_3; __Pyx_INCREF(__pyx_t_4);
__pyx_t_5 = 0;
__pyx_t_6 = NULL;
} else {
__pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7356, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_6 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7356, __pyx_L8_error)
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
for (;;) {
if (likely(!__pyx_t_6)) {
if (likely(PyList_CheckExact(__pyx_t_4))) {
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7356, __pyx_L8_error)
#endif
if (__pyx_t_5 >= __pyx_temp) break;
}
__pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_4, __pyx_t_5, __Pyx_ReferenceSharing_OwnStrongReference);
++__pyx_t_5;
} else {
{
Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7356, __pyx_L8_error)
#endif
if (__pyx_t_5 >= __pyx_temp) break;
}
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
__pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5));
#else
__pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5);
#endif
++__pyx_t_5;
}
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7356, __pyx_L8_error)
} else {
__pyx_t_3 = __pyx_t_6(__pyx_t_4);
if (unlikely(!__pyx_t_3)) {
PyObject* exc_type = PyErr_Occurred();
if (exc_type) {
if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7356, __pyx_L8_error)
PyErr_Clear();
}
break;
}
}
__Pyx_GOTREF(__pyx_t_3);
__Pyx_XDECREF_SET(__pyx_9genexpr20__pyx_v_label, __pyx_t_3);
__pyx_t_3 = 0;
__pyx_t_3 = __pyx_f_7questdb_7_client__arrow_export_name(__pyx_9genexpr20__pyx_v_label); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7356, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_GIVEREF(__pyx_t_3);
if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_t_1, __pyx_t_3))) __PYX_ERR(0, 7356, __pyx_L8_error)
__pyx_t_3 = 0;
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_9genexpr20__pyx_v_label); __pyx_9genexpr20__pyx_v_label = 0;
goto __pyx_L12_exit_scope;
__pyx_L8_error:;
__Pyx_XDECREF(__pyx_9genexpr20__pyx_v_label); __pyx_9genexpr20__pyx_v_label = 0;
goto __pyx_L1_error;
__pyx_L12_exit_scope:;
} /* exit inner scope */
__pyx_v_taken = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
+07357: for i, name in enumerate(index.names):
__pyx_t_5 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_mstate_global->__pyx_n_u_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7357, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4); __pyx_t_7 = 0; __pyx_t_6 = NULL; } else { __pyx_t_7 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7357, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7357, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { if (likely(!__pyx_t_6)) { if (likely(PyList_CheckExact(__pyx_t_4))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7357, __pyx_L1_error) #endif if (__pyx_t_7 >= __pyx_temp) break; } __pyx_t_1 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_4, __pyx_t_7, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_7; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7357, __pyx_L1_error) #endif if (__pyx_t_7 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_7)); #else __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_7); #endif ++__pyx_t_7; } if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7357, __pyx_L1_error) } else { __pyx_t_1 = __pyx_t_6(__pyx_t_4); if (unlikely(!__pyx_t_1)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7357, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_1); __pyx_t_1 = 0; __pyx_v_i = __pyx_t_5; __pyx_t_5 = (__pyx_t_5 + 1); /* … */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
07358: # pyarrow compares the level's own name with the converted
07359: # names, as here.
+07360: if name is None or name in taken:
__pyx_t_8 = (__pyx_v_name == Py_None);
if (!__pyx_t_8) {
} else {
__pyx_t_2 = __pyx_t_8;
goto __pyx_L16_bool_binop_done;
}
__pyx_t_8 = (__Pyx_PySequence_ContainsTF(__pyx_v_name, __pyx_v_taken, Py_EQ)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 7360, __pyx_L1_error)
__pyx_t_2 = __pyx_t_8;
__pyx_L16_bool_binop_done:;
if (__pyx_t_2) {
/* … */
goto __pyx_L15;
}
+07361: j = i
__pyx_v_j = __pyx_v_i;
+07362: while f'__index_level_{j}__' in taken:
while (1) {
__pyx_t_1 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_j, 0, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7362, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_9[0] = __pyx_mstate_global->__pyx_n_u_index_level;
__pyx_t_9[1] = __pyx_t_1;
__pyx_t_9[2] = __pyx_mstate_global->__pyx_n_u__31;
__pyx_t_10 = 16;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9[1]);
#endif
__pyx_t_11 = 0;
__pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_9, 3, __pyx_t_10, __pyx_t_11);
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7362, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_3, __pyx_v_taken, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7362, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (!__pyx_t_2) break;
+07363: j += 1
__pyx_v_j = (__pyx_v_j + 1);
}
+07364: name = f'__index_level_{j}__'
__pyx_t_3 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_j, 0, ' ', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7364, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_9[0] = __pyx_mstate_global->__pyx_n_u_index_level; __pyx_t_9[1] = __pyx_t_3; __pyx_t_9[2] = __pyx_mstate_global->__pyx_n_u__31; __pyx_t_10 = 16; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9[1]); #endif __pyx_t_11 = 0; __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_9, 3, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7364, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1); __pyx_t_1 = 0;
07365: else:
+07366: name = _arrow_export_name(name)
/*else*/ {
__pyx_t_1 = __pyx_f_7questdb_7_client__arrow_export_name(__pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7366, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
__pyx_t_1 = 0;
}
__pyx_L15:;
+07367: taken.append(name)
__pyx_t_12 = __Pyx_PyList_Append(__pyx_v_taken, __pyx_v_name); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 7367, __pyx_L1_error)
+07368: names.append(name)
__pyx_t_12 = __Pyx_PyList_Append(__pyx_v_names, __pyx_v_name); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 7368, __pyx_L1_error)
+07369: return _PANDAS.concat([
__pyx_t_1 = __pyx_v_7questdb_7_client__PANDAS; __Pyx_INCREF(__pyx_t_1); /* … */ __pyx_t_15 = PyList_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7369, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_INCREF(__pyx_v_dtypes); __Pyx_GIVEREF(__pyx_v_dtypes); if (__Pyx_PyList_SET_ITEM(__pyx_t_15, 0, __pyx_v_dtypes) != (0)) __PYX_ERR(0, 7369, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_3); if (__Pyx_PyList_SET_ITEM(__pyx_t_15, 1, __pyx_t_3) != (0)) __PYX_ERR(0, 7369, __pyx_L1_error); __pyx_t_3 = 0; __pyx_t_14 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_15}; __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_concat, __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7369, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_4; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_4 = 0; goto __pyx_L0;
+07370: dtypes, _PANDAS.Series(level_dtypes, index=names, dtype=object)])
__pyx_t_13 = __pyx_v_7questdb_7_client__PANDAS; __Pyx_INCREF(__pyx_t_13); __pyx_t_14 = 0; { PyObject *__pyx_callargs[4] = {__pyx_t_13, __pyx_v_level_dtypes, __pyx_v_names, __pyx_builtin_object}; #if CYTHON_VECTORCALL __pyx_t_15 = __pyx_mstate_global->__pyx_tuple[30]; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7370, __pyx_L1_error) __Pyx_INCREF(__pyx_t_15); #else { PyObject *__pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_index, __pyx_mstate_global->__pyx_n_u_dtype}; __pyx_t_15 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7370, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); } #endif __pyx_t_3 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_Series, __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_15); __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7370, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } /* … */ { PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_index, __pyx_mstate_global->__pyx_n_u_dtype}; __pyx_mstate_global->__pyx_tuple[30] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[30])) __PYX_ERR(0, 7370, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[30]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[30]);
07371:
07372:
+07373: cdef object _arrow_export_name(object label):
static PyObject *__pyx_f_7questdb_7_client__arrow_export_name(PyObject *__pyx_v_label) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._arrow_export_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07374: """The column name pyarrow's pandas conversion gives `label`.
07375:
07376: `str()` matches pyarrow for every label but a tuple with parts that
07377: are not strings. A tuple's name holds parentheses and quotes, which
07378: no QuestDB column name may, so such a frame is refused whatever name
07379: this returns."""
+07380: if isinstance(label, str):
__pyx_t_1 = PyUnicode_Check(__pyx_v_label);
if (__pyx_t_1) {
/* … */
}
+07381: return label
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_label);
__pyx_r = __pyx_v_label;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+07382: if isinstance(label, bytes):
__pyx_t_1 = PyBytes_Check(__pyx_v_label);
if (__pyx_t_1) {
/* … */
}
+07383: return label.decode('utf-8')
__pyx_t_3 = __pyx_v_label;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_utf_8};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_decode, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7383, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_2;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_2 = 0;
goto __pyx_L0;
+07384: return str(label)
__pyx_t_2 = __Pyx_PyObject_Unicode(__pyx_v_label); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7384, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
07385:
07386:
+07387: cdef object _polars_struct_field_with_nul(object dtype):
static PyObject *__pyx_f_7questdb_7_client__polars_struct_field_with_nul(PyObject *__pyx_v_dtype) {
PyObject *__pyx_v_field = 0;
PyObject *__pyx_v_found = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_AddTraceback("questdb._client._polars_struct_field_with_nul", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_field);
__Pyx_XDECREF(__pyx_v_found);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07388: """The first struct field name inside polars `dtype`, at any depth,
07389: that holds a NUL; None when there is none."""
07390: cdef object field
07391: cdef object found
+07392: if isinstance(dtype, _POLARS.Struct):
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_Struct); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7392, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7392, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ goto __pyx_L3; }
+07393: for field in dtype.fields:
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_fields); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7393, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7393, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7393, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { if (likely(!__pyx_t_5)) { if (likely(PyList_CheckExact(__pyx_t_3))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7393, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } __pyx_t_1 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_3, __pyx_t_4, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_4; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7393, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4)); #else __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4); #endif ++__pyx_t_4; } if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7393, __pyx_L1_error) } else { __pyx_t_1 = __pyx_t_5(__pyx_t_3); if (unlikely(!__pyx_t_1)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7393, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_field, __pyx_t_1); __pyx_t_1 = 0; /* … */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07394: if '\0' in field.name:
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7394, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_mstate_global->__pyx_kp_u__32, __pyx_t_1, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7394, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ }
+07395: return field.name
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7395, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L0;
+07396: found = _polars_struct_field_with_nul(field.dtype)
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7396, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = __pyx_f_7questdb_7_client__polars_struct_field_with_nul(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7396, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF_SET(__pyx_v_found, __pyx_t_6); __pyx_t_6 = 0;
+07397: if found is not None:
__pyx_t_2 = (__pyx_v_found != Py_None);
if (__pyx_t_2) {
/* … */
}
+07398: return found
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_found);
__pyx_r = __pyx_v_found;
}
__Pyx_XDECREF(__pyx_temp);
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L0;
+07399: elif isinstance(dtype, (_POLARS.List, _POLARS.Array)):
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_List); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7399, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_Array); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7399, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_3); if (!__pyx_t_7) { } else { __pyx_t_2 = __pyx_t_7; goto __pyx_L9_bool_binop_done; } __pyx_t_7 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_6); __pyx_t_2 = __pyx_t_7; __pyx_L9_bool_binop_done:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_2) { /* … */ } __pyx_L3:;
+07400: return _polars_struct_field_with_nul(dtype.inner)
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_inner); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7400, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = __pyx_f_7questdb_7_client__polars_struct_field_with_nul(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7400, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_6; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_6 = 0; goto __pyx_L0;
+07401: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
07402:
07403:
+07404: cdef void_int _reject_nul_column_names(object frame) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__reject_nul_column_names(PyObject *__pyx_v_frame) {
PyObject *__pyx_v_names = 0;
PyObject *__pyx_v_name = 0;
PyObject *__pyx_v_dtype = 0;
PyObject *__pyx_v_dtypes = 0;
PyObject *__pyx_v_field = 0;
Py_ssize_t __pyx_v_i;
struct qdb_pystr_buf *__pyx_v_b;
struct line_sender_column_name __pyx_v_c_name;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_21);
__Pyx_XDECREF(__pyx_t_22);
__Pyx_XDECREF(__pyx_t_23);
__Pyx_XDECREF(__pyx_t_24);
__Pyx_XDECREF(__pyx_t_27);
__Pyx_AddTraceback("questdb._client._reject_nul_column_names", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_names);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_XDECREF(__pyx_v_dtypes);
__Pyx_XDECREF(__pyx_v_field);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07405: """The Arrow C Data Interface carries each name as a NUL-terminated
07406: string. pyarrow, and pandas through it, cut a name holding a NUL at
07407: the NUL on export, so its column would land under the shorter name.
07408: polars panics on such a name, struct field names included, and the
07409: process aborts, whether the name belongs to a DataFrame column or to
07410: a Series. The names are checked here, before the export: a column
07411: name is refused with the error `row()` raises for it, and a polars
07412: struct field name with a BadDataFrame error."""
+07413: cdef object names = _arrow_source_column_names(frame)
__pyx_t_1 = __pyx_f_7questdb_7_client__arrow_source_column_names(__pyx_v_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7413, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_names = __pyx_t_1; __pyx_t_1 = 0;
07414: cdef object name
07415: cdef object dtype
07416: cdef object dtypes
07417: cdef object field
07418: cdef Py_ssize_t i
07419: cdef qdb_pystr_buf* b
07420: cdef line_sender_column_name c_name
+07421: if names is None:
__pyx_t_2 = (__pyx_v_names == Py_None);
if (__pyx_t_2) {
/* … */
}
+07422: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+07423: for name in names:
if (likely(PyList_CheckExact(__pyx_v_names)) || PyTuple_CheckExact(__pyx_v_names)) { __pyx_t_1 = __pyx_v_names; __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = 0; __pyx_t_4 = NULL; } else { __pyx_t_3 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7423, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7423, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_4)) { if (likely(PyList_CheckExact(__pyx_t_1))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7423, __pyx_L1_error) #endif if (__pyx_t_3 >= __pyx_temp) break; } __pyx_t_5 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_1, __pyx_t_3, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_3; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7423, __pyx_L1_error) #endif if (__pyx_t_3 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3)); #else __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_3); #endif ++__pyx_t_3; } if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7423, __pyx_L1_error) } else { __pyx_t_5 = __pyx_t_4(__pyx_t_1); if (unlikely(!__pyx_t_5)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7423, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_5); __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_5); __pyx_t_5 = 0; /* … */ } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+07424: if isinstance(name, bytes):
__pyx_t_2 = PyBytes_Check(__pyx_v_name);
if (__pyx_t_2) {
/* … */
}
07425: # pyarrow writes a bytes label decoded as UTF-8.
+07426: name = name.decode('utf-8', 'replace')
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_mstate_global->__pyx_n_u_decode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7426, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[5], NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7426, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_6); __pyx_t_6 = 0;
+07427: if isinstance(name, str) and '\0' in name:
__pyx_t_7 = PyUnicode_Check(__pyx_v_name); if (__pyx_t_7) { } else { __pyx_t_2 = __pyx_t_7; goto __pyx_L8_bool_binop_done; } __pyx_t_7 = (__Pyx_PySequence_ContainsTF(__pyx_mstate_global->__pyx_kp_u__32, __pyx_v_name, Py_EQ)); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 7427, __pyx_L1_error) __pyx_t_2 = __pyx_t_7; __pyx_L8_bool_binop_done:; if (__pyx_t_2) { /* … */ }
+07428: b = qdb_pystr_buf_new()
__pyx_v_b = qdb_pystr_buf_new();
+07429: try:
/*try:*/ {
07430: # Raises: a column name can't contain '\0'.
+07431: str_to_column_name(b, str(name), &c_name)
__pyx_t_6 = __Pyx_PyObject_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7431, __pyx_L13_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_v_b, ((PyObject*)__pyx_t_6), (&__pyx_v_c_name)); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7431, __pyx_L13_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; }
07432: finally:
+07433: qdb_pystr_buf_free(b)
/*finally:*/ {
/*normal exit:*/{
qdb_pystr_buf_free(__pyx_v_b);
goto __pyx_L14;
}
__pyx_L13_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__pyx_t_9 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_11 = __pyx_filename;
{
qdb_pystr_buf_free(__pyx_v_b);
}
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ErrRestore(__pyx_t_12, __pyx_t_13, __pyx_t_14);
__pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
__pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_11;
goto __pyx_L1_error;
}
__pyx_L14:;
}
+07434: if _POLARS is not None and isinstance(
__pyx_t_7 = (__pyx_v_7questdb_7_client__POLARS != Py_None);
if (__pyx_t_7) {
} else {
__pyx_t_2 = __pyx_t_7;
goto __pyx_L21_bool_binop_done;
}
/* … */
if (__pyx_t_2) {
/* … */
}
+07435: frame, (_POLARS_DATAFRAME_T, _POLARS_SERIES_T)):
__Pyx_INCREF(__pyx_v_7questdb_7_client__POLARS_DATAFRAME_T); __pyx_t_1 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T; __Pyx_INCREF(__pyx_v_7questdb_7_client__POLARS_SERIES_T); __pyx_t_6 = __pyx_v_7questdb_7_client__POLARS_SERIES_T; /* … */ __pyx_t_18 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_1); if (!__pyx_t_18) { } else { __pyx_t_7 = __pyx_t_18; goto __pyx_L23_bool_binop_done; } /* … */ __pyx_t_18 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_6); __pyx_t_7 = __pyx_t_18; __pyx_L23_bool_binop_done:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = __pyx_t_7; __pyx_L21_bool_binop_done:;
07436: # `dtypes` is cheap to read, and `is_nested()` leaves the walk
07437: # to the rare nested column. `names` is in the same order:
07438: # `frame.columns` for a DataFrame, the Series' own name for a
07439: # Series.
+07440: if isinstance(frame, _POLARS_DATAFRAME_T):
__pyx_t_1 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_2 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7440, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (__pyx_t_2) {
/* … */
goto __pyx_L25;
}
+07441: dtypes = frame.dtypes
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7441, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_dtypes = __pyx_t_1; __pyx_t_1 = 0;
07442: else:
+07443: dtypes = [frame.dtype]
/*else*/ {
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7443, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_6 = PyList_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7443, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_GIVEREF(__pyx_t_1);
if (__Pyx_PyList_SET_ITEM(__pyx_t_6, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 7443, __pyx_L1_error);
__pyx_t_1 = 0;
__pyx_v_dtypes = __pyx_t_6;
__pyx_t_6 = 0;
}
__pyx_L25:;
+07444: for i, dtype in enumerate(dtypes):
__pyx_t_3 = 0;
if (likely(PyList_CheckExact(__pyx_v_dtypes)) || PyTuple_CheckExact(__pyx_v_dtypes)) {
__pyx_t_6 = __pyx_v_dtypes; __Pyx_INCREF(__pyx_t_6);
__pyx_t_19 = 0;
__pyx_t_4 = NULL;
} else {
__pyx_t_19 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_v_dtypes); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7444, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7444, __pyx_L1_error)
}
for (;;) {
if (likely(!__pyx_t_4)) {
if (likely(PyList_CheckExact(__pyx_t_6))) {
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_6);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7444, __pyx_L1_error)
#endif
if (__pyx_t_19 >= __pyx_temp) break;
}
__pyx_t_1 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_6, __pyx_t_19, __Pyx_ReferenceSharing_OwnStrongReference);
++__pyx_t_19;
} else {
{
Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_6);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7444, __pyx_L1_error)
#endif
if (__pyx_t_19 >= __pyx_temp) break;
}
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
__pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_19));
#else
__pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_6, __pyx_t_19);
#endif
++__pyx_t_19;
}
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7444, __pyx_L1_error)
} else {
__pyx_t_1 = __pyx_t_4(__pyx_t_6);
if (unlikely(!__pyx_t_1)) {
PyObject* exc_type = PyErr_Occurred();
if (exc_type) {
if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7444, __pyx_L1_error)
PyErr_Clear();
}
break;
}
}
__Pyx_GOTREF(__pyx_t_1);
__Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_1);
__pyx_t_1 = 0;
__pyx_v_i = __pyx_t_3;
__pyx_t_3 = (__pyx_t_3 + 1);
/* … */
__pyx_L26_continue:;
}
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+07445: if not dtype.is_nested():
__pyx_t_5 = __pyx_v_dtype;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_20 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_nested, __pyx_callargs+__pyx_t_20, (1-__pyx_t_20) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7445, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7445, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_7 = (!__pyx_t_2);
if (__pyx_t_7) {
/* … */
}
+07446: continue
goto __pyx_L26_continue;
+07447: field = _polars_struct_field_with_nul(dtype)
__pyx_t_1 = __pyx_f_7questdb_7_client__polars_struct_field_with_nul(__pyx_v_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7447, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_field, __pyx_t_1); __pyx_t_1 = 0;
+07448: if field is not None:
__pyx_t_7 = (__pyx_v_field != Py_None);
if (unlikely(__pyx_t_7)) {
/* … */
}
+07449: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 7449, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_21);
+07450: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 7450, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_22); __pyx_t_23 = __Pyx_PyObject_GetAttrStr(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 7450, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_23); __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
+07451: f'Bad column {names[i]!r}: struct field name '
__pyx_t_22 = __Pyx_GetItemInt(__pyx_v_names, __pyx_v_i, Py_ssize_t, 1, PyLong_FromSsize_t, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 7451, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_22); __pyx_t_24 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_22), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 7451, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_24); __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0; /* … */ __pyx_t_26 = 92; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_26 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_25[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_25[3]); #endif __pyx_t_10 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_10 |= __Pyx_PyUnicode_KIND_04(__pyx_t_25[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_25[3]); #endif __pyx_t_27 = __Pyx_PyUnicode_Join(__pyx_t_25, 5, __pyx_t_26, __pyx_t_10); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 7451, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_27); __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0; __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0; __pyx_t_20 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_21))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_21); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_21); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_21, __pyx__function); __pyx_t_20 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_23, __pyx_t_27}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_21, __pyx_callargs+__pyx_t_20, (3-__pyx_t_20) | (__pyx_t_20*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0; __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0; __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7449, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 7449, __pyx_L1_error)
+07452: f"{field!r} contains a NUL character ('\\0'), which "
__pyx_t_22 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_field), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 7452, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_22); __pyx_t_25[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column; __pyx_t_25[1] = __pyx_t_24; __pyx_t_25[2] = __pyx_mstate_global->__pyx_kp_u_struct_field_name; __pyx_t_25[3] = __pyx_t_22; __pyx_t_25[4] = __pyx_mstate_global->__pyx_kp_u_contains_a_NUL_character_0_whic;
07453: f'polars cannot export.')
+07454: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
07455:
07456:
07457:
07458:
+07459: cdef void_int _capsule_consume_stream(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__capsule_consume_stream(struct qwp_direct_sender *__pyx_v_conn, PyObject *__pyx_v_stream_owner, struct line_sender_table_name __pyx_v_c_table_name, struct line_sender_column_name *__pyx_v_c_ts_column_ptr, int __pyx_v_at_scalar_set, int64_t __pyx_v_at_scalar_nanos, struct ArrowSchema *__pyx_v_c_schema, struct qwp_arrow_override const *__pyx_v_c_overrides, size_t __pyx_v_c_overrides_len, int *__pyx_v_any_flushed, size_t *__pyx_v_deferred_since_sync, int *__pyx_v_may_have_committed_prefix, PyObject *__pyx_v_binary_names, PyObject *__pyx_v_unlabelled) {
PyObject *__pyx_v_stream_capsule = 0;
struct ArrowArrayStream *__pyx_v_stream;
struct ArrowArray __pyx_v_batch;
int __pyx_v_rc;
char const *__pyx_v_stream_err;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_AddTraceback("questdb._client._capsule_consume_stream", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_stream_capsule);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07460: qwp_direct_sender* conn,
07461: object stream_owner,
07462: line_sender_table_name c_table_name,
07463: line_sender_column_name* c_ts_column_ptr,
07464: bint at_scalar_set,
07465: int64_t at_scalar_nanos,
07466: ArrowSchema* c_schema,
07467: const qwp_arrow_override* c_overrides,
07468: size_t c_overrides_len,
07469: bint* any_flushed,
07470: size_t* deferred_since_sync,
07471: bint* may_have_committed_prefix,
07472: object binary_names,
07473: object unlabelled) except -1:
07474: # `c_schema` is in/out and owned by the caller: zero-init on first
07475: # call (this function populates it via get_schema), reused as-is on
07476: # subsequent calls (Arrow C Data Interface guarantees slices of the
07477: # same source share schema), and released by the caller.
+07478: cdef object stream_capsule = stream_owner.__arrow_c_stream__()
__pyx_t_2 = __pyx_v_stream_owner; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_arrow_c_stream_2, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7478, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_stream_capsule = __pyx_t_1; __pyx_t_1 = 0;
+07479: if not PyCapsule_IsValid(stream_capsule, b'arrow_array_stream'):
__pyx_t_4 = (!PyCapsule_IsValid(__pyx_v_stream_capsule, __pyx_k_arrow_array_stream));
if (unlikely(__pyx_t_4)) {
/* … */
}
+07480: raise TypeError(
__pyx_t_2 = NULL;
__pyx_t_3 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_arrow_c_stream___did_not_retur};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7480, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 7480, __pyx_L1_error)
07481: '__arrow_c_stream__ did not return a valid arrow_array_stream '
07482: 'PyCapsule.')
+07483: cdef ArrowArrayStream* stream = <ArrowArrayStream*>PyCapsule_GetPointer(
__pyx_t_5 = PyCapsule_GetPointer(__pyx_v_stream_capsule, __pyx_k_arrow_array_stream); if (unlikely(__pyx_t_5 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 7483, __pyx_L1_error) __pyx_v_stream = ((struct ArrowArrayStream *)__pyx_t_5);
07484: stream_capsule, b'arrow_array_stream')
07485: cdef ArrowArray batch
07486: cdef int rc
07487: cdef const char* stream_err
07488:
+07489: if (stream == NULL or stream.get_schema == NULL or
__pyx_t_6 = (__pyx_v_stream == NULL);
if (!__pyx_t_6) {
} else {
__pyx_t_4 = __pyx_t_6;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_6 = (__pyx_v_stream->get_schema == NULL);
if (!__pyx_t_6) {
} else {
__pyx_t_4 = __pyx_t_6;
goto __pyx_L5_bool_binop_done;
}
/* … */
if (unlikely(__pyx_t_4)) {
/* … */
}
+07490: stream.get_next == NULL or stream.get_last_error == NULL):
__pyx_t_6 = (__pyx_v_stream->get_next == NULL);
if (!__pyx_t_6) {
} else {
__pyx_t_4 = __pyx_t_6;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_6 = (__pyx_v_stream->get_last_error == NULL);
__pyx_t_4 = __pyx_t_6;
__pyx_L5_bool_binop_done:;
+07491: raise TypeError(
__pyx_t_2 = NULL;
__pyx_t_3 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_arrow_c_stream___returned_a_ma};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7491, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 7491, __pyx_L1_error)
07492: '__arrow_c_stream__ returned a malformed arrow_array_stream '
07493: 'PyCapsule with NULL callbacks.')
07494:
+07495: if c_schema.release == NULL:
__pyx_t_4 = (__pyx_v_c_schema->release == NULL);
if (__pyx_t_4) {
/* … */
}
+07496: rc = stream.get_schema(stream, c_schema)
__pyx_v_rc = __pyx_v_stream->get_schema(__pyx_v_stream, __pyx_v_c_schema);
+07497: if rc != 0:
__pyx_t_4 = (__pyx_v_rc != 0);
if (unlikely(__pyx_t_4)) {
/* … */
}
+07498: stream_err = stream.get_last_error(stream)
__pyx_v_stream_err = __pyx_v_stream->get_last_error(__pyx_v_stream);
+07499: raise QuestDBError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7499, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
+07500: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7500, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7500, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+07501: f'Arrow stream get_schema failed: '
__pyx_t_8 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_Arrow_stream_get_schema_failed, __pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7501, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_3 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_3 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_9, __pyx_t_8}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7499, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 7499, __pyx_L1_error)
+07502: f'{stream_err.decode("utf-8", errors="replace") if stream_err != NULL else "unknown"}')
__pyx_t_4 = (__pyx_v_stream_err != NULL);
if (__pyx_t_4) {
__pyx_t_12 = __Pyx_PyBytes_FromString(__pyx_v_stream_err); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7502, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_12);
__pyx_t_11 = __pyx_t_12;
__Pyx_INCREF(__pyx_t_11);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_mstate_global->__pyx_kp_u_utf_8, __pyx_mstate_global->__pyx_n_u_replace};
#if CYTHON_VECTORCALL
__pyx_t_13 = __pyx_mstate_global->__pyx_tuple[31];
if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7502, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_13);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_errors};
__pyx_t_13 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7502, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_13);
}
#endif
__pyx_t_10 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_decode, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_13);
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 7502, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
}
if (!(likely(PyUnicode_CheckExact(__pyx_t_10))||((__pyx_t_10) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_10))) __PYX_ERR(0, 7502, __pyx_L1_error)
__pyx_t_8 = __pyx_t_10;
__pyx_t_10 = 0;
} else {
__Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_unknown);
__pyx_t_8 = __pyx_mstate_global->__pyx_n_u_unknown;
}
__pyx_t_10 = __Pyx_PyUnicode_Unicode(__pyx_t_8); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 7502, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
{
PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_errors};
__pyx_mstate_global->__pyx_tuple[31] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[31])) __PYX_ERR(0, 7502, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[31]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[31]);
07503: # Before the first batch is read: every Arrow source reaches the
07504: # client through this one schema, so a polars `Object` column is
07505: # caught here however it was exported. The caller releases
07506: # `c_schema`.
+07507: _refuse_fsb8_columns(c_schema)
__pyx_t_14 = __pyx_f_7questdb_7_client__refuse_fsb8_columns(__pyx_v_c_schema); if (unlikely(__pyx_t_14 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7507, __pyx_L1_error)
07508: # Once per call, since `c_schema` is fetched once and reused for
07509: # every slice. It only collects the unlabelled columns: the
07510: # caller reports them once the write is done
07511: # (`_log_unlabelled_fsb_columns`).
+07512: _check_fsb_columns(
__pyx_t_14 = __pyx_f_7questdb_7_client__check_fsb_columns(__pyx_v_c_schema, __pyx_v_c_overrides, __pyx_v_c_overrides_len, __pyx_v_binary_names, __pyx_v_unlabelled); if (unlikely(__pyx_t_14 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7512, __pyx_L1_error)
07513: c_schema, c_overrides, c_overrides_len,
07514: binary_names, unlabelled)
07515: # Field metadata goes on to the native client unchanged, by
07516: # design. A `questdb.column_type` claim the field's Arrow type
07517: # cannot carry -- 'short' on int32, 'ipv4' on int64 -- makes the
07518: # native Arrow ingest refuse the write with ArrowIngest before
07519: # anything is sent. That refusal is the intended contract for
07520: # this route, and the client neither strips such a claim nor
07521: # turns the refusal into a log record.
07522: #
07523: # A `df.attrs['questdb']` claim that no longer fits is logged and
07524: # dropped instead (`_log_roundtrip_claim_dropped`), and the two
07525: # routes differ on purpose. Field metadata is the input contract
07526: # of the native Arrow ingest, which refuses such a field for
07527: # every language that uses it (c-questdb-client #186). A field
07528: # claim also goes stale only when the caller carries the old
07529: # field onto a new type -- `field.with_type(...)`, or a
07530: # permissive `pa.concat_tables` with the claimed table first --
07531: # whereas `df.attrs` belongs to the whole frame and survives
07532: # `astype` and arithmetic, so a stale claim there is the normal
07533: # case.
07534: #
07535: # `test_stale_arrow_field_claim_is_refused` pins this. Changing
07536: # it changes the public contract (`QuestDB.dataframe`,
07537: # docs/sender.rst, CHANGELOG); it is not a local fix.
07538:
+07539: while True:
while (1) {
+07540: memset(&batch, 0, sizeof(ArrowArray))
(void)(memset((&__pyx_v_batch), 0, (sizeof(struct ArrowArray))));
+07541: rc = stream.get_next(stream, &batch)
__pyx_v_rc = __pyx_v_stream->get_next(__pyx_v_stream, (&__pyx_v_batch));
+07542: if rc != 0:
__pyx_t_4 = (__pyx_v_rc != 0);
if (unlikely(__pyx_t_4)) {
/* … */
}
+07543: stream_err = stream.get_last_error(stream)
__pyx_v_stream_err = __pyx_v_stream->get_last_error(__pyx_v_stream);
+07544: raise QuestDBError(
__pyx_t_7 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7544, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
+07545: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7545, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7545, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+07546: f'Arrow stream get_next failed: '
__pyx_t_9 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_Arrow_stream_get_next_failed, __pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7546, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_3 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_8))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_8, __pyx__function); __pyx_t_3 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_2, __pyx_t_9}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7544, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 7544, __pyx_L1_error)
+07547: f'{stream_err.decode("utf-8", errors="replace") if stream_err != NULL else "unknown"}')
__pyx_t_4 = (__pyx_v_stream_err != NULL);
if (__pyx_t_4) {
__pyx_t_13 = __Pyx_PyBytes_FromString(__pyx_v_stream_err); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7547, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_13);
__pyx_t_12 = __pyx_t_13;
__Pyx_INCREF(__pyx_t_12);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_mstate_global->__pyx_kp_u_utf_8, __pyx_mstate_global->__pyx_n_u_replace};
#if CYTHON_VECTORCALL
__pyx_t_11 = __pyx_mstate_global->__pyx_tuple[31];
if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7547, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_11);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_errors};
__pyx_t_11 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7547, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
}
#endif
__pyx_t_10 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_decode, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_11);
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 7547, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
}
if (!(likely(PyUnicode_CheckExact(__pyx_t_10))||((__pyx_t_10) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_10))) __PYX_ERR(0, 7547, __pyx_L1_error)
__pyx_t_9 = __pyx_t_10;
__pyx_t_10 = 0;
} else {
__Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_unknown);
__pyx_t_9 = __pyx_mstate_global->__pyx_n_u_unknown;
}
__pyx_t_10 = __Pyx_PyUnicode_Unicode(__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 7547, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+07548: if batch.release == NULL:
__pyx_t_4 = (__pyx_v_batch.release == NULL);
if (__pyx_t_4) {
/* … */
}
+07549: break
goto __pyx_L12_break;
+07550: try:
/*try:*/ {
+07551: if deferred_since_sync[0] >= _QWP_MAX_DEFERRED_ARROW_FRAMES:
__pyx_t_4 = ((__pyx_v_deferred_since_sync[0]) >= __pyx_v_7questdb_7_client__QWP_MAX_DEFERRED_ARROW_FRAMES);
if (__pyx_t_4) {
/* … */
}
+07552: _dataframe_columnar_sync(conn)
__pyx_t_14 = __pyx_f_7questdb_7_client__dataframe_columnar_sync(__pyx_v_conn); if (unlikely(__pyx_t_14 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7552, __pyx_L18_error)
+07553: may_have_committed_prefix[0] = True
(__pyx_v_may_have_committed_prefix[0]) = 1;
+07554: deferred_since_sync[0] = 0
(__pyx_v_deferred_since_sync[0]) = 0;
+07555: _dataframe_arrow_flush_batch(
__pyx_t_14 = __pyx_f_7questdb_7_client__dataframe_arrow_flush_batch(__pyx_v_conn, __pyx_v_c_table_name, (&__pyx_v_batch), __pyx_v_c_schema, __pyx_v_c_ts_column_ptr, __pyx_v_at_scalar_set, __pyx_v_at_scalar_nanos, __pyx_v_c_overrides, __pyx_v_c_overrides_len, 1, __pyx_v_may_have_committed_prefix, __pyx_v_deferred_since_sync); if (unlikely(__pyx_t_14 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7555, __pyx_L18_error)
07556: conn, c_table_name, &batch, c_schema, c_ts_column_ptr,
07557: at_scalar_set, at_scalar_nanos,
07558: c_overrides, c_overrides_len,
07559: True, may_have_committed_prefix,
07560: deferred_since_sync)
+07561: any_flushed[0] = True
(__pyx_v_any_flushed[0]) = 1;
+07562: deferred_since_sync[0] += 1
__pyx_t_15 = 0;
(__pyx_v_deferred_since_sync[__pyx_t_15]) = ((__pyx_v_deferred_since_sync[__pyx_t_15]) + 1);
}
07563: finally:
+07564: if batch.release != NULL:
/*finally:*/ {
/*normal exit:*/{
__pyx_t_4 = (__pyx_v_batch.release != NULL);
if (__pyx_t_4) {
/* … */
}
goto __pyx_L19;
}
__pyx_L18_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
if ( unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
__Pyx_XGOTREF(__pyx_t_19);
__Pyx_XGOTREF(__pyx_t_20);
__Pyx_XGOTREF(__pyx_t_21);
__Pyx_XGOTREF(__pyx_t_22);
__Pyx_XGOTREF(__pyx_t_23);
__Pyx_XGOTREF(__pyx_t_24);
__pyx_t_16 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
{
__pyx_t_4 = (__pyx_v_batch.release != NULL);
if (__pyx_t_4) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_XGIVEREF(__pyx_t_24);
__Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_XGIVEREF(__pyx_t_21);
__Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21);
__pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
__pyx_lineno = __pyx_t_16; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18;
goto __pyx_L1_error;
}
__pyx_L19:;
}
}
__pyx_L12_break:;
+07565: batch.release(&batch)
__pyx_v_batch.release((&__pyx_v_batch));
/* … */
__pyx_v_batch.release((&__pyx_v_batch));
07566:
07567:
07568: # `schema_overrides` kind `'binary'`. The native Arrow ingest has no such
07569: # override: an unlabelled fixed-size binary column already lands as
07570: # BINARY. The kind is a label for this client alone -- it keeps a pandas
07571: # frame's 16- or 32-byte column from being refused, and a native one from
07572: # being warned about -- so the capsule path takes it out of the list
07573: # before building the native overrides array, and checks what the
07574: # native side would otherwise have checked (`_check_fsb_columns`).
+07575: cdef int _SCHEMA_OVERRIDE_BINARY = -1
__pyx_v_7questdb_7_client__SCHEMA_OVERRIDE_BINARY = -1;
07576:
07577:
+07578: cdef object _validate_schema_overrides(object schema_overrides):
static PyObject *__pyx_f_7questdb_7_client__validate_schema_overrides(PyObject *__pyx_v_schema_overrides) {
PyObject *__pyx_v_out = 0;
PyObject *__pyx_v_name = 0;
PyObject *__pyx_v_override = 0;
PyObject *__pyx_v_kind = 0;
PyObject *__pyx_v_value = 0;
PyObject *__pyx_v_bits = 0;
int __pyx_v_kind_int;
int __pyx_v_arg_int;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_AddTraceback("questdb._client._validate_schema_overrides", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_out);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_XDECREF(__pyx_v_override);
__Pyx_XDECREF(__pyx_v_kind);
__Pyx_XDECREF(__pyx_v_value);
__Pyx_XDECREF(__pyx_v_bits);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07579: """Convert the public schema_overrides dict into a list of
07580: (name_bytes, kind_int, arg_int) tuples. Returns None if empty.
07581:
07582: Keeping `name_bytes` alive on the Python side lets the C overrides
07583: array borrow the underlying char* without an extra copy. A
07584: `'binary'` entry carries `_SCHEMA_OVERRIDE_BINARY`, which is not a
07585: native kind.
07586: """
+07587: if not schema_overrides:
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_schema_overrides); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7587, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+07588: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+07589: if not isinstance(schema_overrides, dict):
__pyx_t_2 = PyDict_Check(__pyx_v_schema_overrides);
__pyx_t_1 = (!__pyx_t_2);
if (unlikely(__pyx_t_1)) {
/* … */
}
+07590: raise TypeError(
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_schema_overrides_must_be_a_dict};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7590, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 7590, __pyx_L1_error)
07591: 'schema_overrides must be a dict mapping column name to '
07592: "one of: 'symbol', 'ipv4', 'char', 'uuid', 'long256', "
07593: "'binary', or ('geohash', bits).")
+07594: cdef list out = []
__pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7594, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_out = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
07595: cdef object name, override, kind, value, bits
07596: cdef int kind_int
07597: cdef int arg_int
+07598: for name, override in schema_overrides.items():
__pyx_t_6 = 0;
if (unlikely(__pyx_v_schema_overrides == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
__PYX_ERR(0, 7598, __pyx_L1_error)
}
__pyx_t_4 = __Pyx_dict_iterator(__pyx_v_schema_overrides, 0, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_7), (&__pyx_t_8)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7598, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_3);
__pyx_t_3 = __pyx_t_4;
__pyx_t_4 = 0;
while (1) {
__pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_7, &__pyx_t_6, &__pyx_t_4, &__pyx_t_9, NULL, __pyx_t_8);
if (unlikely(__pyx_t_10 == 0)) break;
if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 7598, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_GOTREF(__pyx_t_9);
__Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_4);
__pyx_t_4 = 0;
__Pyx_XDECREF_SET(__pyx_v_override, __pyx_t_9);
__pyx_t_9 = 0;
+07599: if not isinstance(name, str):
__pyx_t_1 = PyUnicode_Check(__pyx_v_name);
__pyx_t_2 = (!__pyx_t_1);
if (unlikely(__pyx_t_2)) {
/* … */
}
+07600: raise TypeError(
__pyx_t_4 = NULL;
+07601: f'schema_overrides key must be str, got '
__pyx_t_14 = 39;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13[1]);
#endif
__pyx_t_10 = 0;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_10 |= __Pyx_PyUnicode_KIND_04(__pyx_t_13[1]);
#endif
__pyx_t_11 = __Pyx_PyUnicode_Join(__pyx_t_13, 3, __pyx_t_14, __pyx_t_10);
if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7601, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_11};
__pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7600, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
}
__Pyx_Raise(__pyx_t_9, 0, 0, 0);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__PYX_ERR(0, 7600, __pyx_L1_error)
+07602: f'{type(name).__name__}.')
__pyx_t_11 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_name)), __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7602, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_t_11, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7602, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_13[0] = __pyx_mstate_global->__pyx_kp_u_schema_overrides_key_must_be_str; __pyx_t_13[1] = __pyx_t_12; __pyx_t_13[2] = __pyx_mstate_global->__pyx_kp_u__3;
+07603: if isinstance(override, str):
__pyx_t_2 = PyUnicode_Check(__pyx_v_override);
if (__pyx_t_2) {
/* … */
goto __pyx_L8;
}
+07604: kind = override
__Pyx_INCREF(__pyx_v_override); __Pyx_XDECREF_SET(__pyx_v_kind, __pyx_v_override);
+07605: value = None
__Pyx_INCREF(Py_None); __Pyx_XDECREF_SET(__pyx_v_value, Py_None);
+07606: elif isinstance(override, tuple) and len(override) == 2:
__pyx_t_1 = PyTuple_Check(__pyx_v_override); if (__pyx_t_1) { } else { __pyx_t_2 = __pyx_t_1; goto __pyx_L9_bool_binop_done; } __pyx_t_14 = PyObject_Length(__pyx_v_override); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-1))) __PYX_ERR(0, 7606, __pyx_L1_error) __pyx_t_1 = (__pyx_t_14 == 2); __pyx_t_2 = __pyx_t_1; __pyx_L9_bool_binop_done:; if (likely(__pyx_t_2)) { /* … */ goto __pyx_L8; }
+07607: kind, value = override
if ((likely(PyTuple_CheckExact(__pyx_v_override))) || (PyList_CheckExact(__pyx_v_override))) { PyObject* sequence = __pyx_v_override; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 7607, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_9); __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_11); } else { __pyx_t_9 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7607, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_9); __pyx_t_11 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7607, __pyx_L1_error) __Pyx_XGOTREF(__pyx_t_11); } #else __pyx_t_9 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7607, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_11 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7607, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); #endif } else { Py_ssize_t index = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_override); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7607, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_15 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); index = 0; __pyx_t_9 = __pyx_t_15(__pyx_t_4); if (unlikely(!__pyx_t_9)) goto __pyx_L11_unpacking_failed; __Pyx_GOTREF(__pyx_t_9); index = 1; __pyx_t_11 = __pyx_t_15(__pyx_t_4); if (unlikely(!__pyx_t_11)) goto __pyx_L11_unpacking_failed; __Pyx_GOTREF(__pyx_t_11); if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_4), 2) < (0)) __PYX_ERR(0, 7607, __pyx_L1_error) __pyx_t_15 = NULL; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L12_unpacking_done; __pyx_L11_unpacking_failed:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_15 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 7607, __pyx_L1_error) __pyx_L12_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_kind, __pyx_t_9); __pyx_t_9 = 0; __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_11); __pyx_t_11 = 0;
07608: else:
+07609: raise TypeError(
/*else*/ {
__pyx_t_9 = NULL;
+07610: f'schema_overrides[{name!r}] has invalid shape '
__pyx_t_4 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7610, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); /* … */ __pyx_t_14 = 75; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16[3]); #endif __pyx_t_10 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_10 |= __Pyx_PyUnicode_KIND_04(__pyx_t_16[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_16[3]); #endif __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_16, 5, __pyx_t_14, __pyx_t_10); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 7610, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_17}; __pyx_t_11 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7609, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); } __Pyx_Raise(__pyx_t_11, 0, 0, 0); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __PYX_ERR(0, 7609, __pyx_L1_error) } __pyx_L8:;
+07611: f'{override!r}; expected str or (kind, value) tuple.')
__pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_override), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7611, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_16[0] = __pyx_mstate_global->__pyx_kp_u_schema_overrides; __pyx_t_16[1] = __pyx_t_4; __pyx_t_16[2] = __pyx_mstate_global->__pyx_kp_u_has_invalid_shape; __pyx_t_16[3] = __pyx_t_12; __pyx_t_16[4] = __pyx_mstate_global->__pyx_kp_u_expected_str_or_kind_value_tupl;
+07612: arg_int = 0
__pyx_v_arg_int = 0;
+07613: if kind == 'symbol':
__pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_symbol, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7613, __pyx_L1_error) if (__pyx_t_2) { /* … */ goto __pyx_L13; }
+07614: kind_int = <int>qwp_arrow_override_symbol
__pyx_v_kind_int = ((int)qwp_arrow_override_symbol);
+07615: elif kind == 'ipv4':
__pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_ipv4, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7615, __pyx_L1_error) if (__pyx_t_2) { /* … */ goto __pyx_L13; }
+07616: kind_int = <int>qwp_arrow_override_ipv4
__pyx_v_kind_int = ((int)qwp_arrow_override_ipv4);
+07617: elif kind == 'char':
__pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_char_2, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7617, __pyx_L1_error) if (__pyx_t_2) { /* … */ goto __pyx_L13; }
+07618: kind_int = <int>qwp_arrow_override_char
__pyx_v_kind_int = ((int)qwp_arrow_override_char);
+07619: elif kind == 'uuid':
__pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_uuid, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7619, __pyx_L1_error) if (__pyx_t_2) { /* … */ goto __pyx_L13; }
+07620: kind_int = <int>qwp_arrow_override_uuid
__pyx_v_kind_int = ((int)qwp_arrow_override_uuid);
+07621: elif kind == 'long256':
__pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_long256, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7621, __pyx_L1_error) if (__pyx_t_2) { /* … */ goto __pyx_L13; }
+07622: kind_int = <int>qwp_arrow_override_long256
__pyx_v_kind_int = ((int)qwp_arrow_override_long256);
+07623: elif kind == 'binary':
__pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_binary, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7623, __pyx_L1_error) if (__pyx_t_2) { /* … */ goto __pyx_L13; }
+07624: kind_int = _SCHEMA_OVERRIDE_BINARY
__pyx_v_kind_int = __pyx_v_7questdb_7_client__SCHEMA_OVERRIDE_BINARY;
+07625: elif kind == 'geohash':
__pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7625, __pyx_L1_error) if (likely(__pyx_t_2)) { /* … */ goto __pyx_L13; }
07626: # Held to the range as a Python object, so a number too
07627: # wide for the C field is refused rather than overflowing
07628: # on the way into it.
+07629: bits = int(value) if _is_integral_not_bool(value) else None
__pyx_t_2 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_value); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7629, __pyx_L1_error) if (__pyx_t_2) { __pyx_t_17 = __Pyx_PyNumber_Int(__pyx_v_value); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 7629, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_11 = __pyx_t_17; __pyx_t_17 = 0; } else { __Pyx_INCREF(Py_None); __pyx_t_11 = Py_None; } __Pyx_XDECREF_SET(__pyx_v_bits, __pyx_t_11); __pyx_t_11 = 0;
+07630: if bits is None or bits < 1 or bits > 60:
__pyx_t_1 = (__pyx_v_bits == Py_None);
if (!__pyx_t_1) {
} else {
__pyx_t_2 = __pyx_t_1;
goto __pyx_L15_bool_binop_done;
}
__pyx_t_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_bits, __pyx_mstate_global->__pyx_int_1, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7630, __pyx_L1_error)
if (!__pyx_t_1) {
} else {
__pyx_t_2 = __pyx_t_1;
goto __pyx_L15_bool_binop_done;
}
__pyx_t_1 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_bits, __pyx_mstate_global->__pyx_int_60, Py_GT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7630, __pyx_L1_error)
__pyx_t_2 = __pyx_t_1;
__pyx_L15_bool_binop_done:;
if (unlikely(__pyx_t_2)) {
/* … */
}
+07631: raise ValueError(
__pyx_t_17 = NULL;
+07632: f'schema_overrides[{name!r}] geohash bits must '
__pyx_t_9 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7632, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); /* … */ __pyx_t_14 = 71; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16[3]); #endif __pyx_t_10 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_10 |= __Pyx_PyUnicode_KIND_04(__pyx_t_16[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_16[3]); #endif __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_16, 5, __pyx_t_14, __pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7632, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_t_4}; __pyx_t_11 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7631, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); } __Pyx_Raise(__pyx_t_11, 0, 0, 0); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __PYX_ERR(0, 7631, __pyx_L1_error)
+07633: f'be a whole number in 1..=60, got {value!r}.')
__pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_value), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7633, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_16[0] = __pyx_mstate_global->__pyx_kp_u_schema_overrides; __pyx_t_16[1] = __pyx_t_9; __pyx_t_16[2] = __pyx_mstate_global->__pyx_kp_u_geohash_bits_must_be_a_whole_nu; __pyx_t_16[3] = __pyx_t_12; __pyx_t_16[4] = __pyx_mstate_global->__pyx_kp_u__3;
+07634: kind_int = <int>qwp_arrow_override_geohash
__pyx_v_kind_int = ((int)qwp_arrow_override_geohash);
+07635: arg_int = bits
__pyx_t_10 = __Pyx_PyLong_As_int(__pyx_v_bits); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7635, __pyx_L1_error) __pyx_v_arg_int = __pyx_t_10;
07636: else:
+07637: raise ValueError(
/*else*/ {
__pyx_t_4 = NULL;
+07638: f'schema_overrides[{name!r}] kind {kind!r} not '
__pyx_t_17 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 7638, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_kind), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7638, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_16[0] = __pyx_mstate_global->__pyx_kp_u_schema_overrides; __pyx_t_16[1] = __pyx_t_17; __pyx_t_16[2] = __pyx_mstate_global->__pyx_kp_u_kind_2; __pyx_t_16[3] = __pyx_t_12; __pyx_t_16[4] = __pyx_mstate_global->__pyx_kp_u_not_in_symbol_ipv4_char_uuid_lo; __pyx_t_14 = 99; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16[3]); #endif __pyx_t_10 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_10 |= __Pyx_PyUnicode_KIND_04(__pyx_t_16[1]) | __Pyx_PyUnicode_KIND_04(__pyx_t_16[3]); #endif __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_16, 5, __pyx_t_14, __pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7638, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_5 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_9}; __pyx_t_11 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7637, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); } __Pyx_Raise(__pyx_t_11, 0, 0, 0); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __PYX_ERR(0, 7637, __pyx_L1_error) } __pyx_L13:;
07639: "in {'symbol', 'ipv4', 'char', 'uuid', 'long256', "
07640: "'binary', 'geohash'}.")
+07641: out.append((name.encode('utf-8'), kind_int, arg_int))
__pyx_t_9 = __pyx_v_name;
__Pyx_INCREF(__pyx_t_9);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_mstate_global->__pyx_kp_u_utf_8};
__pyx_t_11 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7641, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
}
__pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_kind_int); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7641, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_arg_int); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7641, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7641, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_12);
__Pyx_GIVEREF(__pyx_t_11);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_11) != (0)) __PYX_ERR(0, 7641, __pyx_L1_error);
__Pyx_GIVEREF(__pyx_t_9);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_9) != (0)) __PYX_ERR(0, 7641, __pyx_L1_error);
__Pyx_GIVEREF(__pyx_t_4);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_t_4) != (0)) __PYX_ERR(0, 7641, __pyx_L1_error);
__pyx_t_11 = 0;
__pyx_t_9 = 0;
__pyx_t_4 = 0;
__pyx_t_18 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_12); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 7641, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07642: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
07643:
07644:
+07645: cdef object _capsule_get_column_names(object sliceable):
static PyObject *__pyx_f_7questdb_7_client__capsule_get_column_names(PyObject *__pyx_v_sliceable) {
PyObject *__pyx_v_names = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client._capsule_get_column_names", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_names);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07646: """Return list of str column names from polars / pyarrow input,
07647: or None if the input doesn't expose a uniform name list."""
07648: cdef object names
+07649: names = getattr(sliceable, 'column_names', None)
__pyx_t_1 = __Pyx_GetAttr3(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_column_names, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7649, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_names = __pyx_t_1; __pyx_t_1 = 0;
+07650: if names is not None:
__pyx_t_2 = (__pyx_v_names != Py_None);
if (__pyx_t_2) {
/* … */
}
+07651: return list(names)
__pyx_t_1 = PySequence_List(__pyx_v_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7651, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+07652: names = getattr(sliceable, 'columns', None)
__pyx_t_1 = __Pyx_GetAttr3(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_columns, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7652, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_names, __pyx_t_1); __pyx_t_1 = 0;
+07653: if names is not None:
__pyx_t_2 = (__pyx_v_names != Py_None);
if (__pyx_t_2) {
/* … */
}
+07654: return list(names)
__pyx_t_1 = PySequence_List(__pyx_v_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7654, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
+07655: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
07656:
07657:
+07658: cdef object _capsule_at_index_to_name(object sliceable, int idx):
static PyObject *__pyx_f_7questdb_7_client__capsule_at_index_to_name(PyObject *__pyx_v_sliceable, int __pyx_v_idx) {
PyObject *__pyx_v_names = 0;
int __pyx_v_orig;
int __pyx_v_n;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_AddTraceback("questdb._client._capsule_at_index_to_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_names);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07659: """Resolve an integer `at` column index (negative allowed) to its name,
07660: mirroring the numpy path's `_bind_col_index`."""
+07661: cdef object names = _capsule_get_column_names(sliceable)
__pyx_t_1 = __pyx_f_7questdb_7_client__capsule_get_column_names(__pyx_v_sliceable); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7661, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_names = __pyx_t_1; __pyx_t_1 = 0;
+07662: cdef int orig = idx
__pyx_v_orig = __pyx_v_idx;
07663: cdef int n
+07664: if names is None:
__pyx_t_2 = (__pyx_v_names == Py_None);
if (unlikely(__pyx_t_2)) {
/* … */
}
+07665: raise TypeError(
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Cannot_resolve_an_integer_at_ind};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7665, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 7665, __pyx_L1_error)
07666: 'Cannot resolve an integer `at` index for this Arrow-native '
07667: 'input; pass the designated timestamp column name as a str.')
+07668: n = <int>len(names)
__pyx_t_5 = PyObject_Length(__pyx_v_names); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 7668, __pyx_L1_error) __pyx_v_n = ((int)__pyx_t_5);
+07669: if idx < 0:
__pyx_t_2 = (__pyx_v_idx < 0);
if (__pyx_t_2) {
/* … */
}
+07670: idx += n
__pyx_v_idx = (__pyx_v_idx + __pyx_v_n);
+07671: if idx < 0 or idx >= n:
__pyx_t_6 = (__pyx_v_idx < 0);
if (!__pyx_t_6) {
} else {
__pyx_t_2 = __pyx_t_6;
goto __pyx_L6_bool_binop_done;
}
__pyx_t_6 = (__pyx_v_idx >= __pyx_v_n);
__pyx_t_2 = __pyx_t_6;
__pyx_L6_bool_binop_done:;
if (unlikely(__pyx_t_2)) {
/* … */
}
+07672: raise IndexError(f'Bad argument `at`: {orig} index out of range')
__pyx_t_3 = NULL;
__pyx_t_7 = __Pyx_PyUnicode_From_int(__pyx_v_orig, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7672, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_Bad_argument_at;
__pyx_t_8[1] = __pyx_t_7;
__pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_index_out_of_range;
__pyx_t_5 = 38;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[1]);
#endif
__pyx_t_9 = 0;
__pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, __pyx_t_5, __pyx_t_9);
if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 7672, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_10};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_IndexError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7672, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 7672, __pyx_L1_error)
+07673: return names[idx]
__pyx_t_1 = __Pyx_GetItemInt(__pyx_v_names, __pyx_v_idx, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7673, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
07674:
07675:
+07676: cdef bint _capsule_polars_dtype_is_string_like(object dtype) except -1:
static int __pyx_f_7questdb_7_client__capsule_polars_dtype_is_string_like(PyObject *__pyx_v_dtype) {
PyObject *__pyx_v_enum_t = 0;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._capsule_polars_dtype_is_string_like", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_enum_t);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07677: """polars: Utf8 / String / Categorical / Enum count as string-like."""
+07678: if _POLARS is None:
__pyx_t_1 = (__pyx_v_7questdb_7_client__POLARS == Py_None);
if (__pyx_t_1) {
/* … */
}
+07679: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+07680: if dtype == _POLARS.Utf8:
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_Utf8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7680, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_v_dtype, __pyx_t_2, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7680, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_1) { /* … */ }
+07681: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+07682: if isinstance(dtype, _POLARS.Categorical):
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_Categorical); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7682, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 7682, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_1) { /* … */ }
+07683: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+07684: cdef object enum_t = getattr(_POLARS, 'Enum', None)
__pyx_t_2 = __pyx_v_7questdb_7_client__POLARS; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = __Pyx_GetAttr3(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_Enum, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7684, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_enum_t = __pyx_t_3; __pyx_t_3 = 0;
+07685: if enum_t is not None and isinstance(dtype, enum_t):
__pyx_t_4 = (__pyx_v_enum_t != Py_None);
if (__pyx_t_4) {
} else {
__pyx_t_1 = __pyx_t_4;
goto __pyx_L7_bool_binop_done;
}
__pyx_t_4 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_enum_t); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 7685, __pyx_L1_error)
__pyx_t_1 = __pyx_t_4;
__pyx_L7_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+07686: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+07687: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
07688:
07689:
+07690: cdef bint _capsule_pyarrow_type_is_utf8(object pa_type) except -1:
static int __pyx_f_7questdb_7_client__capsule_pyarrow_type_is_utf8(PyObject *__pyx_v_pa_type) {
PyObject *__pyx_v_is_string_view = 0;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._capsule_pyarrow_type_is_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_is_string_view);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+07691: cdef object is_string_view = getattr(
__pyx_t_2 = __Pyx_GetAttr3(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_is_string_view, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7691, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_is_string_view = __pyx_t_2; __pyx_t_2 = 0;
+07692: _PYARROW.types, 'is_string_view', None)
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7692, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1);
+07693: return (_PYARROW.types.is_string(pa_type)
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __pyx_t_4; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_pa_type}; __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_string, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 7693, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!__pyx_t_6) { } else { __pyx_t_3 = __pyx_t_6; goto __pyx_L3_bool_binop_done; }
+07694: or _PYARROW.types.is_large_string(pa_type)
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_pa_type}; __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_large_string, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 7694, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!__pyx_t_6) { } else { __pyx_t_3 = __pyx_t_6; goto __pyx_L3_bool_binop_done; }
+07695: or (is_string_view is not None and is_string_view(pa_type)))
__pyx_t_6 = (__pyx_v_is_string_view != Py_None);
if (__pyx_t_6) {
} else {
__pyx_t_3 = __pyx_t_6;
goto __pyx_L3_bool_binop_done;
}
__pyx_t_1 = NULL;
__Pyx_INCREF(__pyx_v_is_string_view);
__pyx_t_4 = __pyx_v_is_string_view;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_1);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_1);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_pa_type};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7695, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 7695, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_3 = __pyx_t_6;
__pyx_L3_bool_binop_done:;
{
__pyx_r = __pyx_t_3;
}
goto __pyx_L0;
07696:
07697:
+07698: cdef bint _capsule_pyarrow_type_is_string_like(object field_type) except -1:
static int __pyx_f_7questdb_7_client__capsule_pyarrow_type_is_string_like(PyObject *__pyx_v_field_type) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._capsule_pyarrow_type_is_string_like", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07699: """pyarrow: utf8 / large_utf8 / utf8_view, plus Dictionary whose
07700: value type is one of those."""
+07701: if _PYARROW is None:
__pyx_t_1 = (__pyx_v_7questdb_7_client__PYARROW == Py_None);
if (__pyx_t_1) {
/* … */
}
+07702: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+07703: if _capsule_pyarrow_type_is_utf8(field_type):
__pyx_t_1 = __pyx_f_7questdb_7_client__capsule_pyarrow_type_is_utf8(__pyx_v_field_type); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 7703, __pyx_L1_error)
if (__pyx_t_1) {
/* … */
}
+07704: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+07705: return (_PYARROW.types.is_dictionary(field_type)
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7705, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __pyx_t_4; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_field_type}; __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_dictionary, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7705, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 7705, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_6) { } else { __pyx_t_1 = __pyx_t_6; goto __pyx_L5_bool_binop_done; }
+07706: and _capsule_pyarrow_type_is_utf8(field_type.value_type))
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_field_type, __pyx_mstate_global->__pyx_n_u_value_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7706, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = __pyx_f_7questdb_7_client__capsule_pyarrow_type_is_utf8(__pyx_t_2); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 7706, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_1 = __pyx_t_6; __pyx_L5_bool_binop_done:; { __pyx_r = __pyx_t_1; } goto __pyx_L0;
07707:
07708:
+07709: cdef object _capsule_schema(object sliceable, object symbols):
static PyObject *__pyx_f_7questdb_7_client__capsule_schema(PyObject *__pyx_v_sliceable, PyObject *__pyx_v_symbols) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client._capsule_schema", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07710: """Arrow schema of a pyarrow Table / RecordBatch when resolving
07711: `symbols` needs one, else None. Pandas input takes its schema from its
07712: first exported batch instead."""
+07713: if (symbols is None or symbols == 'auto'
__pyx_t_2 = (__pyx_v_symbols == Py_None);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
/* … */
__pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_symbols, __pyx_mstate_global->__pyx_n_u_auto, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7713, __pyx_L1_error)
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
/* … */
if (__pyx_t_1) {
/* … */
}
+07714: or _is_polars_dataframe_or_lazy(sliceable)):
__pyx_t_2 = __pyx_f_7questdb_7_client__is_polars_dataframe_or_lazy(__pyx_v_sliceable); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7714, __pyx_L1_error) __pyx_t_1 = __pyx_t_2; __pyx_L4_bool_binop_done:;
+07715: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+07716: if _PYARROW is None:
__pyx_t_1 = (__pyx_v_7questdb_7_client__PYARROW == Py_None);
if (__pyx_t_1) {
/* … */
}
+07717: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L13_try_end;
__pyx_L8_error:;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
__pyx_L10_except_error:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L1_error;
__pyx_L11_except_return:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L0;
__pyx_L13_try_end:;
}
+07718: _dataframe_require_pyarrow()
__pyx_t_6 = __pyx_f_7questdb_7_client__dataframe_require_pyarrow(); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7718, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+07719: except ImportError:
__pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_ImportError)))); if (__pyx_t_7) { __Pyx_ErrRestore(0,0,0);
+07720: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L11_except_return;
}
goto __pyx_L10_except_error;
+07721: if isinstance(sliceable, (_PYARROW.Table, _PYARROW.RecordBatch)):
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7721, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_RecordBatch); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7721, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_2 = PyObject_IsInstance(__pyx_v_sliceable, __pyx_t_6); if (!__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L17_bool_binop_done; } __pyx_t_2 = PyObject_IsInstance(__pyx_v_sliceable, __pyx_t_8); __pyx_t_1 = __pyx_t_2; __pyx_L17_bool_binop_done:; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__pyx_t_1) { /* … */ }
+07722: return sliceable.schema
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7722, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_6; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_6 = 0; goto __pyx_L0;
+07723: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
07724:
07725:
+07726: cdef object _capsule_get_string_column_names(
static PyObject *__pyx_f_7questdb_7_client__capsule_get_string_column_names(PyObject *__pyx_v_sliceable, PyObject *__pyx_v_schema) {
PyObject *__pyx_v_out = 0;
PyObject *__pyx_v_name = 0;
PyObject *__pyx_v_dtype = 0;
PyObject *__pyx_v_field = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client._capsule_get_string_column_names", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_out);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_XDECREF(__pyx_v_field);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07727: object sliceable, object schema):
07728: """Return names of all string-like columns (utf8 / large_utf8 /
07729: dict-of-utf8). Returns None if schema introspection is not
07730: available on the input."""
07731: cdef object out
07732: cdef object name
07733: cdef object dtype
07734: cdef object field
+07735: if _POLARS is not None and isinstance(sliceable, _POLARS_DATAFRAME_T):
__pyx_t_2 = (__pyx_v_7questdb_7_client__POLARS != Py_None);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_3 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_2 = PyObject_IsInstance(__pyx_v_sliceable, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7735, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+07736: out = []
__pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7736, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_out = __pyx_t_3; __pyx_t_3 = 0;
+07737: for name, dtype in sliceable.schema.items():
__pyx_t_4 = 0;
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7737, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
if (unlikely(__pyx_t_7 == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
__PYX_ERR(0, 7737, __pyx_L1_error)
}
__pyx_t_8 = __Pyx_dict_iterator(__pyx_t_7, 0, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_5), (&__pyx_t_6)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7737, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_3);
__pyx_t_3 = __pyx_t_8;
__pyx_t_8 = 0;
while (1) {
__pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_5, &__pyx_t_4, &__pyx_t_8, &__pyx_t_7, NULL, __pyx_t_6);
if (unlikely(__pyx_t_9 == 0)) break;
if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 7737, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_GOTREF(__pyx_t_7);
__Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_8);
__pyx_t_8 = 0;
__Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_7);
__pyx_t_7 = 0;
+07738: if _capsule_polars_dtype_is_string_like(dtype):
__pyx_t_1 = __pyx_f_7questdb_7_client__capsule_polars_dtype_is_string_like(__pyx_v_dtype); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 7738, __pyx_L1_error) if (__pyx_t_1) { /* … */ } } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07739: out.append(name)
__pyx_t_10 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_v_name); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 7739, __pyx_L1_error)
+07740: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+07741: if schema is None:
__pyx_t_1 = (__pyx_v_schema == Py_None);
if (__pyx_t_1) {
/* … */
}
+07742: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+07743: out = []
__pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7743, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_out = __pyx_t_3; __pyx_t_3 = 0;
+07744: for field in schema:
if (likely(PyList_CheckExact(__pyx_v_schema)) || PyTuple_CheckExact(__pyx_v_schema)) { __pyx_t_3 = __pyx_v_schema; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0; __pyx_t_11 = NULL; } else { __pyx_t_5 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_schema); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7744, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_11 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7744, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_11)) { if (likely(PyList_CheckExact(__pyx_t_3))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7744, __pyx_L1_error) #endif if (__pyx_t_5 >= __pyx_temp) break; } __pyx_t_7 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_3, __pyx_t_5, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_5; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7744, __pyx_L1_error) #endif if (__pyx_t_5 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_7 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5)); #else __pyx_t_7 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_5); #endif ++__pyx_t_5; } if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7744, __pyx_L1_error) } else { __pyx_t_7 = __pyx_t_11(__pyx_t_3); if (unlikely(!__pyx_t_7)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7744, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_7); __Pyx_XDECREF_SET(__pyx_v_field, __pyx_t_7); __pyx_t_7 = 0; /* … */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07745: if _capsule_pyarrow_type_is_string_like(field.type):
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_type); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7745, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = __pyx_f_7questdb_7_client__capsule_pyarrow_type_is_string_like(__pyx_t_7); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 7745, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (__pyx_t_1) { /* … */ }
+07746: out.append(field.name)
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7746, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_10 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_t_7); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 7746, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+07747: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
07748:
07749:
+07750: cdef object _capsule_column_is_string_like(
static PyObject *__pyx_f_7questdb_7_client__capsule_column_is_string_like(PyObject *__pyx_v_sliceable, PyObject *__pyx_v_schema, PyObject *__pyx_v_name) {
PyObject *__pyx_v_dtype = 0;
PyObject *__pyx_v_field_type = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_AddTraceback("questdb._client._capsule_column_is_string_like", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_XDECREF(__pyx_v_field_type);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07751: object sliceable, object schema, str name):
07752: """Returns True iff `name` is a string-like column on `sliceable`,
07753: False iff it is some other type, or None if schema introspection
07754: is not available on the input."""
07755: cdef object dtype
07756: cdef object field_type
+07757: if _POLARS is not None and isinstance(sliceable, _POLARS_DATAFRAME_T):
__pyx_t_2 = (__pyx_v_7questdb_7_client__POLARS != Py_None);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_3 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_2 = PyObject_IsInstance(__pyx_v_sliceable, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7757, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+07758: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
goto __pyx_L11_try_end;
__pyx_L6_error:;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
__pyx_L8_except_error:;
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
goto __pyx_L1_error;
__pyx_L11_try_end:;
}
+07759: dtype = sliceable.schema[name]
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7759, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyObject_Dict_GetItem(__pyx_t_3, __pyx_v_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7759, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_dtype = __pyx_t_7; __pyx_t_7 = 0;
+07760: except KeyError:
__pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_KeyError)))); if (__pyx_t_8) { __Pyx_AddTraceback("questdb._client._capsule_column_is_string_like", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_3, &__pyx_t_9) < 0) __PYX_ERR(0, 7760, __pyx_L8_except_error) __Pyx_XGOTREF(__pyx_t_7); __Pyx_XGOTREF(__pyx_t_3); __Pyx_XGOTREF(__pyx_t_9);
+07761: raise KeyError(
__pyx_t_11 = NULL;
+07762: f'symbols column {name!r} not found in the dataframe.')
__pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7762, __pyx_L8_except_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_13[0] = __pyx_mstate_global->__pyx_kp_u_symbols_column; __pyx_t_13[1] = __pyx_t_12; __pyx_t_13[2] = __pyx_mstate_global->__pyx_kp_u_not_found_in_the_dataframe; __pyx_t_14 = 43; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13[1]); #endif __pyx_t_8 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_8 |= __Pyx_PyUnicode_KIND_04(__pyx_t_13[1]); #endif __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_13, 3, __pyx_t_14, __pyx_t_8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7762, __pyx_L8_except_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_16 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_15}; __pyx_t_10 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_KeyError)), __pyx_callargs+__pyx_t_16, (2-__pyx_t_16) | (__pyx_t_16*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 7761, __pyx_L8_except_error) __Pyx_GOTREF(__pyx_t_10); } __Pyx_Raise(__pyx_t_10, 0, 0, 0); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __PYX_ERR(0, 7761, __pyx_L8_except_error) } goto __pyx_L8_except_error;
+07763: return _capsule_polars_dtype_is_string_like(dtype)
__pyx_t_1 = __pyx_f_7questdb_7_client__capsule_polars_dtype_is_string_like(__pyx_v_dtype); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 7763, __pyx_L1_error) __pyx_t_9 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7763, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_9; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_9 = 0; goto __pyx_L0;
+07764: if schema is None:
__pyx_t_1 = (__pyx_v_schema == Py_None);
if (__pyx_t_1) {
/* … */
}
+07765: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+07766: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L20_try_end;
__pyx_L15_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L17_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_5, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L20_try_end:;
}
+07767: field_type = schema.field(name).type
__pyx_t_3 = __pyx_v_schema;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_16 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_name};
__pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_field, __pyx_callargs+__pyx_t_16, (2-__pyx_t_16) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7767, __pyx_L15_error)
__Pyx_GOTREF(__pyx_t_9);
}
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7767, __pyx_L15_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__pyx_v_field_type = __pyx_t_3;
__pyx_t_3 = 0;
+07768: except (KeyError, ValueError):
__pyx_t_8 = __Pyx_PyErr_ExceptionMatches2(((PyObject *)(((PyTypeObject*)PyExc_KeyError))), ((PyObject *)(((PyTypeObject*)PyExc_ValueError))));
if (__pyx_t_8) {
__Pyx_AddTraceback("questdb._client._capsule_column_is_string_like", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_9, &__pyx_t_7) < 0) __PYX_ERR(0, 7768, __pyx_L17_except_error)
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_7);
+07769: raise KeyError(
__pyx_t_15 = NULL;
+07770: f'symbols column {name!r} not found in the dataframe.')
__pyx_t_11 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7770, __pyx_L17_except_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_13[0] = __pyx_mstate_global->__pyx_kp_u_symbols_column; __pyx_t_13[1] = __pyx_t_11; __pyx_t_13[2] = __pyx_mstate_global->__pyx_kp_u_not_found_in_the_dataframe; __pyx_t_14 = 43; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13[1]); #endif __pyx_t_8 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_8 |= __Pyx_PyUnicode_KIND_04(__pyx_t_13[1]); #endif __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_13, 3, __pyx_t_14, __pyx_t_8); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7770, __pyx_L17_except_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_16 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_t_12}; __pyx_t_10 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_KeyError)), __pyx_callargs+__pyx_t_16, (2-__pyx_t_16) | (__pyx_t_16*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 7769, __pyx_L17_except_error) __Pyx_GOTREF(__pyx_t_10); } __Pyx_Raise(__pyx_t_10, 0, 0, 0); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __PYX_ERR(0, 7769, __pyx_L17_except_error) } goto __pyx_L17_except_error;
+07771: return _capsule_pyarrow_type_is_string_like(field_type)
__pyx_t_1 = __pyx_f_7questdb_7_client__capsule_pyarrow_type_is_string_like(__pyx_v_field_type); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 7771, __pyx_L1_error) __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7771, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_7; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_7 = 0; goto __pyx_L0;
07772:
07773:
+07774: cdef object _capsule_get_dict_string_column_names(
static PyObject *__pyx_f_7questdb_7_client__capsule_get_dict_string_column_names(PyObject *__pyx_v_sliceable, PyObject *__pyx_v_schema) {
PyObject *__pyx_v_out = 0;
PyObject *__pyx_v_name = 0;
PyObject *__pyx_v_dtype = 0;
PyObject *__pyx_v_field = 0;
PyObject *__pyx_v_enum_t = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_AddTraceback("questdb._client._capsule_get_dict_string_column_names", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_out);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_XDECREF(__pyx_v_field);
__Pyx_XDECREF(__pyx_v_enum_t);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07775: object sliceable, object schema):
07776: """Return names of dict-encoded string-like columns (polars
07777: Categorical / Enum or pyarrow Dictionary(*, utf8/large_utf8/utf8_view)).
07778: Returns None if schema introspection is not available."""
07779: cdef object out
07780: cdef object name
07781: cdef object dtype
07782: cdef object field
07783: cdef object enum_t
+07784: if _POLARS is not None and isinstance(sliceable, _POLARS_DATAFRAME_T):
__pyx_t_2 = (__pyx_v_7questdb_7_client__POLARS != Py_None);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_3 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_2 = PyObject_IsInstance(__pyx_v_sliceable, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7784, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+07785: out = []
__pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7785, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_out = __pyx_t_3; __pyx_t_3 = 0;
+07786: enum_t = getattr(_POLARS, 'Enum', None)
__pyx_t_3 = __pyx_v_7questdb_7_client__POLARS;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = __Pyx_GetAttr3(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Enum, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7786, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_v_enum_t = __pyx_t_4;
__pyx_t_4 = 0;
+07787: for name, dtype in sliceable.schema.items():
__pyx_t_5 = 0;
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7787, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
if (unlikely(__pyx_t_3 == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
__PYX_ERR(0, 7787, __pyx_L1_error)
}
__pyx_t_8 = __Pyx_dict_iterator(__pyx_t_3, 0, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7787, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4);
__pyx_t_4 = __pyx_t_8;
__pyx_t_8 = 0;
while (1) {
__pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_4, __pyx_t_6, &__pyx_t_5, &__pyx_t_8, &__pyx_t_3, NULL, __pyx_t_7);
if (unlikely(__pyx_t_9 == 0)) break;
if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 7787, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_GOTREF(__pyx_t_3);
__Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_8);
__pyx_t_8 = 0;
__Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_3);
__pyx_t_3 = 0;
+07788: if isinstance(dtype, _POLARS.Categorical):
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_Categorical); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7788, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_3); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 7788, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_1) { /* … */ goto __pyx_L8; }
+07789: out.append(name)
__pyx_t_10 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_v_name); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 7789, __pyx_L1_error)
+07790: elif enum_t is not None and isinstance(dtype, enum_t):
__pyx_t_2 = (__pyx_v_enum_t != Py_None);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L9_bool_binop_done;
}
__pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_enum_t); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7790, __pyx_L1_error)
__pyx_t_1 = __pyx_t_2;
__pyx_L9_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
__pyx_L8:;
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+07791: out.append(name)
__pyx_t_10 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_v_name); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 7791, __pyx_L1_error)
+07792: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+07793: if schema is None:
__pyx_t_1 = (__pyx_v_schema == Py_None);
if (__pyx_t_1) {
/* … */
}
+07794: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+07795: out = []
__pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7795, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_out = __pyx_t_4; __pyx_t_4 = 0;
+07796: for field in schema:
if (likely(PyList_CheckExact(__pyx_v_schema)) || PyTuple_CheckExact(__pyx_v_schema)) { __pyx_t_4 = __pyx_v_schema; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0; __pyx_t_11 = NULL; } else { __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_schema); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7796, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_11 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7796, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_11)) { if (likely(PyList_CheckExact(__pyx_t_4))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7796, __pyx_L1_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_4, __pyx_t_6, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_6; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7796, __pyx_L1_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6)); #else __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_6); #endif ++__pyx_t_6; } if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7796, __pyx_L1_error) } else { __pyx_t_3 = __pyx_t_11(__pyx_t_4); if (unlikely(!__pyx_t_3)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7796, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_field, __pyx_t_3); __pyx_t_3 = 0; /* … */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+07797: if (_PYARROW.types.is_dictionary(field.type)
__pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7797, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_8 = __pyx_t_12; __Pyx_INCREF(__pyx_t_8); __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_type); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7797, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_13}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_dictionary, __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7797, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7797, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L15_bool_binop_done; } /* … */ if (__pyx_t_1) { /* … */ }
+07798: and _capsule_pyarrow_type_is_utf8(field.type.value_type)):
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7798, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_value_type); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7798, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_2 = __pyx_f_7questdb_7_client__capsule_pyarrow_type_is_utf8(__pyx_t_12); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7798, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_1 = __pyx_t_2; __pyx_L15_bool_binop_done:;
+07799: out.append(field.name)
__pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7799, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_10 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_t_12); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 7799, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+07800: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
07801:
07802:
+07803: cdef object _resolve_symbols_to_overrides(
static PyObject *__pyx_f_7questdb_7_client__resolve_symbols_to_overrides(PyObject *__pyx_v_sliceable, PyObject *__pyx_v_schema, PyObject *__pyx_v_symbols) {
PyObject *__pyx_v_out = 0;
int __pyx_v_symbol_kind;
int __pyx_v_not_symbol_kind;
PyObject *__pyx_v_col_names = 0;
PyObject *__pyx_v_entry = 0;
PyObject *__pyx_v_name = 0;
PyObject *__pyx_v_is_str = 0;
int __pyx_v_idx;
PyObject *__pyx_v_listed = 0;
PyObject *__pyx_v_dict_names = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_AddTraceback("questdb._client._resolve_symbols_to_overrides", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_out);
__Pyx_XDECREF(__pyx_v_col_names);
__Pyx_XDECREF(__pyx_v_entry);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_XDECREF(__pyx_v_is_str);
__Pyx_XDECREF(__pyx_v_listed);
__Pyx_XDECREF(__pyx_v_dict_names);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07804: object sliceable, object schema, object symbols):
07805: """Translate `symbols` into a list of
07806: (name_bytes, kind, arg) tuples matching the shape returned by
07807: _validate_schema_overrides. `kind` is `qwp_arrow_override_symbol`
07808: to mark a column as SYMBOL or `qwp_arrow_override_not_symbol`
07809: to force a dict-encoded column to VARCHAR; `arg` is unused (0) for both.
07810: Returns:
07811:
07812: - [] for None / 'auto' (no overrides, Rust default applies —
07813: Dictionary columns auto-classify as SymbolDict).
07814: - list for True (auto-detect str cols) / False (force NotSymbol
07815: on every dict-encoded str col) / List[str] / List[int].
07816: - None if resolution requires introspection not available on the
07817: input; caller falls back to Manual plan.
07818:
07819: Raises QuestDBError(BadDataFrame) when an explicitly-named symbols
07820: entry targets a non-string column (matches Manual plan semantics).
07821: """
07822: cdef list out
+07823: cdef int symbol_kind = <int>qwp_arrow_override_symbol
__pyx_v_symbol_kind = ((int)qwp_arrow_override_symbol);
+07824: cdef int not_symbol_kind = <int>qwp_arrow_override_not_symbol
__pyx_v_not_symbol_kind = ((int)qwp_arrow_override_not_symbol);
07825: cdef object col_names
07826: cdef object entry
07827: cdef object name
07828: cdef object is_str
07829: cdef int idx
07830: cdef set listed
07831: cdef object dict_names
07832:
+07833: if symbols is None or symbols == 'auto':
__pyx_t_2 = (__pyx_v_symbols == Py_None);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_symbols, __pyx_mstate_global->__pyx_n_u_auto, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7833, __pyx_L1_error)
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+07834: return []
__pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7834, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
07835:
+07836: if symbols is False:
__pyx_t_1 = (__pyx_v_symbols == Py_False);
if (__pyx_t_1) {
/* … */
}
+07837: col_names = _capsule_get_dict_string_column_names(sliceable, schema)
__pyx_t_3 = __pyx_f_7questdb_7_client__capsule_get_dict_string_column_names(__pyx_v_sliceable, __pyx_v_schema); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7837, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_col_names = __pyx_t_3; __pyx_t_3 = 0;
+07838: if col_names is None:
__pyx_t_1 = (__pyx_v_col_names == Py_None);
if (__pyx_t_1) {
/* … */
}
+07839: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+07840: out = []
__pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7840, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_out = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
+07841: for entry in col_names:
if (likely(PyList_CheckExact(__pyx_v_col_names)) || PyTuple_CheckExact(__pyx_v_col_names)) { __pyx_t_3 = __pyx_v_col_names; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_col_names); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7841, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7841, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_5)) { if (likely(PyList_CheckExact(__pyx_t_3))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7841, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } __pyx_t_6 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_3, __pyx_t_4, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_4; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7841, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_6 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4)); #else __pyx_t_6 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4); #endif ++__pyx_t_4; } if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7841, __pyx_L1_error) } else { __pyx_t_6 = __pyx_t_5(__pyx_t_3); if (unlikely(!__pyx_t_6)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7841, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_6); __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_6); __pyx_t_6 = 0; /* … */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07842: out.append((entry.encode('utf-8'), not_symbol_kind, 0))
__pyx_t_7 = __pyx_v_entry;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_utf_8};
__pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7842, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
}
__pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_not_symbol_kind); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7842, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7842, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_GIVEREF(__pyx_t_6);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_6) != (0)) __PYX_ERR(0, 7842, __pyx_L1_error);
__Pyx_GIVEREF(__pyx_t_7);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_7) != (0)) __PYX_ERR(0, 7842, __pyx_L1_error);
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 7842, __pyx_L1_error);
__pyx_t_6 = 0;
__pyx_t_7 = 0;
__pyx_t_10 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_9); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 7842, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+07843: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
07844:
+07845: if symbols is True:
__pyx_t_1 = (__pyx_v_symbols == Py_True);
if (__pyx_t_1) {
/* … */
}
+07846: col_names = _capsule_get_string_column_names(sliceable, schema)
__pyx_t_3 = __pyx_f_7questdb_7_client__capsule_get_string_column_names(__pyx_v_sliceable, __pyx_v_schema); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7846, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_col_names = __pyx_t_3; __pyx_t_3 = 0;
+07847: if col_names is None:
__pyx_t_1 = (__pyx_v_col_names == Py_None);
if (__pyx_t_1) {
/* … */
}
+07848: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+07849: out = []
__pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7849, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_out = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
+07850: for entry in col_names:
if (likely(PyList_CheckExact(__pyx_v_col_names)) || PyTuple_CheckExact(__pyx_v_col_names)) { __pyx_t_3 = __pyx_v_col_names; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_col_names); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7850, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7850, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_5)) { if (likely(PyList_CheckExact(__pyx_t_3))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7850, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } __pyx_t_9 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_3, __pyx_t_4, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_4; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7850, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_9 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4)); #else __pyx_t_9 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4); #endif ++__pyx_t_4; } if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7850, __pyx_L1_error) } else { __pyx_t_9 = __pyx_t_5(__pyx_t_3); if (unlikely(!__pyx_t_9)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7850, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_9); __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_9); __pyx_t_9 = 0; /* … */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07851: out.append((entry.encode('utf-8'), symbol_kind, 0))
__pyx_t_7 = __pyx_v_entry;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_utf_8};
__pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7851, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
}
__pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_symbol_kind); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7851, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7851, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_GIVEREF(__pyx_t_9);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_9) != (0)) __PYX_ERR(0, 7851, __pyx_L1_error);
__Pyx_GIVEREF(__pyx_t_7);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7) != (0)) __PYX_ERR(0, 7851, __pyx_L1_error);
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 7851, __pyx_L1_error);
__pyx_t_9 = 0;
__pyx_t_7 = 0;
__pyx_t_10 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_6); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 7851, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+07852: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
07853:
+07854: if not isinstance(symbols, (list, tuple)):
__pyx_t_2 = PyList_Check(__pyx_v_symbols); if (!__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L17_bool_binop_done; } __pyx_t_2 = PyTuple_Check(__pyx_v_symbols); __pyx_t_1 = __pyx_t_2; __pyx_L17_bool_binop_done:; __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+07855: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
07856:
+07857: out = []
__pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7857, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_out = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
+07858: col_names = None
__Pyx_INCREF(Py_None);
__pyx_v_col_names = Py_None;
+07859: listed = set()
__pyx_t_3 = PySet_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7859, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_listed = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
+07860: for entry in symbols:
if (likely(PyList_CheckExact(__pyx_v_symbols)) || PyTuple_CheckExact(__pyx_v_symbols)) { __pyx_t_3 = __pyx_v_symbols; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_symbols); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7860, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7860, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_5)) { if (likely(PyList_CheckExact(__pyx_t_3))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7860, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } __pyx_t_6 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_3, __pyx_t_4, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_4; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7860, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_6 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4)); #else __pyx_t_6 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4); #endif ++__pyx_t_4; } if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7860, __pyx_L1_error) } else { __pyx_t_6 = __pyx_t_5(__pyx_t_3); if (unlikely(!__pyx_t_6)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7860, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_6); __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_6); __pyx_t_6 = 0; /* … */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07861: if isinstance(entry, str):
__pyx_t_2 = PyUnicode_Check(__pyx_v_entry);
if (__pyx_t_2) {
/* … */
goto __pyx_L21;
}
+07862: name = entry
__Pyx_INCREF(__pyx_v_entry); __Pyx_XDECREF_SET(__pyx_v_name, __pyx_v_entry);
+07863: elif isinstance(entry, int):
__pyx_t_2 = PyLong_Check(__pyx_v_entry);
if (likely(__pyx_t_2)) {
/* … */
goto __pyx_L21;
}
+07864: if col_names is None:
__pyx_t_2 = (__pyx_v_col_names == Py_None);
if (__pyx_t_2) {
/* … */
}
+07865: col_names = _capsule_get_column_names(sliceable)
__pyx_t_6 = __pyx_f_7questdb_7_client__capsule_get_column_names(__pyx_v_sliceable); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7865, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF_SET(__pyx_v_col_names, __pyx_t_6); __pyx_t_6 = 0;
+07866: if col_names is None:
__pyx_t_2 = (__pyx_v_col_names == Py_None);
if (__pyx_t_2) {
/* … */
}
+07867: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L0;
+07868: idx = <int>entry
__pyx_t_11 = __Pyx_PyLong_As_int(__pyx_v_entry); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7868, __pyx_L1_error) __pyx_v_idx = ((int)__pyx_t_11);
+07869: if idx < 0:
__pyx_t_2 = (__pyx_v_idx < 0);
if (__pyx_t_2) {
/* … */
}
+07870: idx += len(col_names)
__pyx_t_12 = PyObject_Length(__pyx_v_col_names); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 7870, __pyx_L1_error) __pyx_v_idx = (__pyx_v_idx + __pyx_t_12);
+07871: if idx < 0 or idx >= len(col_names):
__pyx_t_1 = (__pyx_v_idx < 0);
if (!__pyx_t_1) {
} else {
__pyx_t_2 = __pyx_t_1;
goto __pyx_L26_bool_binop_done;
}
__pyx_t_12 = PyObject_Length(__pyx_v_col_names); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 7871, __pyx_L1_error)
__pyx_t_1 = (__pyx_v_idx >= __pyx_t_12);
__pyx_t_2 = __pyx_t_1;
__pyx_L26_bool_binop_done:;
if (unlikely(__pyx_t_2)) {
/* … */
}
+07872: raise ValueError(
__pyx_t_7 = NULL;
+07873: f'symbols index {entry} out of range '
__pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_v_entry, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7873, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); /* … */ __pyx_t_12 = 44; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14[3]); #endif __pyx_t_11 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_11 |= __Pyx_PyUnicode_KIND_04(__pyx_t_14[1]); #endif __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_14, 5, __pyx_t_12, __pyx_t_11); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7873, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_8 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_15}; __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7872, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); } __Pyx_Raise(__pyx_t_6, 0, 0, 0); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __PYX_ERR(0, 7872, __pyx_L1_error)
+07874: f'(have {len(col_names)} columns).')
__pyx_t_12 = PyObject_Length(__pyx_v_col_names); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 7874, __pyx_L1_error) __pyx_t_13 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_12, 0, ' ', 'd'); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7874, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14[0] = __pyx_mstate_global->__pyx_kp_u_symbols_index; __pyx_t_14[1] = __pyx_t_9; __pyx_t_14[2] = __pyx_mstate_global->__pyx_kp_u_out_of_range_have; __pyx_t_14[3] = __pyx_t_13; __pyx_t_14[4] = __pyx_mstate_global->__pyx_kp_u_columns_4;
+07875: name = col_names[idx]
__pyx_t_6 = __Pyx_GetItemInt(__pyx_v_col_names, __pyx_v_idx, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7875, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_6); __pyx_t_6 = 0;
07876: else:
+07877: raise TypeError(
/*else*/ {
__pyx_t_15 = NULL;
+07878: f'symbols entry must be str or int, got '
__pyx_t_12 = 39;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16[1]);
#endif
__pyx_t_11 = 0;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_11 |= __Pyx_PyUnicode_KIND_04(__pyx_t_16[1]);
#endif
__pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_16, 3, __pyx_t_12, __pyx_t_11);
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7878, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
__pyx_t_8 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_t_7};
__pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7877, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
}
__Pyx_Raise(__pyx_t_6, 0, 0, 0);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__PYX_ERR(0, 7877, __pyx_L1_error)
}
__pyx_L21:;
+07879: f'{type(entry).__name__}.')
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_entry)), __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7879, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_t_7, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7879, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_16[0] = __pyx_mstate_global->__pyx_kp_u_symbols_entry_must_be_str_or_int; __pyx_t_16[1] = __pyx_t_13; __pyx_t_16[2] = __pyx_mstate_global->__pyx_kp_u__3;
+07880: is_str = _capsule_column_is_string_like(sliceable, schema, name)
__pyx_t_6 = __pyx_v_name;
__Pyx_INCREF(__pyx_t_6);
if (!(likely(PyUnicode_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_6))) __PYX_ERR(0, 7880, __pyx_L1_error)
__pyx_t_7 = __pyx_f_7questdb_7_client__capsule_column_is_string_like(__pyx_v_sliceable, __pyx_v_schema, ((PyObject*)__pyx_t_6)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7880, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF_SET(__pyx_v_is_str, __pyx_t_7);
__pyx_t_7 = 0;
+07881: if is_str is None:
__pyx_t_2 = (__pyx_v_is_str == Py_None);
if (__pyx_t_2) {
/* … */
}
+07882: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L0;
+07883: if not is_str:
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_is_str); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7883, __pyx_L1_error) __pyx_t_1 = (!__pyx_t_2); if (unlikely(__pyx_t_1)) { /* … */ }
+07884: raise QuestDBError(
__pyx_t_6 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7884, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_15);
+07885: QuestDBErrorCode.BadDataFrame,
__Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7885, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7885, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+07886: f'Bad argument `symbols`: column {name!r} is not a '
__pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7886, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_16[0] = __pyx_mstate_global->__pyx_kp_u_Bad_argument_symbols_column; __pyx_t_16[1] = __pyx_t_13; __pyx_t_16[2] = __pyx_mstate_global->__pyx_kp_u_is_not_a_strings_column; __pyx_t_12 = 56; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16[1]); #endif __pyx_t_11 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_11 |= __Pyx_PyUnicode_KIND_04(__pyx_t_16[1]); #endif __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_16, 3, __pyx_t_12, __pyx_t_11); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 7886, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_15))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_15); assert(__pyx_t_6); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_15); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_15, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_9, __pyx_t_17}; __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_15, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7884, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __Pyx_Raise(__pyx_t_7, 0, 0, 0); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __PYX_ERR(0, 7884, __pyx_L1_error)
07887: f'strings column.')
+07888: listed.add(name)
__pyx_t_10 = PySet_Add(__pyx_v_listed, __pyx_v_name); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 7888, __pyx_L1_error)
+07889: out.append((name.encode('utf-8'), symbol_kind, 0))
__pyx_t_15 = __pyx_v_name;
__Pyx_INCREF(__pyx_t_15);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_mstate_global->__pyx_kp_u_utf_8};
__pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7889, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
}
__pyx_t_15 = __Pyx_PyLong_From_int(__pyx_v_symbol_kind); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7889, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_15);
__pyx_t_17 = PyTuple_New(3); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 7889, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
__Pyx_GIVEREF(__pyx_t_7);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_7) != (0)) __PYX_ERR(0, 7889, __pyx_L1_error);
__Pyx_GIVEREF(__pyx_t_15);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_t_15) != (0)) __PYX_ERR(0, 7889, __pyx_L1_error);
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_17, 2, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 7889, __pyx_L1_error);
__pyx_t_7 = 0;
__pyx_t_15 = 0;
__pyx_t_10 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_17); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 7889, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
07890:
07891: # Match the row/numpy planner: an explicit symbols list marks only the
07892: # listed columns as symbols; every other dict-encoded (categorical)
07893: # column is forced to a plain VARCHAR field rather than auto-symbolized.
+07894: dict_names = _capsule_get_dict_string_column_names(sliceable, schema)
__pyx_t_3 = __pyx_f_7questdb_7_client__capsule_get_dict_string_column_names(__pyx_v_sliceable, __pyx_v_schema); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7894, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_dict_names = __pyx_t_3; __pyx_t_3 = 0;
+07895: if dict_names is None:
__pyx_t_1 = (__pyx_v_dict_names == Py_None);
if (__pyx_t_1) {
/* … */
}
+07896: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+07897: for name in dict_names:
if (likely(PyList_CheckExact(__pyx_v_dict_names)) || PyTuple_CheckExact(__pyx_v_dict_names)) { __pyx_t_3 = __pyx_v_dict_names; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_dict_names); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7897, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7897, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_5)) { if (likely(PyList_CheckExact(__pyx_t_3))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7897, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } __pyx_t_17 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_3, __pyx_t_4, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_4; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7897, __pyx_L1_error) #endif if (__pyx_t_4 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_17 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4)); #else __pyx_t_17 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4); #endif ++__pyx_t_4; } if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 7897, __pyx_L1_error) } else { __pyx_t_17 = __pyx_t_5(__pyx_t_3); if (unlikely(!__pyx_t_17)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7897, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_17); __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_17); __pyx_t_17 = 0; /* … */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07898: if name not in listed:
__pyx_t_1 = (__Pyx_PySet_ContainsTF(__pyx_v_name, __pyx_v_listed, Py_NE)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7898, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+07899: out.append((name.encode('utf-8'), not_symbol_kind, 0))
__pyx_t_15 = __pyx_v_name;
__Pyx_INCREF(__pyx_t_15);
__pyx_t_8 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_mstate_global->__pyx_kp_u_utf_8};
__pyx_t_17 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 7899, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
}
__pyx_t_15 = __Pyx_PyLong_From_int(__pyx_v_not_symbol_kind); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7899, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_15);
__pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7899, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_GIVEREF(__pyx_t_17);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_17) != (0)) __PYX_ERR(0, 7899, __pyx_L1_error);
__Pyx_GIVEREF(__pyx_t_15);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_15) != (0)) __PYX_ERR(0, 7899, __pyx_L1_error);
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 7899, __pyx_L1_error);
__pyx_t_17 = 0;
__pyx_t_15 = 0;
__pyx_t_10 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_7); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 7899, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+07900: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
07901:
07902:
+07903: cdef object _merge_capsule_overrides(
static PyObject *__pyx_f_7questdb_7_client__merge_capsule_overrides(PyObject *__pyx_v_weaker, PyObject *__pyx_v_stronger) {
PyObject *__pyx_v_stronger_names = 0;
PyObject *__pyx_v_merged = 0;
PyObject *__pyx_v_entry = 0;
PyObject *__pyx_9genexpr21__pyx_v_entry = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client._merge_capsule_overrides", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_stronger_names);
__Pyx_XDECREF(__pyx_v_merged);
__Pyx_XDECREF(__pyx_v_entry);
__Pyx_XDECREF(__pyx_9genexpr21__pyx_v_entry);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07904: object weaker, object stronger):
07905: """Merge two override lists, `stronger` winning on name collision.
07906:
07907: The three sources rank: `schema_overrides` states a type outright,
07908: `symbols` states one for string columns, and `df.attrs['questdb']`
07909: only recalls what a column held when it was read back out of
07910: QuestDB.
07911: """
07912: cdef set stronger_names
07913: cdef list merged
07914: cdef object entry
+07915: if not weaker and stronger is None:
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_weaker); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7915, __pyx_L1_error) __pyx_t_3 = (!__pyx_t_2); if (__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L4_bool_binop_done; } __pyx_t_3 = (__pyx_v_stronger == Py_None); __pyx_t_1 = __pyx_t_3; __pyx_L4_bool_binop_done:; if (__pyx_t_1) { /* … */ }
+07916: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+07917: if not weaker:
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_weaker); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7917, __pyx_L1_error) __pyx_t_3 = (!__pyx_t_1); if (__pyx_t_3) { /* … */ }
+07918: return stronger
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_stronger);
__pyx_r = __pyx_v_stronger;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+07919: if stronger is None:
__pyx_t_3 = (__pyx_v_stronger == Py_None);
if (__pyx_t_3) {
/* … */
}
+07920: return weaker
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_weaker);
__pyx_r = __pyx_v_weaker;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+07921: stronger_names = {entry[0] for entry in stronger}
{ /* enter inner scope */
__pyx_t_4 = PySet_New(NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7921, __pyx_L10_error)
__Pyx_GOTREF(__pyx_t_4);
if (likely(PyList_CheckExact(__pyx_v_stronger)) || PyTuple_CheckExact(__pyx_v_stronger)) {
__pyx_t_5 = __pyx_v_stronger; __Pyx_INCREF(__pyx_t_5);
__pyx_t_6 = 0;
__pyx_t_7 = NULL;
} else {
__pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_stronger); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7921, __pyx_L10_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7921, __pyx_L10_error)
}
for (;;) {
if (likely(!__pyx_t_7)) {
if (likely(PyList_CheckExact(__pyx_t_5))) {
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_5);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7921, __pyx_L10_error)
#endif
if (__pyx_t_6 >= __pyx_temp) break;
}
__pyx_t_8 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_5, __pyx_t_6, __Pyx_ReferenceSharing_OwnStrongReference);
++__pyx_t_6;
} else {
{
Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_5);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7921, __pyx_L10_error)
#endif
if (__pyx_t_6 >= __pyx_temp) break;
}
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
__pyx_t_8 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6));
#else
__pyx_t_8 = __Pyx_PySequence_ITEM(__pyx_t_5, __pyx_t_6);
#endif
++__pyx_t_6;
}
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7921, __pyx_L10_error)
} else {
__pyx_t_8 = __pyx_t_7(__pyx_t_5);
if (unlikely(!__pyx_t_8)) {
PyObject* exc_type = PyErr_Occurred();
if (exc_type) {
if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7921, __pyx_L10_error)
PyErr_Clear();
}
break;
}
}
__Pyx_GOTREF(__pyx_t_8);
__Pyx_XDECREF_SET(__pyx_9genexpr21__pyx_v_entry, __pyx_t_8);
__pyx_t_8 = 0;
__pyx_t_8 = __Pyx_GetItemInt(__pyx_9genexpr21__pyx_v_entry, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7921, __pyx_L10_error)
__Pyx_GOTREF(__pyx_t_8);
if (unlikely(PySet_Add(__pyx_t_4, __pyx_t_8))) __PYX_ERR(0, 7921, __pyx_L10_error)
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_9genexpr21__pyx_v_entry); __pyx_9genexpr21__pyx_v_entry = 0;
goto __pyx_L14_exit_scope;
__pyx_L10_error:;
__Pyx_XDECREF(__pyx_9genexpr21__pyx_v_entry); __pyx_9genexpr21__pyx_v_entry = 0;
goto __pyx_L1_error;
__pyx_L14_exit_scope:;
} /* exit inner scope */
__pyx_v_stronger_names = ((PyObject*)__pyx_t_4);
__pyx_t_4 = 0;
+07922: merged = list(stronger)
__pyx_t_4 = PySequence_List(__pyx_v_stronger); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7922, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_merged = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0;
+07923: for entry in weaker:
if (likely(PyList_CheckExact(__pyx_v_weaker)) || PyTuple_CheckExact(__pyx_v_weaker)) { __pyx_t_4 = __pyx_v_weaker; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0; __pyx_t_7 = NULL; } else { __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_weaker); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7923, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7923, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_7)) { if (likely(PyList_CheckExact(__pyx_t_4))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7923, __pyx_L1_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } __pyx_t_5 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_4, __pyx_t_6, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_6; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7923, __pyx_L1_error) #endif if (__pyx_t_6 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6)); #else __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_6); #endif ++__pyx_t_6; } if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7923, __pyx_L1_error) } else { __pyx_t_5 = __pyx_t_7(__pyx_t_4); if (unlikely(!__pyx_t_5)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7923, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_5); __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_5); __pyx_t_5 = 0; /* … */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+07924: if entry[0] not in stronger_names:
__pyx_t_5 = __Pyx_GetItemInt(__pyx_v_entry, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7924, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = (__Pyx_PySet_ContainsTF(__pyx_t_5, __pyx_v_stronger_names, Py_NE)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 7924, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_3) { /* … */ }
+07925: merged.append(entry)
__pyx_t_9 = __Pyx_PyList_Append(__pyx_v_merged, __pyx_v_entry); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 7925, __pyx_L1_error)
+07926: return merged
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_merged);
__pyx_r = __pyx_v_merged;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
07927:
07928:
07929: # `df.attrs['questdb']` column kinds that an Arrow override can restore.
07930: # The other kinds either survive on their storage type alone (VARCHAR,
07931: # SYMBOL, TIMESTAMP, ...) or have no override to restore them with
07932: # (BYTE / SHORT / INT, which the Arrow classifier widens). DATE is the
07933: # one kind restored by reshaping the column rather than by an override,
07934: # in `_dataframe_normalize_claimed_date`: no Arrow override names it,
07935: # and the Arrow type it needs is the whole claim.
07936: #: How long `QuestDB.close()` with no `timeout` waits while a lease is
07937: #: outstanding before it stops waiting and raises. Generous, because a
07938: #: lease held by another thread may be part-way through a large load
07939: #: and that wait is the correct one; finite, because a lease held by
07940: #: the calling thread, or by one that has since finished, is never
07941: #: coming back and an unbounded wait there is a hang with no way out.
07942: #: Hitting the bound leaves the handle closing; a later `close()`
07943: #: resumes the wait. A `close()` with no `timeout` puts no bound on
07944: #: calls in progress: a caller whose calls may never finish passes one.
+07945: cdef double _CLOSE_LEASE_WAIT_LIMIT_S = 60.0
__pyx_v_7questdb_7_client__CLOSE_LEASE_WAIT_LIMIT_S = 60.0;
07946:
07947:
+07948: class _CloseTimeoutDefault:
__pyx_t_20 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_mstate_global->__pyx_empty_tuple, __pyx_mstate_global->__pyx_n_u_CloseTimeoutDefault, __pyx_mstate_global->__pyx_n_u_CloseTimeoutDefault, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_What_QuestDB_close_gets_when_no); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 7948, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); /* … */ __pyx_t_17 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_mstate_global->__pyx_n_u_CloseTimeoutDefault, __pyx_mstate_global->__pyx_empty_tuple, __pyx_t_20, NULL, 0, 0); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 7948, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_CloseTimeoutDefault, __pyx_t_17) < (0)) __PYX_ERR(0, 7948, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
07949: """What `QuestDB.close()` gets when no `timeout` is passed.
07950:
07951: `None` already means "no limit", so the default -- the lease bound
07952: above and no bound on calls -- needs a value of its own.
07953: """
+07954: __slots__ = ()
if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_slots, __pyx_mstate_global->__pyx_empty_tuple) < (0)) __PYX_ERR(0, 7954, __pyx_L1_error)
07955:
+07956: def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_20_CloseTimeoutDefault_1__repr__(PyObject *__pyx_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_20_CloseTimeoutDefault_1__repr__ = {"__repr__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_20_CloseTimeoutDefault_1__repr__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_20_CloseTimeoutDefault_1__repr__(PyObject *__pyx_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
CYTHON_UNUSED PyObject *__pyx_v_self = 0;
#if !CYTHON_VECTORCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
#if !CYTHON_VECTORCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0};
PyObject* values[1] = {0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 7956, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 7956, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__repr__", 0) < (0)) __PYX_ERR(0, 7956, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__repr__", 1, 1, 1, i); __PYX_ERR(0, 7956, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 7956, __pyx_L3_error)
}
__pyx_v_self = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__repr__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 7956, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client._CloseTimeoutDefault.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_20_CloseTimeoutDefault___repr__(__pyx_self, __pyx_v_self);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_20_CloseTimeoutDefault___repr__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_20_CloseTimeoutDefault_1__repr__, 0, __pyx_mstate_global->__pyx_n_u_CloseTimeoutDefault___repr, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[119])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 7956, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
#endif
if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_repr, __pyx_t_17) < (0)) __PYX_ERR(0, 7956, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+07957: return '<default>'
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_default);
__pyx_r = __pyx_mstate_global->__pyx_kp_u_default;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
07958:
07959:
+07960: _CLOSE_TIMEOUT_DEFAULT = _CloseTimeoutDefault()
__pyx_t_17 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_CloseTimeoutDefault); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 7960, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_17, NULL}; __pyx_t_20 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_19, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 7960, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); } if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_CLOSE_TIMEOUT_DEFAULT, __pyx_t_20) < (0)) __PYX_ERR(0, 7960, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
07961:
07962:
+07963: cdef double _close_timeout_seconds(object timeout) except -1.0:
static double __pyx_f_7questdb_7_client__close_timeout_seconds(PyObject *__pyx_v_timeout) {
double __pyx_v_seconds;
double __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client._close_timeout_seconds", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = (-1.0);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07964: """`QuestDB.close()`'s `timeout` as seconds, refused unless it is a
07965: number of seconds, 0 or more."""
07966: cdef double seconds
+07967: if isinstance(timeout, bool) or not isinstance(timeout, _numbers.Real):
__pyx_t_2 = __Pyx_TypeCheck(__pyx_v_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); if (!__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L4_bool_binop_done; } __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_numbers); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7967, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Real); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7967, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_2 = PyObject_IsInstance(__pyx_v_timeout, __pyx_t_4); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7967, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = (!__pyx_t_2); __pyx_t_1 = __pyx_t_5; __pyx_L4_bool_binop_done:; if (unlikely(__pyx_t_1)) { /* … */ }
+07968: raise TypeError(
__pyx_t_3 = NULL;
+07969: 'close() timeout must be None or a number of seconds, not '
__pyx_t_9 = 58;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[1]);
#endif
__pyx_t_10 = 0;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_10 |= __Pyx_PyUnicode_KIND_04(__pyx_t_8[1]);
#endif
__pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, __pyx_t_9, __pyx_t_10);
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7969, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_11 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_6};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7968, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 7968, __pyx_L1_error)
+07970: f'{_fqn(type(timeout))}.')
__pyx_t_6 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_timeout)))); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7970, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7970, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_close_timeout_must_be_None_or_a; __pyx_t_8[1] = __pyx_t_7; __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u__3;
+07971: seconds = float(timeout)
__pyx_t_12 = __Pyx_PyObject_AsDouble(__pyx_v_timeout); if (unlikely(__PYX_CHECK_FLOAT_EXCEPTION(__pyx_t_12, ((double)((double)-1))) && PyErr_Occurred())) __PYX_ERR(0, 7971, __pyx_L1_error) __pyx_v_seconds = __pyx_t_12;
07972: # Written so that NaN, which compares false either way, is refused.
+07973: if not seconds >= 0.0:
__pyx_t_1 = (!(__pyx_v_seconds >= 0.0));
if (unlikely(__pyx_t_1)) {
/* … */
}
+07974: raise ValueError(
__pyx_t_6 = NULL;
+07975: 'close() timeout must be a number of seconds, 0 or more, '
__pyx_t_9 = 61;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8[1]);
#endif
__pyx_t_10 = 0;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_10 |= __Pyx_PyUnicode_KIND_04(__pyx_t_8[1]);
#endif
__pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, __pyx_t_9, __pyx_t_10);
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7975, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_11 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_7};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7974, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 7974, __pyx_L1_error)
+07976: f'not {timeout!r}.')
__pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_timeout), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7976, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_close_timeout_must_be_a_number_o; __pyx_t_8[1] = __pyx_t_3; __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u__3;
+07977: return seconds
{
__pyx_r = __pyx_v_seconds;
}
goto __pyx_L0;
07978:
07979:
+07980: cdef str _close_gave_up_message(
static PyObject *__pyx_f_7questdb_7_client__close_gave_up_message(double __pyx_v_waited, size_t __pyx_v_leases, size_t __pyx_v_calls) {
PyObject *__pyx_v_message = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client._close_gave_up_message", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_message);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
07981: double waited, size_t leases, size_t calls):
07982: """What a `close()` that ran out of time says it left behind."""
07983: cdef str message = (
+07984: f'close() stopped waiting after {waited:g}s: {leases} '
__pyx_t_1 = __Pyx_PyUnicode_FromDouble(__pyx_v_waited, 'g', 6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7984, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyUnicode_From_size_t(__pyx_v_leases, 0, ' ', 'd'); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7984, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); /* … */ __pyx_t_5 = 113; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4[1]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4[3]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4[5]); #endif __pyx_t_6 = 0; __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_4, 7, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7984, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_message = ((PyObject*)__pyx_t_7); __pyx_t_7 = 0;
07985: 'outstanding sender()/reader() lease(s) and '
+07986: f'{calls} call(s) in progress on this handle.')
__pyx_t_3 = __Pyx_PyUnicode_From_size_t(__pyx_v_calls, 0, ' ', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7986, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4[0] = __pyx_mstate_global->__pyx_kp_u_close_stopped_waiting_after; __pyx_t_4[1] = __pyx_t_1; __pyx_t_4[2] = __pyx_mstate_global->__pyx_kp_u_s_2; __pyx_t_4[3] = __pyx_t_2; __pyx_t_4[4] = __pyx_mstate_global->__pyx_kp_u_outstanding_sender_reader_lease; __pyx_t_4[5] = __pyx_t_3; __pyx_t_4[6] = __pyx_mstate_global->__pyx_kp_u_call_s_in_progress_on_this_hand;
+07987: if leases:
__pyx_t_8 = (__pyx_v_leases != 0);
if (__pyx_t_8) {
/* … */
}
+07988: message += (
__pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_v_message, __pyx_mstate_global->__pyx_kp_u_A_lease_is_returned_only_by_the); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7988, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF_SET(__pyx_v_message, ((PyObject*)__pyx_t_7)); __pyx_t_7 = 0;
07989: ' A lease is returned only by the code holding it -- one '
07990: 'held by this thread, or by a thread that has finished, '
07991: 'never will be.')
+07992: if calls:
__pyx_t_8 = (__pyx_v_calls != 0);
if (__pyx_t_8) {
/* … */
}
+07993: message += (
__pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_v_message, __pyx_mstate_global->__pyx_kp_u_A_call_in_progress_returns_once); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7993, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF_SET(__pyx_v_message, ((PyObject*)__pyx_t_7)); __pyx_t_7 = 0;
07994: " A call in progress returns once its work is done; close() "
07995: "can't interrupt it.")
+07996: return message + (
__pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_v_message, __pyx_mstate_global->__pyx_kp_u_The_handle_stays_closing_and_ta); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7996, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = ((PyObject*)__pyx_t_7); } __Pyx_XDECREF(__pyx_temp); } __pyx_t_7 = 0; goto __pyx_L0;
07997: ' The handle stays closing and takes no new work. Call close() '
07998: 'again once nothing is outstanding, or with a larger timeout -- '
07999: 'timeout=None waits without a limit.')
08000:
08001:
+08002: def _debug_close_lease_wait_limit_s():
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_32_debug_close_lease_wait_limit_s(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_31_debug_close_lease_wait_limit_s, "The bound `QuestDB.close()` puts on waiting for leases.\n\n Not part of the public API. Exposed so a test can reach the give-up\n path in a second rather than a minute; the bound is deliberately\n longer than any wait worth testing.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_32_debug_close_lease_wait_limit_s = {"_debug_close_lease_wait_limit_s", (PyCFunction)__pyx_pw_7questdb_7_client_32_debug_close_lease_wait_limit_s, METH_NOARGS, __pyx_doc_7questdb_7_client_31_debug_close_lease_wait_limit_s}; static PyObject *__pyx_pw_7questdb_7_client_32_debug_close_lease_wait_limit_s(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_close_lease_wait_limit_s (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_7questdb_7_client_31_debug_close_lease_wait_limit_s(__pyx_self); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_31_debug_close_lease_wait_limit_s(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("questdb._client._debug_close_lease_wait_limit_s", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_32_debug_close_lease_wait_limit_s, 0, __pyx_mstate_global->__pyx_n_u_debug_close_lease_wait_limit_s, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[120])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 8002, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_close_lease_wait_limit_s, __pyx_t_20) < (0)) __PYX_ERR(0, 8002, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
08003: """The bound `QuestDB.close()` puts on waiting for leases.
08004:
08005: Not part of the public API. Exposed so a test can reach the give-up
08006: path in a second rather than a minute; the bound is deliberately
08007: longer than any wait worth testing.
08008: """
+08009: return _CLOSE_LEASE_WAIT_LIMIT_S
__pyx_t_1 = PyFloat_FromDouble(__pyx_v_7questdb_7_client__CLOSE_LEASE_WAIT_LIMIT_S); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8009, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
08010:
08011:
+08012: def _debug_set_close_lease_wait_limit_s(double seconds):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_34_debug_set_close_lease_wait_limit_s(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_33_debug_set_close_lease_wait_limit_s, "Set the bound above. Not part of the public API."); static PyMethodDef __pyx_mdef_7questdb_7_client_34_debug_set_close_lease_wait_limit_s = {"_debug_set_close_lease_wait_limit_s", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_34_debug_set_close_lease_wait_limit_s, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_33_debug_set_close_lease_wait_limit_s}; static PyObject *__pyx_pw_7questdb_7_client_34_debug_set_close_lease_wait_limit_s(PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { double __pyx_v_seconds; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_debug_set_close_lease_wait_limit_s (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_seconds,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 8012, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 8012, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_set_close_lease_wait_limit_s", 0) < (0)) __PYX_ERR(0, 8012, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_set_close_lease_wait_limit_s", 1, 1, 1, i); __PYX_ERR(0, 8012, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 8012, __pyx_L3_error) } __pyx_v_seconds = __Pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_seconds == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 8012, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_debug_set_close_lease_wait_limit_s", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 8012, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client._debug_set_close_lease_wait_limit_s", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_33_debug_set_close_lease_wait_limit_s(__pyx_self, __pyx_v_seconds); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_33_debug_set_close_lease_wait_limit_s(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_seconds) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_34_debug_set_close_lease_wait_limit_s, 0, __pyx_mstate_global->__pyx_n_u_debug_set_close_lease_wait_limi, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[121])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 8012, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20); #endif if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_set_close_lease_wait_limi, __pyx_t_20) < (0)) __PYX_ERR(0, 8012, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
08013: """Set the bound above. Not part of the public API."""
08014: global _CLOSE_LEASE_WAIT_LIMIT_S
+08015: _CLOSE_LEASE_WAIT_LIMIT_S = seconds
__pyx_v_7questdb_7_client__CLOSE_LEASE_WAIT_LIMIT_S = __pyx_v_seconds;
08016:
08017:
08018: cdef dict _ATTRS_OVERRIDE_KINDS = {
+08019: 'ipv4': <int>qwp_arrow_override_ipv4,
__pyx_t_20 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 8019, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); __pyx_t_19 = __Pyx_PyLong_From_int(((int)qwp_arrow_override_ipv4)); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 8019, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ipv4, __pyx_t_19) < (0)) __PYX_ERR(0, 8019, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+08020: 'char': <int>qwp_arrow_override_char,
__pyx_t_19 = __Pyx_PyLong_From_int(((int)qwp_arrow_override_char)); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 8020, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_char_2, __pyx_t_19) < (0)) __PYX_ERR(0, 8019, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+08021: 'uuid': <int>qwp_arrow_override_uuid,
__pyx_t_19 = __Pyx_PyLong_From_int(((int)qwp_arrow_override_uuid)); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 8021, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_uuid, __pyx_t_19) < (0)) __PYX_ERR(0, 8019, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+08022: 'long256': <int>qwp_arrow_override_long256,
__pyx_t_19 = __Pyx_PyLong_From_int(((int)qwp_arrow_override_long256)); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 8022, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_long256, __pyx_t_19) < (0)) __PYX_ERR(0, 8019, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+08023: 'geohash': <int>qwp_arrow_override_geohash,
__pyx_t_19 = __Pyx_PyLong_From_int(((int)qwp_arrow_override_geohash)); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 8023, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_geohash_2, __pyx_t_19) < (0)) __PYX_ERR(0, 8019, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_XGOTREF(__pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS, ((PyObject*)__pyx_t_20)); __Pyx_GIVEREF(__pyx_t_20); __pyx_t_20 = 0;
08024: }
08025:
08026:
+08027: cdef object _capsule_pandas_dtype(object dtypes, object name):
static PyObject *__pyx_f_7questdb_7_client__capsule_pandas_dtype(PyObject *__pyx_v_dtypes, PyObject *__pyx_v_name) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client._capsule_pandas_dtype", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08028: """The pandas dtype of column `name`, or None where the frame has
08029: no such column.
08030:
08031: Takes the frame's `dtypes` rather than the frame: reading
08032: `frame.dtypes` builds a fresh Series every time, so looking it up
08033: per column was quadratic in the column count, on a path a streaming
08034: `iter_pandas` feeds per batch.
08035: """
+08036: try:
{
/*try:*/ {
/* … */
}
__pyx_L3_error:;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
__pyx_L5_except_error:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L1_error;
__pyx_L7_try_return:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L0;
__pyx_L6_except_return:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L0;
}
+08037: return dtypes[name]
__pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_dtypes, __pyx_v_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8037, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_4); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_4; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_4 = 0; goto __pyx_L7_try_return;
+08038: except Exception:
__pyx_t_5 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_5) { __Pyx_ErrRestore(0,0,0);
+08039: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L6_except_return;
}
goto __pyx_L5_except_error;
08040:
08041:
+08042: cdef object _capsule_arrow_type_of(object arrow_dtype, object dtype):
static PyObject *__pyx_f_7questdb_7_client__capsule_arrow_type_of(PyObject *__pyx_v_arrow_dtype, PyObject *__pyx_v_dtype) {
PyObject *__pyx_v_ty = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._capsule_arrow_type_of", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_ty);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08043: """The Arrow storage type inside a pandas dtype, or None where the
08044: dtype holds none.
08045:
08046: A dtype with no Arrow type inside it is a real answer, separate
08047: from a column that is not in the frame: the column is there and
08048: cannot carry the claim. A pandas 3 string column reaches the
08049: capsule path this way, so the two have to be told apart.
08050:
08051: The caller has already established that `arrow_dtype` is a class,
08052: so a None here would be a third answer -- "cannot tell" -- that no
08053: caller is prepared to read.
08054: """
08055: cdef object ty
+08056: if arrow_dtype is None or not isinstance(dtype, arrow_dtype):
__pyx_t_2 = (__pyx_v_arrow_dtype == Py_None);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_arrow_dtype); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8056, __pyx_L1_error)
__pyx_t_3 = (!__pyx_t_2);
__pyx_t_1 = __pyx_t_3;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+08057: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+08058: ty = dtype.pyarrow_dtype
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_pyarrow_dtype); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8058, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_ty = __pyx_t_4; __pyx_t_4 = 0;
+08059: if isinstance(ty, _PYARROW.lib.BaseExtensionType):
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_lib); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8059, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_BaseExtensionType); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8059, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_1 = PyObject_IsInstance(__pyx_v_ty, __pyx_t_5); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 8059, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_1) { /* … */ }
+08060: ty = ty.storage_type
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_ty, __pyx_mstate_global->__pyx_n_u_storage_type); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8060, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF_SET(__pyx_v_ty, __pyx_t_5); __pyx_t_5 = 0;
+08061: return ty
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_ty);
__pyx_r = __pyx_v_ty;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
08062:
08063:
+08064: cdef bint _attrs_override_fits(
static int __pyx_f_7questdb_7_client__attrs_override_fits(PyObject *__pyx_v_types, PyObject *__pyx_v_ty, PyObject *__pyx_v_kind, PyObject *__pyx_v_bits) {
int __pyx_r;
__Pyx_INCREF(__pyx_v_bits);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client._attrs_override_fits", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_bits);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08065: object types, object ty, str kind, object bits) except -1:
08066: """Whether the Arrow type can carry the claimed kind.
08067:
08068: Mirrors what the native client accepts, so a claim that no longer
08069: matches the column is dropped here instead of erroring there. UUID
08070: and LONG256 are held to their fixed widths: those are what the
08071: egress emits, and a variable-width binary claim would only be
08072: caught value by value at encode time.
08073:
08074: `types` is `pyarrow.types`, passed in so the caller reads it once
08075: for the whole frame rather than once per column.
08076: """
+08077: if kind == 'ipv4':
__pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_ipv4, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8077, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+08078: return types.is_uint32(ty)
__pyx_t_3 = __pyx_v_types;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_uint32, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8078, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8078, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
+08079: if kind == 'char':
__pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_char_2, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8079, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+08080: return types.is_uint16(ty)
__pyx_t_3 = __pyx_v_types;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_uint16, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8080, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8080, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
+08081: if kind == 'uuid':
__pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_uuid, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8081, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+08082: return types.is_fixed_size_binary(ty) and ty.byte_width == 16
__pyx_t_3 = __pyx_v_types;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_fixed_size_binary, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8082, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 8082, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_5) {
} else {
__pyx_t_1 = __pyx_t_5;
goto __pyx_L6_bool_binop_done;
}
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_ty, __pyx_mstate_global->__pyx_n_u_byte_width); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8082, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_5 = (__Pyx_PyLong_BoolEqObjC(__pyx_t_2, __pyx_mstate_global->__pyx_int_16, 16, 0)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 8082, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_1 = __pyx_t_5;
__pyx_L6_bool_binop_done:;
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
+08083: if kind == 'long256':
__pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_long256, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8083, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+08084: return types.is_fixed_size_binary(ty) and ty.byte_width == 32
__pyx_t_3 = __pyx_v_types;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_fixed_size_binary, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8084, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 8084, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_5) {
} else {
__pyx_t_1 = __pyx_t_5;
goto __pyx_L9_bool_binop_done;
}
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_ty, __pyx_mstate_global->__pyx_n_u_byte_width); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8084, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_5 = (__Pyx_PyLong_BoolEqObjC(__pyx_t_2, __pyx_mstate_global->__pyx_int_32, 32, 0)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 8084, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_1 = __pyx_t_5;
__pyx_L9_bool_binop_done:;
{
__pyx_r = __pyx_t_1;
}
goto __pyx_L0;
+08085: if kind == 'geohash':
__pyx_t_1 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8085, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+08086: if not _is_integral_not_bool(bits):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_bits); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8086, __pyx_L1_error) __pyx_t_5 = (!__pyx_t_1); if (__pyx_t_5) { /* … */ }
+08087: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+08088: bits = int(bits)
__pyx_t_2 = __Pyx_PyNumber_Int(__pyx_v_bits); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8088, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF_SET(__pyx_v_bits, __pyx_t_2); __pyx_t_2 = 0;
+08089: if bits < 1 or bits > 60:
__pyx_t_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_bits, __pyx_mstate_global->__pyx_int_1, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8089, __pyx_L1_error) if (!__pyx_t_1) { } else { __pyx_t_5 = __pyx_t_1; goto __pyx_L14_bool_binop_done; } __pyx_t_1 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_bits, __pyx_mstate_global->__pyx_int_60, Py_GT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8089, __pyx_L1_error) __pyx_t_5 = __pyx_t_1; __pyx_L14_bool_binop_done:; if (__pyx_t_5) { /* … */ }
+08090: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
08091: # Signed Arrow carriers preserve their raw two's-complement bits,
08092: # including the sign bit. The same four limits are returned by
08093: # `_geohash_dtype_max_bits`.
+08094: if types.is_int8(ty):
__pyx_t_3 = __pyx_v_types;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_int8, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8094, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 8094, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_5) {
/* … */
}
+08095: return bits <= 8
__pyx_t_2 = __Pyx_PyObject_CompareLe_object_int(__pyx_v_bits, __pyx_mstate_global->__pyx_int_8, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8095, __pyx_L1_error) __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8095, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { __pyx_r = __pyx_t_5; } goto __pyx_L0;
+08096: if types.is_int16(ty):
__pyx_t_3 = __pyx_v_types;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_int16, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8096, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 8096, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_5) {
/* … */
}
+08097: return bits <= 16
__pyx_t_2 = __Pyx_PyObject_CompareLe_object_int(__pyx_v_bits, __pyx_mstate_global->__pyx_int_16, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8097, __pyx_L1_error) __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8097, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { __pyx_r = __pyx_t_5; } goto __pyx_L0;
+08098: if types.is_int32(ty):
__pyx_t_3 = __pyx_v_types;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_int32, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8098, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 8098, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_5) {
/* … */
}
+08099: return bits <= 32
__pyx_t_2 = __Pyx_PyObject_CompareLe_object_int(__pyx_v_bits, __pyx_mstate_global->__pyx_int_32, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8099, __pyx_L1_error) __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8099, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { __pyx_r = __pyx_t_5; } goto __pyx_L0;
+08100: if types.is_int64(ty):
__pyx_t_3 = __pyx_v_types;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_int64, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8100, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 8100, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_5) {
/* … */
}
+08101: return bits <= 60
__pyx_t_2 = __Pyx_PyObject_CompareLe_object_int(__pyx_v_bits, __pyx_mstate_global->__pyx_int_60, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8101, __pyx_L1_error) __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8101, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { __pyx_r = __pyx_t_5; } goto __pyx_L0;
+08102: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+08103: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
08104:
08105:
+08106: cdef object _capsule_roundtrip_overrides(object frame, object dtypes):
static PyObject *__pyx_f_7questdb_7_client__capsule_roundtrip_overrides(PyObject *__pyx_v_frame, PyObject *__pyx_v_dtypes) {
PyObject *__pyx_v_out = 0;
PyObject *__pyx_v_cols_meta = 0;
PyObject *__pyx_v_meta = 0;
PyObject *__pyx_v_ty = 0;
PyObject *__pyx_v_bits = 0;
PyObject *__pyx_v_arrow_dtype = 0;
PyObject *__pyx_v_types = 0;
PyObject *__pyx_v_dtype = 0;
PyObject *__pyx_v_kind = 0;
int __pyx_v_kind_int;
int __pyx_v_arg_int;
PyObject *__pyx_v_name = NULL;
PyObject *__pyx_r = NULL;
__Pyx_INCREF(__pyx_v_dtypes);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_AddTraceback("questdb._client._capsule_roundtrip_overrides", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_out);
__Pyx_XDECREF(__pyx_v_cols_meta);
__Pyx_XDECREF(__pyx_v_meta);
__Pyx_XDECREF(__pyx_v_ty);
__Pyx_XDECREF(__pyx_v_bits);
__Pyx_XDECREF(__pyx_v_arrow_dtype);
__Pyx_XDECREF(__pyx_v_types);
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_XDECREF(__pyx_v_kind);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_XDECREF(__pyx_v_dtypes);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08107: """Arrow overrides rebuilt from the `df.attrs['questdb']` metadata
08108: that `QueryResult.to_pandas()` attaches.
08109:
08110: A pandas dtype holds an Arrow type and no field, so the
08111: `questdb.column_type` claim the egress stamps on the field is gone
08112: by the time a frame comes back in; without it a UUID or LONG256
08113: column would go back out as BINARY and IPV4 / CHAR / GEOHASH as
08114: plain integers. The claim recalls what the frame held when it was
08115: read, so a column since dropped, renamed or retyped is skipped
08116: rather than rejected.
08117: """
+08118: cdef list out = []
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8118, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_out = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
08119: cdef object cols_meta, meta, ty, bits, arrow_dtype, types
08120: cdef object dtype
08121: cdef str kind
08122: cdef int kind_int
08123: cdef int arg_int
+08124: if not _is_pandas_dataframe_object(frame):
__pyx_t_2 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_frame); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8124, __pyx_L1_error) __pyx_t_3 = (!__pyx_t_2); if (__pyx_t_3) { /* … */ }
+08125: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+08126: cols_meta = _roundtrip_columns_meta(frame)
__pyx_t_1 = __pyx_f_7questdb_7_client__roundtrip_columns_meta(__pyx_v_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8126, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_cols_meta = __pyx_t_1; __pyx_t_1 = 0;
+08127: if not cols_meta:
__pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_cols_meta); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 8127, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_3); if (__pyx_t_2) { /* … */ }
+08128: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+08129: _dataframe_may_import_deps()
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8129, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+08130: if not _dataframe_try_import_pyarrow():
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_try_import_pyarrow(); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8130, __pyx_L1_error) __pyx_t_3 = (!__pyx_t_2); if (__pyx_t_3) { /* … */ }
+08131: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
08132: # Read once for the whole frame, not once per column; the capsule
08133: # path hands over the `df.dtypes` it already read.
+08134: if dtypes is None:
__pyx_t_3 = (__pyx_v_dtypes == Py_None);
if (__pyx_t_3) {
/* … */
}
+08135: dtypes = frame.dtypes
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8135, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_dtypes, __pyx_t_1); __pyx_t_1 = 0;
+08136: arrow_dtype = getattr(_PANDAS, 'ArrowDtype', None)
__pyx_t_1 = __pyx_v_7questdb_7_client__PANDAS; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetAttr3(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ArrowDtype, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8136, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_arrow_dtype = __pyx_t_4; __pyx_t_4 = 0;
+08137: if arrow_dtype is None:
__pyx_t_3 = (__pyx_v_arrow_dtype == Py_None);
if (__pyx_t_3) {
/* … */
}
08138: # No `ArrowDtype` in this pandas, so no column can be shown to
08139: # hold an Arrow type and every claim would be reported as one
08140: # the column cannot carry. That is "cannot tell", not "cannot
08141: # carry". A frame reaches here through `__arrow_c_stream__`,
08142: # which arrived in the same pandas `ArrowDtype` did, so this is
08143: # the shape of the answer rather than a case that comes up.
+08144: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+08145: types = _PYARROW.types
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8145, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_types = __pyx_t_4; __pyx_t_4 = 0;
+08146: for name, meta in cols_meta.items():
__pyx_t_5 = 0;
if (unlikely(__pyx_v_cols_meta == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
__PYX_ERR(0, 8146, __pyx_L1_error)
}
__pyx_t_1 = __Pyx_dict_iterator(__pyx_v_cols_meta, 0, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8146, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__pyx_t_4 = __pyx_t_1;
__pyx_t_1 = 0;
while (1) {
__pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_4, __pyx_t_6, &__pyx_t_5, &__pyx_t_1, &__pyx_t_8, NULL, __pyx_t_7);
if (unlikely(__pyx_t_9 == 0)) break;
if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 8146, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_GOTREF(__pyx_t_8);
__Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_1);
__pyx_t_1 = 0;
__Pyx_XDECREF_SET(__pyx_v_meta, __pyx_t_8);
__pyx_t_8 = 0;
+08147: if not isinstance(name, str):
__pyx_t_3 = PyUnicode_Check(__pyx_v_name);
__pyx_t_2 = (!__pyx_t_3);
if (__pyx_t_2) {
/* … */
}
+08148: continue
goto __pyx_L8_continue;
+08149: kind = _roundtrip_kind(meta)
__pyx_t_8 = __pyx_f_7questdb_7_client__roundtrip_kind(__pyx_v_meta); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8149, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_XDECREF_SET(__pyx_v_kind, ((PyObject*)__pyx_t_8)); __pyx_t_8 = 0;
+08150: if kind is None or kind not in _ATTRS_OVERRIDE_KINDS:
__pyx_t_3 = (__pyx_v_kind == ((PyObject*)Py_None));
if (!__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L12_bool_binop_done;
}
if (unlikely(__pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
__PYX_ERR(0, 8150, __pyx_L1_error)
}
__pyx_t_3 = (__Pyx_PyDict_ContainsTF(__pyx_v_kind, __pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS, Py_NE)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 8150, __pyx_L1_error)
__pyx_t_2 = __pyx_t_3;
__pyx_L12_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
+08151: continue
goto __pyx_L8_continue;
+08152: kind_int = <int>_ATTRS_OVERRIDE_KINDS[kind]
if (unlikely(__pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
__PYX_ERR(0, 8152, __pyx_L1_error)
}
__pyx_t_8 = __Pyx_PyDict_GetItem(__pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS, __pyx_v_kind); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8152, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_9 = __Pyx_PyLong_As_int(__pyx_t_8); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8152, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_v_kind_int = ((int)__pyx_t_9);
+08153: bits = meta.get('precision_bits') or 0
__pyx_t_10 = __pyx_v_meta;
__Pyx_INCREF(__pyx_t_10);
__pyx_t_11 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_mstate_global->__pyx_n_u_precision_bits};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8153, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8153, __pyx_L1_error)
if (!__pyx_t_2) {
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
} else {
__Pyx_INCREF(__pyx_t_1);
__pyx_t_8 = __pyx_t_1;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L14_bool_binop_done;
}
__pyx_t_1 = __Pyx_PyLong_From_long(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8153, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_8 = __pyx_t_1;
__pyx_t_1 = 0;
__pyx_L14_bool_binop_done:;
__Pyx_XDECREF_SET(__pyx_v_bits, __pyx_t_8);
__pyx_t_8 = 0;
+08154: dtype = _capsule_pandas_dtype(dtypes, name)
__pyx_t_8 = __pyx_f_7questdb_7_client__capsule_pandas_dtype(__pyx_v_dtypes, __pyx_v_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8154, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_8); __pyx_t_8 = 0;
+08155: if dtype is None:
__pyx_t_2 = (__pyx_v_dtype == Py_None);
if (__pyx_t_2) {
/* … */
}
08156: # The column is gone or renamed. That is the drift the
08157: # claim is meant to survive quietly.
+08158: continue
goto __pyx_L8_continue;
+08159: ty = _capsule_arrow_type_of(arrow_dtype, dtype)
__pyx_t_8 = __pyx_f_7questdb_7_client__capsule_arrow_type_of(__pyx_v_arrow_dtype, __pyx_v_dtype); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8159, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_XDECREF_SET(__pyx_v_ty, __pyx_t_8); __pyx_t_8 = 0;
+08160: if ty is None:
__pyx_t_2 = (__pyx_v_ty == Py_None);
if (__pyx_t_2) {
/* … */
}
08161: # The column is here in a dtype that holds no Arrow type --
08162: # a pandas 3 string column, say -- so no claim of any kind
08163: # fits it. The NumPy planner answers the same frame with a
08164: # log notice, and both planners answering alike is the point.
+08165: _log_roundtrip_claim_dropped(name, kind, dtype)
__pyx_t_8 = __pyx_f_7questdb_7_client__log_roundtrip_claim_dropped(__pyx_v_name, __pyx_v_kind, __pyx_v_dtype); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8165, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+08166: continue
goto __pyx_L8_continue;
+08167: if not _attrs_override_fits(types, ty, kind, bits):
__pyx_t_2 = __pyx_f_7questdb_7_client__attrs_override_fits(__pyx_v_types, __pyx_v_ty, __pyx_v_kind, __pyx_v_bits); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8167, __pyx_L1_error)
__pyx_t_3 = (!__pyx_t_2);
if (__pyx_t_3) {
/* … */
}
+08168: _log_roundtrip_claim_dropped(name, kind, ty)
__pyx_t_8 = __pyx_f_7questdb_7_client__log_roundtrip_claim_dropped(__pyx_v_name, __pyx_v_kind, __pyx_v_ty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8168, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+08169: continue
goto __pyx_L8_continue;
08170: # Only GEOHASH takes an argument, and `_attrs_override_fits` has
08171: # already held it to a whole number in 1..=60.
+08172: arg_int = int(bits) if kind == 'geohash' else 0
__pyx_t_3 = __Pyx_PyObject_CompareBoolEq_str_str(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 8172, __pyx_L1_error) if (__pyx_t_3) { __pyx_t_8 = __Pyx_PyNumber_Int(__pyx_v_bits); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8172, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_12 = __Pyx_PyLong_As_int(__pyx_t_8); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8172, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_9 = __pyx_t_12; } else { __pyx_t_9 = 0; } __pyx_v_arg_int = __pyx_t_9;
+08173: out.append((name.encode('utf-8'), kind_int, arg_int))
__pyx_t_1 = __pyx_v_name;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_11 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_mstate_global->__pyx_kp_u_utf_8};
__pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8173, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
}
__pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_kind_int); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8173, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_10 = __Pyx_PyLong_From_int(__pyx_v_arg_int); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8173, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 8173, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_13);
__Pyx_GIVEREF(__pyx_t_8);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_8) != (0)) __PYX_ERR(0, 8173, __pyx_L1_error);
__Pyx_GIVEREF(__pyx_t_1);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_1) != (0)) __PYX_ERR(0, 8173, __pyx_L1_error);
__Pyx_GIVEREF(__pyx_t_10);
if (__Pyx_PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_t_10) != (0)) __PYX_ERR(0, 8173, __pyx_L1_error);
__pyx_t_8 = 0;
__pyx_t_1 = 0;
__pyx_t_10 = 0;
__pyx_t_14 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_13); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(0, 8173, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
__pyx_L8_continue:;
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+08174: return out
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_out);
__pyx_r = __pyx_v_out;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
08175:
08176:
+08177: cdef bint _is_pandas_dataframe_object(object obj):
static int __pyx_f_7questdb_7_client__is_pandas_dataframe_object(PyObject *__pyx_v_obj) {
PyObject *__pyx_v_cls = 0;
PyObject *__pyx_v_module = 0;
PyObject *__pyx_v_name = 0;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_AddTraceback("questdb._client._is_pandas_dataframe_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_cls);
__Pyx_XDECREF(__pyx_v_module);
__Pyx_XDECREF(__pyx_v_name);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08178: cdef object cls
08179: cdef object module
08180: cdef object name
+08181: if _PANDAS is not None and isinstance(obj, _PANDAS.DataFrame):
__pyx_t_2 = (__pyx_v_7questdb_7_client__PANDAS != Py_None);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_DataFrame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8181, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_2 = PyObject_IsInstance(__pyx_v_obj, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8181, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+08182: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+08183: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
goto __pyx_L11_try_end;
__pyx_L6_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
__pyx_L8_except_error:;
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
goto __pyx_L1_error;
__pyx_L10_try_return:;
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
goto __pyx_L0;
__pyx_L9_except_return:;
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
goto __pyx_L0;
__pyx_L11_try_end:;
}
+08184: for cls in type(obj).__mro__:
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_obj)), __pyx_mstate_global->__pyx_n_u_mro); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8184, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_3); if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) { __pyx_t_7 = __pyx_t_3; __Pyx_INCREF(__pyx_t_7); __pyx_t_8 = 0; __pyx_t_9 = NULL; } else { __pyx_t_8 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8184, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_9 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8184, __pyx_L6_error) } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; for (;;) { if (likely(!__pyx_t_9)) { if (likely(PyList_CheckExact(__pyx_t_7))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_7); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8184, __pyx_L6_error) #endif if (__pyx_t_8 >= __pyx_temp) break; } __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_7, __pyx_t_8, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_8; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_7); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8184, __pyx_L6_error) #endif if (__pyx_t_8 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_8)); #else __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_7, __pyx_t_8); #endif ++__pyx_t_8; } if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8184, __pyx_L6_error) } else { __pyx_t_3 = __pyx_t_9(__pyx_t_7); if (unlikely(!__pyx_t_3)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8184, __pyx_L6_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_cls, __pyx_t_3); __pyx_t_3 = 0; /* … */ } __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+08185: module = getattr(cls, '__module__', '')
__pyx_t_3 = __Pyx_GetAttr3(__pyx_v_cls, __pyx_mstate_global->__pyx_n_u_module, __pyx_mstate_global->__pyx_kp_u__6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8185, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_module, __pyx_t_3); __pyx_t_3 = 0;
+08186: name = getattr(cls, '__name__', '')
__pyx_t_3 = __Pyx_GetAttr3(__pyx_v_cls, __pyx_mstate_global->__pyx_n_u_name_2, __pyx_mstate_global->__pyx_kp_u__6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8186, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_3); __pyx_t_3 = 0;
+08187: if (name == 'DataFrame' and
__pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_name, __pyx_mstate_global->__pyx_n_u_DataFrame, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8187, __pyx_L6_error) if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L15_bool_binop_done; } /* … */ if (__pyx_t_1) { /* … */ }
+08188: isinstance(module, str) and
__pyx_t_2 = PyUnicode_Check(__pyx_v_module);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L15_bool_binop_done;
}
+08189: (module == 'pandas' or module.startswith('pandas.'))):
__pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_module, __pyx_mstate_global->__pyx_n_u_pandas_2, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8189, __pyx_L6_error) if (!__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L15_bool_binop_done; } __pyx_t_10 = __pyx_v_module; __Pyx_INCREF(__pyx_t_10); __pyx_t_11 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_mstate_global->__pyx_kp_u_pandas_3}; __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_startswith, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8189, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8189, __pyx_L6_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_1 = __pyx_t_2; __pyx_L15_bool_binop_done:;
+08190: return True
{
__pyx_r = 1;
}
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L10_try_return;
+08191: except Exception:
__pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_12) { __Pyx_ErrRestore(0,0,0);
+08192: return False
{
__pyx_r = 0;
}
goto __pyx_L9_except_return;
}
goto __pyx_L8_except_error;
+08193: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
08194:
08195:
+08196: cdef object _MASKED_DTYPE = None
__Pyx_INCREF(Py_None); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__MASKED_DTYPE); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__MASKED_DTYPE, Py_None); __Pyx_GIVEREF(Py_None);
+08197: cdef bint _MASKED_DTYPE_READY = False
__pyx_v_7questdb_7_client__MASKED_DTYPE_READY = 0;
08198:
08199:
+08200: cdef object _pandas_masked_dtype():
static PyObject *__pyx_f_7questdb_7_client__pandas_masked_dtype(void) {
PyObject *__pyx_v_BaseMaskedDtype = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client._pandas_masked_dtype", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_BaseMaskedDtype);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08201: global _MASKED_DTYPE, _MASKED_DTYPE_READY
+08202: if not _MASKED_DTYPE_READY:
__pyx_t_1 = (!__pyx_v_7questdb_7_client__MASKED_DTYPE_READY);
if (__pyx_t_1) {
/* … */
}
+08203: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L5_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
__pyx_L9_try_end:;
}
+08204: from pandas.core.arrays.masked import BaseMaskedDtype
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_BaseMaskedDtype};
__pyx_t_6 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_pandas_core_arrays_masked, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8204, __pyx_L4_error)
}
__pyx_t_5 = __pyx_t_6;
__Pyx_GOTREF(__pyx_t_5);
{
PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_BaseMaskedDtype};
__pyx_t_7 = 0; {
__pyx_t_8 = __Pyx_ImportFrom(__pyx_t_5, __pyx_imported_names[__pyx_t_7]); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8204, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_8);
switch (__pyx_t_7) {
case 0:
__Pyx_INCREF(__pyx_t_8);
__pyx_v_BaseMaskedDtype = __pyx_t_8;
break;
default:;
}
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
}
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+08205: _MASKED_DTYPE = BaseMaskedDtype
__Pyx_INCREF(__pyx_v_BaseMaskedDtype); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__MASKED_DTYPE); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__MASKED_DTYPE, __pyx_v_BaseMaskedDtype); __Pyx_GIVEREF(__pyx_v_BaseMaskedDtype);
+08206: except Exception:
__pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_9) { __Pyx_ErrRestore(0,0,0);
+08207: _MASKED_DTYPE = ()
__Pyx_INCREF(__pyx_mstate_global->__pyx_empty_tuple); __Pyx_XGOTREF(__pyx_v_7questdb_7_client__MASKED_DTYPE); __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__MASKED_DTYPE, __pyx_mstate_global->__pyx_empty_tuple); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_empty_tuple); goto __pyx_L5_exception_handled; } goto __pyx_L6_except_error;
+08208: _MASKED_DTYPE_READY = True
__pyx_v_7questdb_7_client__MASKED_DTYPE_READY = 1;
+08209: return _MASKED_DTYPE
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_7questdb_7_client__MASKED_DTYPE);
__pyx_r = __pyx_v_7questdb_7_client__MASKED_DTYPE;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
08210:
08211:
+08212: cdef bint _pandas_dtypes_require_manual_planner(object dtypes) except -1:
static int __pyx_f_7questdb_7_client__pandas_dtypes_require_manual_planner(PyObject *__pyx_v_dtypes) {
PyObject *__pyx_v_dtype = 0;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client._pandas_dtypes_require_manual_planner", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08213: # A fully Arrow-backed frame takes the zero-copy capsule path; any
08214: # numpy / object / masked / categorical column routes the whole frame to
08215: # the manual planner (which ingests those directly and the Arrow-backed
08216: # columns via the arrow-import path). `dtypes` is the frame's
08217: # `df.dtypes`.
08218: cdef object dtype
+08219: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_try_end;
__pyx_L3_error:;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
__pyx_L5_except_error:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L1_error;
__pyx_L7_try_return:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L0;
__pyx_L6_except_return:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L0;
__pyx_L8_try_end:;
}
+08220: for dtype in dtypes:
if (likely(PyList_CheckExact(__pyx_v_dtypes)) || PyTuple_CheckExact(__pyx_v_dtypes)) { __pyx_t_4 = __pyx_v_dtypes; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; __pyx_t_6 = NULL; } else { __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_dtypes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8220, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8220, __pyx_L3_error) } for (;;) { if (likely(!__pyx_t_6)) { if (likely(PyList_CheckExact(__pyx_t_4))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8220, __pyx_L3_error) #endif if (__pyx_t_5 >= __pyx_temp) break; } __pyx_t_7 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_4, __pyx_t_5, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_5; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8220, __pyx_L3_error) #endif if (__pyx_t_5 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_7 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5)); #else __pyx_t_7 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5); #endif ++__pyx_t_5; } if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8220, __pyx_L3_error) } else { __pyx_t_7 = __pyx_t_6(__pyx_t_4); if (unlikely(!__pyx_t_7)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8220, __pyx_L3_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_7); __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_7); __pyx_t_7 = 0; /* … */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+08221: if not _pandas_dtype_is_arrow(dtype):
__pyx_t_8 = __pyx_f_7questdb_7_client__pandas_dtype_is_arrow(__pyx_v_dtype); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 8221, __pyx_L3_error)
__pyx_t_9 = (!__pyx_t_8);
if (__pyx_t_9) {
/* … */
}
+08222: return True
{
__pyx_r = 1;
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L7_try_return;
+08223: except Exception:
__pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_10) { __Pyx_ErrRestore(0,0,0);
+08224: return True
{
__pyx_r = 1;
}
goto __pyx_L6_except_return;
}
goto __pyx_L5_except_error;
+08225: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
08226:
08227:
+08228: cdef bint _pandas_dtype_is_arrow(object dtype) except -1:
static int __pyx_f_7questdb_7_client__pandas_dtype_is_arrow(PyObject *__pyx_v_dtype) {
PyObject *__pyx_v_arrow_dtype = 0;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client._pandas_dtype_is_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_arrow_dtype);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_36_schema_overrides_need_arrow_message_2generator7(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
+08229: cdef object arrow_dtype = getattr(_PANDAS, 'ArrowDtype', None)
__pyx_t_1 = __pyx_v_7questdb_7_client__PANDAS; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetAttr3(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ArrowDtype, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_arrow_dtype = __pyx_t_2; __pyx_t_2 = 0;
+08230: if arrow_dtype is not None and isinstance(dtype, arrow_dtype):
__pyx_t_4 = (__pyx_v_arrow_dtype != Py_None);
if (__pyx_t_4) {
} else {
__pyx_t_3 = __pyx_t_4;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_4 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_arrow_dtype); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 8230, __pyx_L1_error)
__pyx_t_3 = __pyx_t_4;
__pyx_L4_bool_binop_done:;
if (__pyx_t_3) {
/* … */
}
+08231: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
+08232: return (isinstance(dtype, _PANDAS.StringDtype)
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_StringDtype); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8232, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_2); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 8232, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_4) { } else { __pyx_t_3 = __pyx_t_4; goto __pyx_L6_bool_binop_done; }
+08233: and getattr(dtype, 'storage', None) == 'pyarrow')
__pyx_t_2 = __Pyx_GetAttr3(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_storage, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8233, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_pyarrow, Py_EQ); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 8233, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __pyx_t_4; __pyx_L6_bool_binop_done:; { __pyx_r = __pyx_t_3; } goto __pyx_L0;
08234:
08235:
+08236: cdef str _schema_overrides_need_arrow_message(object df):
static PyObject *__pyx_f_7questdb_7_client__schema_overrides_need_arrow_message(PyObject *__pyx_v_df) {
PyObject *__pyx_v_names = 0;
PyObject *__pyx_v_listed = 0;
PyObject *__pyx_9genexpr22__pyx_v_name = NULL;
PyObject *__pyx_9genexpr22__pyx_v_dtype = NULL;
PyObject *__pyx_gb_7questdb_7_client_36_schema_overrides_need_arrow_message_2generator7 = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_AddTraceback("questdb._client._schema_overrides_need_arrow_message", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_names);
__Pyx_XDECREF(__pyx_v_listed);
__Pyx_XDECREF(__pyx_9genexpr22__pyx_v_name);
__Pyx_XDECREF(__pyx_9genexpr22__pyx_v_dtype);
__Pyx_XDECREF(__pyx_gb_7questdb_7_client_36_schema_overrides_need_arrow_message_2generator7);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08237: """Why `schema_overrides` cannot apply to `df`, naming the pandas
08238: columns that are not Arrow-backed when there are any."""
+08239: cdef list names = []
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8239, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_names = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
08240: cdef str listed
+08241: if _is_pandas_dataframe_object(df):
__pyx_t_2 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8241, __pyx_L1_error) if (__pyx_t_2) { /* … */ }
+08242: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L1_error;
__pyx_L5_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
__pyx_L9_try_end:;
}
+08243: names = [
{ /* enter inner scope */
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8243, __pyx_L12_error)
__Pyx_GOTREF(__pyx_t_1);
+08244: name for name, dtype in df.dtypes.items()
__pyx_t_7 = 0;
__pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8244, __pyx_L12_error)
__Pyx_GOTREF(__pyx_t_10);
if (unlikely(__pyx_t_10 == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
__PYX_ERR(0, 8244, __pyx_L12_error)
}
__pyx_t_11 = __Pyx_dict_iterator(__pyx_t_10, 0, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8244, __pyx_L12_error)
__Pyx_GOTREF(__pyx_t_11);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_6);
__pyx_t_6 = __pyx_t_11;
__pyx_t_11 = 0;
while (1) {
__pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_8, &__pyx_t_7, &__pyx_t_11, &__pyx_t_10, NULL, __pyx_t_9);
if (unlikely(__pyx_t_12 == 0)) break;
if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 8244, __pyx_L12_error)
__Pyx_GOTREF(__pyx_t_11);
__Pyx_GOTREF(__pyx_t_10);
__Pyx_XDECREF_SET(__pyx_9genexpr22__pyx_v_name, __pyx_t_11);
__pyx_t_11 = 0;
__Pyx_XDECREF_SET(__pyx_9genexpr22__pyx_v_dtype, __pyx_t_10);
__pyx_t_10 = 0;
/* … */
if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, __pyx_9genexpr22__pyx_v_name))) __PYX_ERR(0, 8243, __pyx_L12_error)
+08245: if not _pandas_dtype_is_arrow(dtype)]
__pyx_t_2 = __pyx_f_7questdb_7_client__pandas_dtype_is_arrow(__pyx_9genexpr22__pyx_v_dtype); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8245, __pyx_L12_error) __pyx_t_13 = (!__pyx_t_2); if (__pyx_t_13) { /* … */ } } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_9genexpr22__pyx_v_dtype); __pyx_9genexpr22__pyx_v_dtype = 0; __Pyx_XDECREF(__pyx_9genexpr22__pyx_v_name); __pyx_9genexpr22__pyx_v_name = 0; goto __pyx_L16_exit_scope; __pyx_L12_error:; __Pyx_XDECREF(__pyx_9genexpr22__pyx_v_dtype); __pyx_9genexpr22__pyx_v_dtype = 0; __Pyx_XDECREF(__pyx_9genexpr22__pyx_v_name); __pyx_9genexpr22__pyx_v_name = 0; goto __pyx_L4_error; __pyx_L16_exit_scope:; } /* exit inner scope */ __Pyx_DECREF_SET(__pyx_v_names, ((PyObject*)__pyx_t_1)); __pyx_t_1 = 0;
+08246: except Exception:
__pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_9) { __Pyx_AddTraceback("questdb._client._schema_overrides_need_arrow_message", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_10) < 0) __PYX_ERR(0, 8246, __pyx_L6_except_error) __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_10);
+08247: names = []
__pyx_t_11 = PyList_New(0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8247, __pyx_L6_except_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF_SET(__pyx_v_names, ((PyObject*)__pyx_t_11)); __pyx_t_11 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; goto __pyx_L5_exception_handled; } goto __pyx_L6_except_error;
+08248: listed = ''
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__6);
__pyx_v_listed = __pyx_mstate_global->__pyx_kp_u__6;
+08249: if names:
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_names);
if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 8249, __pyx_L1_error)
__pyx_t_13 = (__pyx_temp != 0);
}
if (__pyx_t_13) {
/* … */
}
+08250: listed = ', '.join(repr(name) for name in names[:5])
static PyObject *__pyx_pf_7questdb_7_client_36_schema_overrides_need_arrow_message_genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_11_genexpr *__pyx_cur_scope;
PyObject *__pyx_r = NULL;
__pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_11_genexpr *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_11_genexpr(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_11_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
if (unlikely(!__pyx_cur_scope)) {
__pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_11_genexpr *)Py_None);
__Pyx_INCREF(Py_None);
__PYX_ERR(0, 8250, __pyx_L1_error)
} else {
__Pyx_GOTREF((PyObject *)__pyx_cur_scope);
}
__pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
__Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
{
__pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7questdb_7_client_36_schema_overrides_need_arrow_message_2generator7, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[7]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_schema_overrides_need_arrow_mes, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(0, 8250, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
}
/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client._schema_overrides_need_arrow_message.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__Pyx_DECREF((PyObject *)__pyx_cur_scope);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_36_schema_overrides_need_arrow_message_2generator7(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("genexpr", 0);
__pyx_L3_first_run:;
if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 8250, __pyx_L1_error)
__pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 8250, __pyx_L1_error)
__Pyx_GOTREF(__pyx_r);
if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 8250, __pyx_L1_error) }
__pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
__pyx_t_2 = 0;
for (;;) {
{
Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
#if !CYTHON_ASSUME_SAFE_SIZE
if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8250, __pyx_L1_error)
#endif
if (__pyx_t_2 >= __pyx_temp) break;
}
__pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
++__pyx_t_2;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8250, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_name);
__Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_name, __pyx_t_3);
__Pyx_GIVEREF(__pyx_t_3);
__pyx_t_3 = 0;
__pyx_t_3 = PyObject_Repr(__pyx_cur_scope->__pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8250, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_GIVEREF(__pyx_t_3);
if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_r, __pyx_t_3))) __PYX_ERR(0, 8250, __pyx_L1_error)
__pyx_t_3 = 0;
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_r); __pyx_r = 0;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
if (__Pyx_PyErr_Occurred()) {
__Pyx_Generator_Replace_StopIteration(0);
__Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
}
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
#if !CYTHON_USE_EXC_INFO_STACK
__Pyx_Coroutine_ResetAndClearException(__pyx_generator);
#endif
__pyx_generator->resume_label = -1;
__Pyx_Coroutine_clear((PyObject*)__pyx_generator);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_10 = __Pyx_PyList_GetSlice(__pyx_v_names, 0, 5); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8250, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_6 = __pyx_pf_7questdb_7_client_36_schema_overrides_need_arrow_message_genexpr(NULL, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8250, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__pyx_t_10 = __Pyx_Generator_GetInlinedResult(__pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8250, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_t_6 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__26, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8250, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_DECREF_SET(__pyx_v_listed, ((PyObject*)__pyx_t_6));
__pyx_t_6 = 0;
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_11_genexpr {
PyObject_HEAD
PyObject *__pyx_genexpr_arg_0;
PyObject *__pyx_v_name;
};
+08251: if len(names) > 5:
__pyx_t_8 = __Pyx_PyList_GET_SIZE(__pyx_v_names); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 8251, __pyx_L1_error) __pyx_t_13 = (__pyx_t_8 > 5); if (__pyx_t_13) { /* … */ }
+08252: listed += f' and {len(names) - 5} more'
__pyx_t_8 = __Pyx_PyList_GET_SIZE(__pyx_v_names); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 8252, __pyx_L1_error) __pyx_t_6 = __Pyx_PyUnicode_From_Py_ssize_t((__pyx_t_8 - 5), 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8252, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_14[0] = __pyx_mstate_global->__pyx_kp_u_and; __pyx_t_14[1] = __pyx_t_6; __pyx_t_14[2] = __pyx_mstate_global->__pyx_kp_u_more; __pyx_t_8 = 10; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14[1]); #endif __pyx_t_9 = 0; __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_14, 3, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8252, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_v_listed, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8252, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF_SET(__pyx_v_listed, ((PyObject*)__pyx_t_6)); __pyx_t_6 = 0;
+08253: listed = f'In this DataFrame, these columns do not: {listed}. '
__pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_v_listed); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8253, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_14[0] = __pyx_mstate_global->__pyx_kp_u_In_this_DataFrame_these_columns; __pyx_t_14[1] = __pyx_t_6; __pyx_t_14[2] = __pyx_mstate_global->__pyx_kp_u__33; __pyx_t_8 = 43; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14[1]); #endif __pyx_t_9 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_9 |= __Pyx_PyUnicode_KIND_04(__pyx_t_14[1]); #endif __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_14, 3, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8253, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF_SET(__pyx_v_listed, ((PyObject*)__pyx_t_10)); __pyx_t_10 = 0;
08254: return (
08255: '`schema_overrides` works only on input in Arrow format: a '
08256: 'pyarrow Table or RecordBatch, a polars DataFrame, or a pandas '
08257: 'DataFrame (pandas 2.2 or newer) whose columns all have Arrow '
+08258: 'dtypes (`pd.ArrowDtype`). ' + listed +
__pyx_t_10 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_schema_overrides_works_only_on, __pyx_v_listed); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8258, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_6 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_10, __pyx_mstate_global->__pyx_kp_u_Convert_the_DataFrame_e_g_df_df); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8258, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = ((PyObject*)__pyx_t_6); } __Pyx_XDECREF(__pyx_temp); } __pyx_t_6 = 0; goto __pyx_L0;
08259: 'Convert the DataFrame, e.g. '
08260: '`df = df.convert_dtypes(dtype_backend="pyarrow")`, or drop '
08261: '`schema_overrides`.')
08262:
08263:
+08264: cdef bint _pandas_dataframe_is_timestamp_only_at(
static int __pyx_f_7questdb_7_client__pandas_dataframe_is_timestamp_only_at(PyObject *__pyx_v_df, PyObject *__pyx_v_at) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("questdb._client._pandas_dataframe_is_timestamp_only_at", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08265: object df,
08266: object at) except -1:
+08267: if not _is_pandas_dataframe_object(df) or not isinstance(at, str):
__pyx_t_2 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8267, __pyx_L1_error) __pyx_t_3 = (!__pyx_t_2); if (!__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L4_bool_binop_done; } __pyx_t_3 = PyUnicode_Check(__pyx_v_at); __pyx_t_2 = (!__pyx_t_3); __pyx_t_1 = __pyx_t_2; __pyx_L4_bool_binop_done:; if (__pyx_t_1) { /* … */ }
+08268: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+08269: try:
{
/*try:*/ {
/* … */
}
__pyx_L6_error:;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L8_except_error:;
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
goto __pyx_L1_error;
__pyx_L10_try_return:;
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
goto __pyx_L0;
__pyx_L9_except_return:;
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
goto __pyx_L0;
}
+08270: return len(df.columns) == 1 and df.columns[0] == at
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8270, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = PyObject_Length(__pyx_t_7); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 8270, __pyx_L6_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = (__pyx_t_8 == 1); if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L12_bool_binop_done; } __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8270, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8270, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_9, __pyx_v_at, Py_EQ); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8270, __pyx_L6_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_1 = __pyx_t_2; __pyx_L12_bool_binop_done:; { __pyx_r = __pyx_t_1; } goto __pyx_L10_try_return;
+08271: except Exception:
__pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_10) { __Pyx_ErrRestore(0,0,0);
+08272: return False
{
__pyx_r = 0;
}
goto __pyx_L9_except_return;
}
goto __pyx_L8_except_error;
08273:
08274:
+08275: cdef Py_ssize_t _capsule_row_count(object sliceable) except -2:
static Py_ssize_t __pyx_f_7questdb_7_client__capsule_row_count(PyObject *__pyx_v_sliceable) {
PyObject *__pyx_v_row_count_obj = 0;
Py_ssize_t __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client._capsule_row_count", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -2L;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_row_count_obj);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+08276: cdef object row_count_obj = getattr(sliceable, 'num_rows', None)
__pyx_t_1 = __Pyx_GetAttr3(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_num_rows, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8276, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_row_count_obj = __pyx_t_1; __pyx_t_1 = 0;
+08277: if row_count_obj is None:
__pyx_t_2 = (__pyx_v_row_count_obj == Py_None);
if (__pyx_t_2) {
/* … */
}
+08278: row_count_obj = getattr(sliceable, 'height', None)
__pyx_t_1 = __Pyx_GetAttr3(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_height, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8278, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_row_count_obj, __pyx_t_1); __pyx_t_1 = 0;
+08279: if row_count_obj is not None:
__pyx_t_2 = (__pyx_v_row_count_obj != Py_None);
if (__pyx_t_2) {
/* … */
}
+08280: return <Py_ssize_t>row_count_obj
__pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_v_row_count_obj); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 8280, __pyx_L1_error) { __pyx_r = ((Py_ssize_t)__pyx_t_3); } goto __pyx_L0;
+08281: if _is_pandas_dataframe_object(sliceable):
__pyx_t_2 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_sliceable); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8281, __pyx_L1_error) if (__pyx_t_2) { /* … */ }
+08282: return <Py_ssize_t>len(sliceable)
__pyx_t_3 = PyObject_Length(__pyx_v_sliceable); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(0, 8282, __pyx_L1_error) { __pyx_r = ((Py_ssize_t)__pyx_t_3); } goto __pyx_L0;
+08283: return -1
{
__pyx_r = -1L;
}
goto __pyx_L0;
08284:
08285:
+08286: cdef object _capsule_slice_rows(
static PyObject *__pyx_f_7questdb_7_client__capsule_slice_rows(PyObject *__pyx_v_sliceable, Py_ssize_t __pyx_v_offset, Py_ssize_t __pyx_v_row_count) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._capsule_slice_rows", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08287: object sliceable,
08288: Py_ssize_t offset,
08289: Py_ssize_t row_count):
+08290: if hasattr(sliceable, 'slice'):
__pyx_t_1 = __Pyx_HasAttr(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_slice); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 8290, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+08291: return sliceable.slice(offset, row_count)
__pyx_t_3 = __pyx_v_sliceable;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_4 = PyLong_FromSsize_t(__pyx_v_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8291, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = PyLong_FromSsize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8291, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_6 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_4, __pyx_t_5};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_slice, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8291, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_2;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_2 = 0;
goto __pyx_L0;
+08292: if _is_pandas_dataframe_object(sliceable):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_sliceable); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8292, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+08293: return sliceable.iloc[offset:offset + row_count]
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8293, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = __Pyx_PyObject_GetSlice(__pyx_t_2, __pyx_v_offset, (__pyx_v_offset + __pyx_v_row_count), NULL, NULL, NULL, 1, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8293, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_5; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_5 = 0; goto __pyx_L0;
+08294: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
08295:
08296:
+08297: cdef struct direct_conn_source_t:
struct __pyx_t_7questdb_7_client_direct_conn_source_t {
struct questdb_db *db;
struct line_sender_opts const *opts;
};
08298: # Pooled borrow when ``db != NULL``; otherwise a poolless standalone
08299: # connection opened from ``opts`` per call.
08300: questdb_db* db
08301: const line_sender_opts* opts
08302:
08303:
+08304: cdef qwp_direct_sender* _direct_conn_open(
static struct qwp_direct_sender *__pyx_f_7questdb_7_client__direct_conn_open(struct __pyx_t_7questdb_7_client_direct_conn_source_t *__pyx_v_src, uint64_t __pyx_v_budget_ms, struct line_sender_error **__pyx_v_err) {
struct qwp_direct_sender *__pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
08305: direct_conn_source_t* src,
08306: uint64_t budget_ms,
08307: line_sender_error** err) noexcept nogil:
+08308: if src.db != NULL:
__pyx_t_1 = (__pyx_v_src->db != NULL);
if (__pyx_t_1) {
/* … */
}
+08309: if budget_ms == 0:
__pyx_t_1 = (__pyx_v_budget_ms == 0);
if (__pyx_t_1) {
/* … */
}
+08310: return questdb_db_borrow_direct_sender(src.db, err)
{
__pyx_r = questdb_db_borrow_direct_sender(__pyx_v_src->db, __pyx_v_err);
}
goto __pyx_L0;
+08311: return questdb_db_borrow_direct_sender_with_retry(
{
__pyx_r = questdb_db_borrow_direct_sender_with_retry(__pyx_v_src->db, __pyx_v_budget_ms, __pyx_v_err);
}
goto __pyx_L0;
08312: src.db, budget_ms, err)
+08313: return qwp_direct_sender_from_opts(src.opts, err)
{
__pyx_r = qwp_direct_sender_from_opts(__pyx_v_src->opts, __pyx_v_err);
}
goto __pyx_L0;
08314:
08315:
+08316: cdef void _direct_conn_close(
static void __pyx_f_7questdb_7_client__direct_conn_close(struct __pyx_t_7questdb_7_client_direct_conn_source_t *__pyx_v_src, struct qwp_direct_sender *__pyx_v_conn, int __pyx_v_force_drop) {
/* … */
/* function exit code */
}
08317: direct_conn_source_t* src,
08318: qwp_direct_sender* conn,
08319: bint force_drop) noexcept nogil:
+08320: if src.db != NULL:
__pyx_t_1 = (__pyx_v_src->db != NULL);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+08321: if force_drop:
if (__pyx_v_force_drop) {
/* … */
goto __pyx_L4;
}
+08322: questdb_db_drop_direct_sender(src.db, conn)
questdb_db_drop_direct_sender(__pyx_v_src->db, __pyx_v_conn);
08323: else:
+08324: questdb_db_return_direct_sender(src.db, conn)
/*else*/ {
questdb_db_return_direct_sender(__pyx_v_src->db, __pyx_v_conn);
}
__pyx_L4:;
+08325: elif force_drop:
if (__pyx_v_force_drop) {
/* … */
goto __pyx_L3;
}
08326: # Destroying a poolless sender after a failure must discard its
08327: # uncommitted pipelined frames, and `qwp_direct_sender_free`
08328: # commits them best-effort, so the drop entry point is the only
08329: # bound way to get that. It ignores its `db` argument
08330: # (`qwp_sender.h`: "`db` is currently ignored - the sender
08331: # carries its own reference to the pool"), which is what makes
08332: # NULL safe for a handle that never came from a pool.
+08333: questdb_db_drop_direct_sender(NULL, conn)
questdb_db_drop_direct_sender(NULL, __pyx_v_conn);
08334: else:
+08335: qwp_direct_sender_free(conn)
/*else*/ {
qwp_direct_sender_free(__pyx_v_conn);
}
__pyx_L3:;
08336:
08337:
+08338: cdef bint _dataframe_client_try_capsule_path(
static int __pyx_f_7questdb_7_client__dataframe_client_try_capsule_path(struct __pyx_t_7questdb_7_client_direct_conn_source_t *__pyx_v_src, uint64_t __pyx_v_budget_ms, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at, size_t __pyx_v_max_rows_per_batch, PyObject *__pyx_v_validated_overrides, int *__pyx_v_may_have_committed_prefix, int *__pyx_v_nonreplayable_consumed) {
struct qdb_pystr_buf *__pyx_v_b;
struct qwp_direct_sender *__pyx_v_conn;
struct line_sender_error *__pyx_v_err;
PyThreadState *__pyx_v_gs;
PyObject *__pyx_v_sliceable = 0;
int __pyx_v_any_flushed;
size_t __pyx_v_deferred_since_sync;
int __pyx_v_force_drop_conn;
PyObject *__pyx_v_row_slice = 0;
PyObject *__pyx_v_first_batch = 0;
PyObject *__pyx_v_schema = 0;
Py_ssize_t __pyx_v_total_rows;
Py_ssize_t __pyx_v_offset;
Py_ssize_t __pyx_v_chunk_rows;
PyObject *__pyx_v_symbol_overrides = 0;
PyObject *__pyx_v_merged_overrides = 0;
int __pyx_v_can_slice;
struct line_sender_table_name __pyx_v_c_table_name;
struct line_sender_column_name __pyx_v_c_ts_column;
struct line_sender_column_name *__pyx_v_c_ts_column_ptr;
struct ArrowSchema __pyx_v_c_schema;
struct qwp_arrow_override *__pyx_v_c_overrides;
size_t __pyx_v_c_overrides_len;
int __pyx_v_at_is_column;
int __pyx_v_at_scalar_set;
int64_t __pyx_v_at_scalar_nanos;
size_t __pyx_v_i;
PyObject *__pyx_v_name_bytes = 0;
PyObject *__pyx_v_roundtrip_overrides = 0;
int __pyx_v_kind_int;
int __pyx_v_arg_int;
PyObject *__pyx_v_pandas_dtypes = 0;
PyObject *__pyx_v_export_dtypes = 0;
PyObject *__pyx_v_binary_names = 0;
PyObject *__pyx_v_unlabelled = 0;
PyObject *__pyx_v_entry = 0;
PyObject *__pyx_9genexpr24__pyx_v_entry = NULL;
int __pyx_r;
__Pyx_INCREF(__pyx_v_at);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_AddTraceback("questdb._client._dataframe_client_try_capsule_path", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_sliceable);
__Pyx_XDECREF(__pyx_v_row_slice);
__Pyx_XDECREF(__pyx_v_first_batch);
__Pyx_XDECREF(__pyx_v_schema);
__Pyx_XDECREF(__pyx_v_symbol_overrides);
__Pyx_XDECREF(__pyx_v_merged_overrides);
__Pyx_XDECREF(__pyx_v_name_bytes);
__Pyx_XDECREF(__pyx_v_roundtrip_overrides);
__Pyx_XDECREF(__pyx_v_pandas_dtypes);
__Pyx_XDECREF(__pyx_v_export_dtypes);
__Pyx_XDECREF(__pyx_v_binary_names);
__Pyx_XDECREF(__pyx_v_unlabelled);
__Pyx_XDECREF(__pyx_v_entry);
__Pyx_XDECREF(__pyx_9genexpr24__pyx_v_entry);
__Pyx_XDECREF(__pyx_v_at);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08339: direct_conn_source_t* src,
08340: uint64_t budget_ms,
08341: object df,
08342: object table_name,
08343: object symbols,
08344: object at,
08345: size_t max_rows_per_batch,
08346: object validated_overrides,
08347: bint* may_have_committed_prefix,
08348: bint* nonreplayable_consumed) except -1:
+08349: cdef qdb_pystr_buf* b = NULL
__pyx_v_b = NULL;
+08350: cdef qwp_direct_sender* conn = NULL
__pyx_v_conn = NULL;
+08351: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+08352: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+08353: cdef object sliceable = None
__Pyx_INCREF(Py_None);
__pyx_v_sliceable = Py_None;
+08354: cdef bint any_flushed = False
__pyx_v_any_flushed = 0;
+08355: cdef size_t deferred_since_sync = 0
__pyx_v_deferred_since_sync = 0;
+08356: cdef bint force_drop_conn = False
__pyx_v_force_drop_conn = 0;
+08357: cdef object row_slice = None
__Pyx_INCREF(Py_None);
__pyx_v_row_slice = Py_None;
+08358: cdef object first_batch = None
__Pyx_INCREF(Py_None);
__pyx_v_first_batch = Py_None;
08359: cdef object schema
+08360: cdef Py_ssize_t total_rows = 0
__pyx_v_total_rows = 0;
+08361: cdef Py_ssize_t offset = 0
__pyx_v_offset = 0;
08362: cdef Py_ssize_t chunk_rows
08363: cdef object symbol_overrides
08364: cdef object merged_overrides
+08365: cdef bint can_slice = False
__pyx_v_can_slice = 0;
08366: cdef line_sender_table_name c_table_name
08367: cdef line_sender_column_name c_ts_column
+08368: cdef line_sender_column_name* c_ts_column_ptr = NULL
__pyx_v_c_ts_column_ptr = NULL;
08369: cdef ArrowSchema c_schema
+08370: cdef qwp_arrow_override* c_overrides = NULL
__pyx_v_c_overrides = NULL;
+08371: cdef size_t c_overrides_len = 0
__pyx_v_c_overrides_len = 0;
+08372: cdef bint at_is_column = False
__pyx_v_at_is_column = 0;
+08373: cdef bint at_scalar_set = False
__pyx_v_at_scalar_set = 0;
+08374: cdef int64_t at_scalar_nanos = 0
__pyx_v_at_scalar_nanos = 0;
08375: cdef size_t i
08376: cdef object name_bytes
08377: cdef object roundtrip_overrides
08378: cdef int kind_int
08379: cdef int arg_int
+08380: cdef object pandas_dtypes = None
__Pyx_INCREF(Py_None);
__pyx_v_pandas_dtypes = Py_None;
08381: cdef object export_dtypes
+08382: cdef set binary_names = set()
__pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8382, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_binary_names = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
+08383: cdef list unlabelled = []
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_unlabelled = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
08384: cdef object entry
08385:
+08386: if _is_pandas_dataframe_object(df):
__pyx_t_2 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8386, __pyx_L1_error) if (__pyx_t_2) { /* … */ }
08387: # Read once and shared by every per-column pass below: each
08388: # `df.dtypes` builds a fresh Series.
+08389: _dataframe_may_import_deps()
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8389, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+08390: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L1_error;
__pyx_L7_except_return:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L0;
__pyx_L9_try_end:;
}
+08391: pandas_dtypes = df.dtypes
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8391, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_pandas_dtypes, __pyx_t_1); __pyx_t_1 = 0;
+08392: except Exception:
__pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_6) { __Pyx_ErrRestore(0,0,0);
+08393: return False
{
__pyx_r = 0;
}
goto __pyx_L7_except_return;
}
goto __pyx_L6_except_error;
+08394: if _pandas_dtypes_require_manual_planner(pandas_dtypes):
__pyx_t_2 = __pyx_f_7questdb_7_client__pandas_dtypes_require_manual_planner(__pyx_v_pandas_dtypes); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8394, __pyx_L1_error)
if (__pyx_t_2) {
/* … */
}
+08395: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+08396: if _pandas_dataframe_is_timestamp_only_at(df, at):
__pyx_t_2 = __pyx_f_7questdb_7_client__pandas_dataframe_is_timestamp_only_at(__pyx_v_df, __pyx_v_at); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8396, __pyx_L1_error)
if (__pyx_t_2) {
/* … */
}
+08397: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
08398:
08399: # LazyFrame: use the streaming engine (polars 1.32+) for lower peak
08400: # memory. `LazyFrame.collect_batches()` would stream natively but
08401: # upstream marks it unstable and "much slower than native sinks", so
08402: # we materialize and slice downstream.
+08403: if _is_polars_dataframe_or_lazy(df) and isinstance(
__pyx_t_7 = __pyx_f_7questdb_7_client__is_polars_dataframe_or_lazy(__pyx_v_df); if (unlikely(__pyx_t_7 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8403, __pyx_L1_error) if (__pyx_t_7) { } else { __pyx_t_2 = __pyx_t_7; goto __pyx_L15_bool_binop_done; } /* … */ __pyx_t_7 = PyObject_IsInstance(__pyx_v_df, __pyx_t_1); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 8403, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = __pyx_t_7; __pyx_L15_bool_binop_done:; if (__pyx_t_2) { /* … */ goto __pyx_L14; }
+08404: df, _POLARS_LAZYFRAME_T):
__pyx_t_1 = __pyx_v_7questdb_7_client__POLARS_LAZYFRAME_T;
__Pyx_INCREF(__pyx_t_1);
+08405: sliceable = df.collect(engine='streaming')
__pyx_t_8 = __pyx_v_df;
__Pyx_INCREF(__pyx_t_8);
__pyx_t_9 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_mstate_global->__pyx_n_u_streaming};
#if CYTHON_VECTORCALL
__pyx_t_10 = __pyx_mstate_global->__pyx_tuple[32];
if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8405, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_10);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_engine};
__pyx_t_10 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8405, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
}
#endif
__pyx_t_1 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_collect, __pyx_callargs+__pyx_t_9, (1-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_10);
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8405, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF_SET(__pyx_v_sliceable, __pyx_t_1);
__pyx_t_1 = 0;
/* … */
{
PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_engine};
__pyx_mstate_global->__pyx_tuple[32] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[32])) __PYX_ERR(0, 8405, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[32]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[32]);
+08406: elif hasattr(df, '__arrow_c_stream__'):
__pyx_t_2 = __Pyx_HasAttr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_arrow_c_stream_2); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8406, __pyx_L1_error) if (__pyx_t_2) { /* … */ goto __pyx_L14; }
+08407: sliceable = df
__Pyx_INCREF(__pyx_v_df); __Pyx_DECREF_SET(__pyx_v_sliceable, __pyx_v_df);
+08408: elif hasattr(df, '__arrow_c_array__'):
__pyx_t_2 = __Pyx_HasAttr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_arrow_c_array); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8408, __pyx_L1_error) if (__pyx_t_2) { /* … */ goto __pyx_L14; }
+08409: _dataframe_require_pyarrow()
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_require_pyarrow(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8409, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+08410: sliceable = _PYARROW.Table.from_batches(
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8410, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_10 = __pyx_t_8; __Pyx_INCREF(__pyx_t_10);
+08411: [_PYARROW.record_batch(df)])
__pyx_t_12 = __pyx_v_7questdb_7_client__PYARROW;
__Pyx_INCREF(__pyx_t_12);
__pyx_t_9 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_v_df};
__pyx_t_11 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_record_batch, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8411, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
}
__pyx_t_12 = PyList_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8411, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_12);
__Pyx_GIVEREF(__pyx_t_11);
if (__Pyx_PyList_SET_ITEM(__pyx_t_12, 0, __pyx_t_11) != (0)) __PYX_ERR(0, 8411, __pyx_L1_error);
__pyx_t_11 = 0;
__pyx_t_9 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_t_12};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_batches, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8410, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF_SET(__pyx_v_sliceable, __pyx_t_1);
__pyx_t_1 = 0;
08412: else:
+08413: return False
/*else*/ {
{
__pyx_r = 0;
}
goto __pyx_L0;
}
__pyx_L14:;
08414:
+08415: _reject_polars_object_columns(sliceable)
__pyx_t_13 = __pyx_f_7questdb_7_client__reject_polars_object_columns(__pyx_v_sliceable); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8415, __pyx_L1_error)
08416:
+08417: total_rows = _capsule_row_count(sliceable)
__pyx_t_14 = __pyx_f_7questdb_7_client__capsule_row_count(__pyx_v_sliceable); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 8417, __pyx_L1_error)
__pyx_v_total_rows = __pyx_t_14;
08418:
+08419: if not isinstance(table_name, str):
__pyx_t_2 = PyUnicode_Check(__pyx_v_table_name);
__pyx_t_7 = (!__pyx_t_2);
if (unlikely(__pyx_t_7)) {
/* … */
}
+08420: raise TypeError(
__pyx_t_8 = NULL;
__pyx_t_9 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_mstate_global->__pyx_kp_u_table_name_must_be_str_for_Arrow};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8420, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 8420, __pyx_L1_error)
08421: 'table_name must be str for Arrow-native DataFrame input.')
+08422: if at is None or isinstance(at, ServerTimestampType):
__pyx_t_2 = (__pyx_v_at == Py_None);
if (!__pyx_t_2) {
} else {
__pyx_t_7 = __pyx_t_2;
goto __pyx_L19_bool_binop_done;
}
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ServerTimestampType); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8422, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_2 = PyObject_IsInstance(__pyx_v_at, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8422, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_7 = __pyx_t_2;
__pyx_L19_bool_binop_done:;
if (__pyx_t_7) {
/* … */
goto __pyx_L18;
}
+08423: at_is_column = False
__pyx_v_at_is_column = 0;
+08424: elif isinstance(at, TimestampNanos):
__pyx_t_7 = __Pyx_TypeCheck(__pyx_v_at, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos);
if (__pyx_t_7) {
/* … */
goto __pyx_L18;
}
+08425: at_scalar_set = True
__pyx_v_at_scalar_set = 1;
+08426: at_scalar_nanos = (<TimestampNanos>at)._value
__pyx_t_15 = ((struct __pyx_obj_7questdb_7_client_TimestampNanos *)__pyx_v_at)->_value;
__pyx_v_at_scalar_nanos = __pyx_t_15;
+08427: elif isinstance(at, datetime.datetime):
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8427, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8427, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_7 = PyObject_IsInstance(__pyx_v_at, __pyx_t_8); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 8427, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_7) { /* … */ goto __pyx_L18; }
+08428: at_scalar_set = True
__pyx_v_at_scalar_set = 1;
+08429: at_scalar_nanos = datetime_to_nanos(at)
if (!(likely(((__pyx_v_at) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_at, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 8429, __pyx_L1_error) __pyx_t_15 = __pyx_f_7questdb_7_client_datetime_to_nanos(((PyDateTime_DateTime *)__pyx_v_at)); if (unlikely(__pyx_t_15 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 8429, __pyx_L1_error) __pyx_v_at_scalar_nanos = __pyx_t_15;
+08430: elif isinstance(at, str):
__pyx_t_7 = PyUnicode_Check(__pyx_v_at);
if (__pyx_t_7) {
/* … */
goto __pyx_L18;
}
+08431: at_is_column = True
__pyx_v_at_is_column = 1;
+08432: elif isinstance(at, int) and not isinstance(at, bool):
__pyx_t_2 = PyLong_Check(__pyx_v_at); if (__pyx_t_2) { } else { __pyx_t_7 = __pyx_t_2; goto __pyx_L21_bool_binop_done; } __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_at, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); __pyx_t_16 = (!__pyx_t_2); __pyx_t_7 = __pyx_t_16; __pyx_L21_bool_binop_done:; if (likely(__pyx_t_7)) { /* … */ goto __pyx_L18; }
+08433: at = _capsule_at_index_to_name(sliceable, at)
__pyx_t_6 = __Pyx_PyLong_As_int(__pyx_v_at); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8433, __pyx_L1_error) __pyx_t_8 = __pyx_f_7questdb_7_client__capsule_at_index_to_name(__pyx_v_sliceable, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8433, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF_SET(__pyx_v_at, __pyx_t_8); __pyx_t_8 = 0;
+08434: at_is_column = True
__pyx_v_at_is_column = 1;
08435: else:
+08436: raise TypeError(
/*else*/ {
__pyx_t_1 = NULL;
__pyx_t_9 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_mstate_global->__pyx_kp_u_at_must_be_a_column_name_str_int};
__pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8436, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
}
__Pyx_Raise(__pyx_t_8, 0, 0, 0);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__PYX_ERR(0, 8436, __pyx_L1_error)
}
__pyx_L18:;
08437: 'at must be a column name str, int index, TimestampNanos, '
08438: 'datetime, ServerTimestamp, or None for Arrow-native DataFrame '
08439: 'input.')
08440:
08441: # An empty frame is a no-op: it emits nothing and is never exported,
08442: # so it skips the name check and symbol-shape validation.
+08443: if total_rows == 0:
__pyx_t_7 = (__pyx_v_total_rows == 0);
if (__pyx_t_7) {
/* … */
}
+08444: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
08445:
+08446: _reject_nul_column_names(sliceable)
__pyx_t_13 = __pyx_f_7questdb_7_client__reject_nul_column_names(__pyx_v_sliceable); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8446, __pyx_L1_error)
08447:
+08448: if _is_pandas_dataframe_object(sliceable):
__pyx_t_7 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_sliceable); if (unlikely(__pyx_t_7 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8448, __pyx_L1_error) if (__pyx_t_7) { /* … */ goto __pyx_L24; }
+08449: if _PYARROW is None:
__pyx_t_7 = (__pyx_v_7questdb_7_client__PYARROW == Py_None);
if (__pyx_t_7) {
/* … */
}
+08450: _dataframe_require_pyarrow()
__pyx_t_8 = __pyx_f_7questdb_7_client__dataframe_require_pyarrow(); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8450, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+08451: if not hasattr(_PYARROW.Table, '__arrow_c_stream__'):
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8451, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_7 = __Pyx_HasAttr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_arrow_c_stream_2); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 8451, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_16 = (!__pyx_t_7); if (unlikely(__pyx_t_16)) { /* … */ }
+08452: raise ImportError(
__pyx_t_1 = NULL;
+08453: '`pyarrow` >= 14.0.0 is required for Arrow-backed pandas '
__pyx_t_14 = 130;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17[1]);
#endif
__pyx_t_6 = 0;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_6 |= __Pyx_PyUnicode_KIND_04(__pyx_t_17[1]);
#endif
__pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_17, 3, __pyx_t_14, __pyx_t_6);
if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8453, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_12);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__pyx_t_9 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_12};
__pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ImportError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8452, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
}
__Pyx_Raise(__pyx_t_8, 0, 0, 0);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__PYX_ERR(0, 8452, __pyx_L1_error)
+08454: f'DataFrames (version {_PYARROW.__version__} is installed). '
__pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_version_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8454, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_10 = __Pyx_PyObject_FormatSimple(__pyx_t_12, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8454, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_17[0] = __pyx_mstate_global->__pyx_kp_u_pyarrow_14_0_0_is_required_for; __pyx_t_17[1] = __pyx_t_10; __pyx_t_17[2] = __pyx_mstate_global->__pyx_kp_u_is_installed_Upgrade_with_pip_i;
08455: 'Upgrade with `pip install -U pyarrow`.')
+08456: chunk_rows = max_rows_per_batch
__pyx_v_chunk_rows = __pyx_v_max_rows_per_batch;
+08457: if chunk_rows > total_rows:
__pyx_t_16 = (__pyx_v_chunk_rows > __pyx_v_total_rows);
if (__pyx_t_16) {
/* … */
}
+08458: chunk_rows = total_rows
__pyx_v_chunk_rows = __pyx_v_total_rows;
+08459: first_batch = _PYARROW.Table.from_pandas(
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8459, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_12 = __pyx_t_1; __Pyx_INCREF(__pyx_t_12);
+08460: _capsule_slice_rows(sliceable, 0, chunk_rows))
__pyx_t_10 = __pyx_f_7questdb_7_client__capsule_slice_rows(__pyx_v_sliceable, 0, __pyx_v_chunk_rows); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8460, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_9 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_10}; __pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_pandas, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8459, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_DECREF_SET(__pyx_v_first_batch, __pyx_t_8); __pyx_t_8 = 0;
+08461: schema = first_batch.schema
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_first_batch, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8461, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_v_schema = __pyx_t_8; __pyx_t_8 = 0;
08462: else:
+08463: schema = _capsule_schema(sliceable, symbols)
/*else*/ {
__pyx_t_8 = __pyx_f_7questdb_7_client__capsule_schema(__pyx_v_sliceable, __pyx_v_symbols); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8463, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_v_schema = __pyx_t_8;
__pyx_t_8 = 0;
}
__pyx_L24:;
+08464: symbol_overrides = _resolve_symbols_to_overrides(
__pyx_t_8 = __pyx_f_7questdb_7_client__resolve_symbols_to_overrides(__pyx_v_sliceable, __pyx_v_schema, __pyx_v_symbols); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8464, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_v_symbol_overrides = __pyx_t_8; __pyx_t_8 = 0;
08465: sliceable, schema, symbols)
+08466: if symbol_overrides is None:
__pyx_t_16 = (__pyx_v_symbol_overrides == Py_None);
if (__pyx_t_16) {
/* … */
}
+08467: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+08468: merged_overrides = _merge_capsule_overrides(
__pyx_t_8 = __pyx_f_7questdb_7_client__merge_capsule_overrides(__pyx_v_symbol_overrides, __pyx_v_validated_overrides); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8468, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_v_merged_overrides = __pyx_t_8; __pyx_t_8 = 0;
08469: symbol_overrides, validated_overrides)
08470: # The claim lookup and the refusal judge each exported column by its
08471: # pandas dtype, and the export includes the frame's index levels.
+08472: export_dtypes = _pandas_export_dtypes(df, pandas_dtypes)
__pyx_t_8 = __pyx_f_7questdb_7_client__pandas_export_dtypes(__pyx_v_df, __pyx_v_pandas_dtypes); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8472, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_v_export_dtypes = __pyx_t_8; __pyx_t_8 = 0;
+08473: roundtrip_overrides = _capsule_roundtrip_overrides(
__pyx_t_8 = __pyx_f_7questdb_7_client__capsule_roundtrip_overrides(__pyx_v_sliceable, __pyx_v_export_dtypes); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8473, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_v_roundtrip_overrides = __pyx_t_8; __pyx_t_8 = 0;
08474: sliceable, export_dtypes)
+08475: merged_overrides = _merge_capsule_overrides(
__pyx_t_8 = __pyx_f_7questdb_7_client__merge_capsule_overrides(__pyx_v_roundtrip_overrides, __pyx_v_merged_overrides); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8475, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF_SET(__pyx_v_merged_overrides, __pyx_t_8); __pyx_t_8 = 0;
08476: roundtrip_overrides, merged_overrides)
+08477: _refuse_unlabelled_fsb_pandas_columns(
__pyx_t_13 = __pyx_f_7questdb_7_client__refuse_unlabelled_fsb_pandas_columns(__pyx_v_df, __pyx_v_export_dtypes, __pyx_v_merged_overrides); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8477, __pyx_L1_error)
08478: df, export_dtypes, merged_overrides)
+08479: if merged_overrides:
__pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_v_merged_overrides); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 8479, __pyx_L1_error) if (__pyx_t_16) { /* … */ }
08480: # A `'binary'` override is a label for this client alone; the
08481: # native ingest gets the rest.
+08482: for entry in merged_overrides:
if (likely(PyList_CheckExact(__pyx_v_merged_overrides)) || PyTuple_CheckExact(__pyx_v_merged_overrides)) { __pyx_t_8 = __pyx_v_merged_overrides; __Pyx_INCREF(__pyx_t_8); __pyx_t_14 = 0; __pyx_t_18 = NULL; } else { __pyx_t_14 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_v_merged_overrides); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8482, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_18 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_8); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 8482, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_18)) { if (likely(PyList_CheckExact(__pyx_t_8))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_8); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8482, __pyx_L1_error) #endif if (__pyx_t_14 >= __pyx_temp) break; } __pyx_t_1 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_8, __pyx_t_14, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_14; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_8); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8482, __pyx_L1_error) #endif if (__pyx_t_14 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_14)); #else __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_8, __pyx_t_14); #endif ++__pyx_t_14; } if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8482, __pyx_L1_error) } else { __pyx_t_1 = __pyx_t_18(__pyx_t_8); if (unlikely(!__pyx_t_1)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8482, __pyx_L1_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_1); __pyx_t_1 = 0; /* … */ } __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+08483: if entry[1] == _SCHEMA_OVERRIDE_BINARY:
__pyx_t_1 = __Pyx_GetItemInt(__pyx_v_entry, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8483, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_10 = __Pyx_PyLong_From_int(__pyx_v_7questdb_7_client__SCHEMA_OVERRIDE_BINARY); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8483, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_16 = __Pyx_PyObject_CompareBoolEq_object_int(__pyx_t_1, __pyx_t_10, Py_EQ); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 8483, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (__pyx_t_16) { /* … */ }
+08484: binary_names.add(entry[0])
__pyx_t_10 = __Pyx_GetItemInt(__pyx_v_entry, 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8484, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_19 = PySet_Add(__pyx_v_binary_names, __pyx_t_10); if (unlikely(__pyx_t_19 == ((int)-1))) __PYX_ERR(0, 8484, __pyx_L1_error) __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+08485: if binary_names:
{
Py_ssize_t __pyx_temp = __Pyx_PySet_GET_SIZE(__pyx_v_binary_names);
if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 8485, __pyx_L1_error)
__pyx_t_16 = (__pyx_temp != 0);
}
if (__pyx_t_16) {
/* … */
}
+08486: merged_overrides = [
{ /* enter inner scope */
__pyx_t_10 = PyList_New(0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8486, __pyx_L39_error)
__Pyx_GOTREF(__pyx_t_10);
+08487: entry for entry in merged_overrides
if (likely(PyList_CheckExact(__pyx_v_merged_overrides)) || PyTuple_CheckExact(__pyx_v_merged_overrides)) { __pyx_t_1 = __pyx_v_merged_overrides; __Pyx_INCREF(__pyx_t_1); __pyx_t_14 = 0; __pyx_t_18 = NULL; } else { __pyx_t_14 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_merged_overrides); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8487, __pyx_L39_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_18 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 8487, __pyx_L39_error) } for (;;) { if (likely(!__pyx_t_18)) { if (likely(PyList_CheckExact(__pyx_t_1))) { { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8487, __pyx_L39_error) #endif if (__pyx_t_14 >= __pyx_temp) break; } __pyx_t_12 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_1, __pyx_t_14, __Pyx_ReferenceSharing_OwnStrongReference); ++__pyx_t_14; } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1); #if !CYTHON_ASSUME_SAFE_SIZE if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8487, __pyx_L39_error) #endif if (__pyx_t_14 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_12 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_14)); #else __pyx_t_12 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_14); #endif ++__pyx_t_14; } if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8487, __pyx_L39_error) } else { __pyx_t_12 = __pyx_t_18(__pyx_t_1); if (unlikely(!__pyx_t_12)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8487, __pyx_L39_error) PyErr_Clear(); } break; } } __Pyx_GOTREF(__pyx_t_12); __Pyx_XDECREF_SET(__pyx_9genexpr24__pyx_v_entry, __pyx_t_12); __pyx_t_12 = 0; /* … */ if (unlikely(__Pyx_ListComp_Append(__pyx_t_10, __pyx_9genexpr24__pyx_v_entry))) __PYX_ERR(0, 8486, __pyx_L39_error) /* … */ } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_9genexpr24__pyx_v_entry); __pyx_9genexpr24__pyx_v_entry = 0; goto __pyx_L44_exit_scope; __pyx_L39_error:; __Pyx_XDECREF(__pyx_9genexpr24__pyx_v_entry); __pyx_9genexpr24__pyx_v_entry = 0; goto __pyx_L1_error; __pyx_L44_exit_scope:; } /* exit inner scope */ __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 8486, __pyx_L1_error) if (!__pyx_t_16) { __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; } else { __Pyx_INCREF(__pyx_t_10); __pyx_t_8 = __pyx_t_10; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; goto __pyx_L35_bool_binop_done; }
+08488: if entry[1] != _SCHEMA_OVERRIDE_BINARY] or None
__pyx_t_12 = __Pyx_GetItemInt(__pyx_9genexpr24__pyx_v_entry, 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8488, __pyx_L39_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_11 = __Pyx_PyLong_From_int(__pyx_v_7questdb_7_client__SCHEMA_OVERRIDE_BINARY); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8488, __pyx_L39_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_16 = __Pyx_PyObject_CompareBoolNe_object_int(__pyx_t_12, __pyx_t_11, Py_NE); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 8488, __pyx_L39_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if (__pyx_t_16) { /* … */ } /* … */ __Pyx_INCREF(Py_None); __pyx_t_8 = Py_None; __pyx_L35_bool_binop_done:; __Pyx_DECREF_SET(__pyx_v_merged_overrides, __pyx_t_8); __pyx_t_8 = 0;
08489:
+08490: can_slice = (total_rows >= 0) and (
__pyx_t_7 = (__pyx_v_total_rows >= 0);
if (__pyx_t_7) {
} else {
__pyx_t_16 = __pyx_t_7;
goto __pyx_L45_bool_binop_done;
}
+08491: hasattr(sliceable, 'slice')
__pyx_t_7 = __Pyx_HasAttr(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_slice); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 8491, __pyx_L1_error) if (!__pyx_t_7) { } else { __pyx_t_16 = __pyx_t_7; goto __pyx_L45_bool_binop_done; }
+08492: or _is_pandas_dataframe_object(sliceable))
__pyx_t_7 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_sliceable); if (unlikely(__pyx_t_7 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8492, __pyx_L1_error) __pyx_t_16 = __pyx_t_7; __pyx_L45_bool_binop_done:; __pyx_v_can_slice = __pyx_t_16;
08493:
+08494: b = qdb_pystr_buf_new()
__pyx_v_b = qdb_pystr_buf_new();
+08495: memset(&c_schema, 0, sizeof(ArrowSchema))
(void)(memset((&__pyx_v_c_schema), 0, (sizeof(struct ArrowSchema))));
+08496: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L53_try_end;
__pyx_L48_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L50_except_error:;
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_5, __pyx_t_4, __pyx_t_3);
goto __pyx_L1_error;
__pyx_L53_try_end:;
}
+08497: try:
/*try:*/ {
+08498: str_to_table_name(b, <PyObject*>table_name, &c_table_name)
__pyx_t_13 = __pyx_f_7questdb_7_client_str_to_table_name(__pyx_v_b, ((PyObject *)__pyx_v_table_name), (&__pyx_v_c_table_name)); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8498, __pyx_L55_error)
+08499: if at_is_column:
if (__pyx_v_at_is_column) {
/* … */
}
+08500: str_to_column_name(b, at, &c_ts_column)
__pyx_t_8 = __pyx_v_at;
__Pyx_INCREF(__pyx_t_8);
if (!(likely(PyUnicode_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_8))) __PYX_ERR(0, 8500, __pyx_L55_error)
__pyx_t_13 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_v_b, ((PyObject*)__pyx_t_8), (&__pyx_v_c_ts_column)); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8500, __pyx_L55_error)
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+08501: c_ts_column_ptr = &c_ts_column
__pyx_v_c_ts_column_ptr = (&__pyx_v_c_ts_column);
08502:
+08503: if merged_overrides is not None:
__pyx_t_16 = (__pyx_v_merged_overrides != Py_None);
if (__pyx_t_16) {
/* … */
}
+08504: c_overrides_len = len(merged_overrides)
__pyx_t_14 = PyObject_Length(__pyx_v_merged_overrides); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-1))) __PYX_ERR(0, 8504, __pyx_L55_error) __pyx_v_c_overrides_len = __pyx_t_14;
+08505: c_overrides = <qwp_arrow_override*>calloc(
__pyx_v_c_overrides = ((struct qwp_arrow_override *)calloc(__pyx_v_c_overrides_len, (sizeof(struct qwp_arrow_override))));
08506: c_overrides_len, sizeof(qwp_arrow_override))
+08507: if c_overrides == NULL:
__pyx_t_16 = (__pyx_v_c_overrides == NULL);
if (unlikely(__pyx_t_16)) {
/* … */
}
+08508: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 8508, __pyx_L55_error)
+08509: for i in range(c_overrides_len):
__pyx_t_9 = __pyx_v_c_overrides_len;
__pyx_t_20 = __pyx_t_9;
for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_20; __pyx_t_21+=1) {
__pyx_v_i = __pyx_t_21;
+08510: name_bytes, kind_int, arg_int = merged_overrides[i]
__pyx_t_8 = __Pyx_GetItemInt(__pyx_v_merged_overrides, __pyx_v_i, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8510, __pyx_L55_error) __Pyx_GOTREF(__pyx_t_8); if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) { PyObject* sequence = __pyx_t_8; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 3)) { if (size > 3) __Pyx_RaiseTooManyValuesError(3); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 8510, __pyx_L55_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_10 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_10); __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_1); __pyx_t_11 = PyTuple_GET_ITEM(sequence, 2); __Pyx_INCREF(__pyx_t_11); } else { __pyx_t_10 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8510, __pyx_L55_error) __Pyx_XGOTREF(__pyx_t_10); __pyx_t_1 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8510, __pyx_L55_error) __Pyx_XGOTREF(__pyx_t_1); __pyx_t_11 = __Pyx_PyList_GET_ITEM_REF(sequence, 2, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8510, __pyx_L55_error) __Pyx_XGOTREF(__pyx_t_11); } #else __pyx_t_10 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8510, __pyx_L55_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8510, __pyx_L55_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_11 = __Pyx_PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8510, __pyx_L55_error) __Pyx_GOTREF(__pyx_t_11); #endif __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else { Py_ssize_t index = -1; __pyx_t_12 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8510, __pyx_L55_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_22 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_12); index = 0; __pyx_t_10 = __pyx_t_22(__pyx_t_12); if (unlikely(!__pyx_t_10)) goto __pyx_L62_unpacking_failed; __Pyx_GOTREF(__pyx_t_10); index = 1; __pyx_t_1 = __pyx_t_22(__pyx_t_12); if (unlikely(!__pyx_t_1)) goto __pyx_L62_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); index = 2; __pyx_t_11 = __pyx_t_22(__pyx_t_12); if (unlikely(!__pyx_t_11)) goto __pyx_L62_unpacking_failed; __Pyx_GOTREF(__pyx_t_11); if (__Pyx_IternextUnpackEndCheck(__pyx_t_22(__pyx_t_12), 3) < (0)) __PYX_ERR(0, 8510, __pyx_L55_error) __pyx_t_22 = NULL; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; goto __pyx_L63_unpacking_done; __pyx_L62_unpacking_failed:; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_22 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 8510, __pyx_L55_error) __pyx_L63_unpacking_done:; } __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8510, __pyx_L55_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_23 = __Pyx_PyLong_As_int(__pyx_t_11); if (unlikely((__pyx_t_23 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8510, __pyx_L55_error) __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_XDECREF_SET(__pyx_v_name_bytes, __pyx_t_10); __pyx_t_10 = 0; __pyx_v_kind_int = __pyx_t_6; __pyx_v_arg_int = __pyx_t_23;
+08511: c_overrides[i].column = PyBytes_AsString(name_bytes)
__pyx_t_24 = PyBytes_AsString(__pyx_v_name_bytes); if (unlikely(__pyx_t_24 == ((void *)NULL))) __PYX_ERR(0, 8511, __pyx_L55_error) (__pyx_v_c_overrides[__pyx_v_i]).column = __pyx_t_24;
+08512: c_overrides[i].column_len = PyBytes_GET_SIZE(name_bytes)
(__pyx_v_c_overrides[__pyx_v_i]).column_len = PyBytes_GET_SIZE(__pyx_v_name_bytes);
+08513: c_overrides[i].kind = <uint32_t>kind_int
(__pyx_v_c_overrides[__pyx_v_i]).kind = ((uint32_t)__pyx_v_kind_int);
+08514: c_overrides[i].arg = <uint32_t>arg_int
(__pyx_v_c_overrides[__pyx_v_i]).arg = ((uint32_t)__pyx_v_arg_int);
}
08515:
+08516: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+08517: conn = _direct_conn_open(src, budget_ms, &err)
__pyx_v_conn = __pyx_f_7questdb_7_client__direct_conn_open(__pyx_v_src, __pyx_v_budget_ms, (&__pyx_v_err));
+08518: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+08519: if conn == NULL:
__pyx_t_16 = (__pyx_v_conn == NULL);
if (unlikely(__pyx_t_16)) {
/* … */
}
+08520: raise c_err_to_py(err)
__pyx_t_8 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8520, __pyx_L55_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 8520, __pyx_L55_error)
08521:
+08522: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
__Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
__Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
goto __pyx_L70_try_end;
__pyx_L65_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L67_except_error:;
__Pyx_XGIVEREF(__pyx_t_25);
__Pyx_XGIVEREF(__pyx_t_26);
__Pyx_XGIVEREF(__pyx_t_27);
__Pyx_ExceptionReset(__pyx_t_25, __pyx_t_26, __pyx_t_27);
goto __pyx_L55_error;
__pyx_L70_try_end:;
}
}
+08523: if not can_slice:
__pyx_t_16 = (!__pyx_v_can_slice);
if (__pyx_t_16) {
/* … */
goto __pyx_L71;
}
08524: # A one-shot stream (e.g. RecordBatchReader) cannot be
08525: # re-exported for a whole-frame replay: a failed attempt
08526: # must surface instead of retrying with the drained rest.
+08527: nonreplayable_consumed[0] = True
(__pyx_v_nonreplayable_consumed[0]) = 1;
+08528: _capsule_consume_stream_with_hint(
__pyx_t_13 = __pyx_f_7questdb_7_client__capsule_consume_stream_with_hint(__pyx_v_conn, __pyx_v_sliceable, __pyx_v_c_table_name, __pyx_v_c_ts_column_ptr, __pyx_v_at_scalar_set, __pyx_v_at_scalar_nanos, (&__pyx_v_c_schema), __pyx_v_c_overrides, __pyx_v_c_overrides_len, (&__pyx_v_any_flushed), (&__pyx_v_deferred_since_sync), __pyx_v_may_have_committed_prefix, __pyx_v_max_rows_per_batch, 0, __pyx_v_binary_names, __pyx_v_unlabelled); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8528, __pyx_L65_error)
08529: conn, sliceable, c_table_name, c_ts_column_ptr,
08530: at_scalar_set, at_scalar_nanos,
08531: &c_schema, c_overrides, c_overrides_len,
08532: &any_flushed, &deferred_since_sync,
08533: may_have_committed_prefix, max_rows_per_batch, False,
08534: binary_names, unlabelled)
08535: else:
+08536: offset = 0
/*else*/ {
__pyx_v_offset = 0;
+08537: while offset < total_rows:
while (1) {
__pyx_t_16 = (__pyx_v_offset < __pyx_v_total_rows);
if (!__pyx_t_16) break;
+08538: chunk_rows = max_rows_per_batch
__pyx_v_chunk_rows = __pyx_v_max_rows_per_batch;
+08539: if chunk_rows > total_rows - offset:
__pyx_t_16 = (__pyx_v_chunk_rows > (__pyx_v_total_rows - __pyx_v_offset));
if (__pyx_t_16) {
/* … */
}
+08540: chunk_rows = total_rows - offset
__pyx_v_chunk_rows = (__pyx_v_total_rows - __pyx_v_offset);
+08541: if first_batch is not None:
__pyx_t_16 = (__pyx_v_first_batch != Py_None);
if (__pyx_t_16) {
/* … */
goto __pyx_L75;
}
+08542: row_slice = first_batch
__Pyx_INCREF(__pyx_v_first_batch); __Pyx_DECREF_SET(__pyx_v_row_slice, __pyx_v_first_batch);
+08543: first_batch = None
__Pyx_INCREF(Py_None); __Pyx_DECREF_SET(__pyx_v_first_batch, Py_None);
08544: else:
+08545: row_slice = _capsule_slice_rows(
/*else*/ {
/* … */
__pyx_t_8 = __pyx_f_7questdb_7_client__capsule_slice_rows(__pyx_v_sliceable, __pyx_v_offset, __pyx_v_chunk_rows); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8545, __pyx_L65_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF_SET(__pyx_v_row_slice, __pyx_t_8);
__pyx_t_8 = 0;
}
__pyx_L75:;
08546: sliceable, offset, chunk_rows)
+08547: _capsule_consume_stream_with_hint(
__pyx_t_13 = __pyx_f_7questdb_7_client__capsule_consume_stream_with_hint(__pyx_v_conn, __pyx_v_row_slice, __pyx_v_c_table_name, __pyx_v_c_ts_column_ptr, __pyx_v_at_scalar_set, __pyx_v_at_scalar_nanos, (&__pyx_v_c_schema), __pyx_v_c_overrides, __pyx_v_c_overrides_len, (&__pyx_v_any_flushed), (&__pyx_v_deferred_since_sync), __pyx_v_may_have_committed_prefix, __pyx_v_max_rows_per_batch, 1, __pyx_v_binary_names, __pyx_v_unlabelled); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8547, __pyx_L65_error)
08548: conn, row_slice, c_table_name, c_ts_column_ptr,
08549: at_scalar_set, at_scalar_nanos,
08550: &c_schema, c_overrides, c_overrides_len,
08551: &any_flushed, &deferred_since_sync,
08552: may_have_committed_prefix, max_rows_per_batch, True,
08553: binary_names, unlabelled)
+08554: offset += chunk_rows
__pyx_v_offset = (__pyx_v_offset + __pyx_v_chunk_rows);
}
}
__pyx_L71:;
+08555: if any_flushed:
if (__pyx_v_any_flushed) {
/* … */
}
+08556: _dataframe_columnar_sync(conn)
__pyx_t_13 = __pyx_f_7questdb_7_client__dataframe_columnar_sync(__pyx_v_conn); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8556, __pyx_L65_error)
+08557: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_client_try_capsule_path", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_11, &__pyx_t_1) < 0) __PYX_ERR(0, 8557, __pyx_L67_except_error)
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_1);
+08558: force_drop_conn = _dataframe_columnar_force_drop_after_error(
__pyx_v_force_drop_conn = __pyx_f_7questdb_7_client__dataframe_columnar_force_drop_after_error(__pyx_v_conn, __pyx_v_any_flushed);
08559: conn, any_flushed)
+08560: raise
__Pyx_GIVEREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_11); __Pyx_XGIVEREF(__pyx_t_1); __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_11, __pyx_t_1); __pyx_t_8 = 0; __pyx_t_11 = 0; __pyx_t_1 = 0; __PYX_ERR(0, 8560, __pyx_L67_except_error) }
08561: finally:
+08562: _ensure_has_gil(&gs)
/*finally:*/ {
/*normal exit:*/{
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
/* … */
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+08563: if conn != NULL:
__pyx_t_16 = (__pyx_v_conn != NULL);
if (__pyx_t_16) {
/* … */
}
/* … */
__pyx_t_16 = (__pyx_v_conn != NULL);
if (__pyx_t_16) {
/* … */
}
+08564: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L82;
}
__pyx_L82:;
}
}
/* … */
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L91;
}
__pyx_L91:;
}
}
+08565: _direct_conn_close(src, conn, force_drop_conn)
__pyx_f_7questdb_7_client__direct_conn_close(__pyx_v_src, __pyx_v_conn, __pyx_v_force_drop_conn);
}
/* … */
__pyx_f_7questdb_7_client__direct_conn_close(__pyx_v_src, __pyx_v_conn, __pyx_v_force_drop_conn);
}
+08566: if c_schema.release != NULL:
__pyx_t_16 = (__pyx_v_c_schema.release != NULL);
if (__pyx_t_16) {
/* … */
}
/* … */
__pyx_t_16 = (__pyx_v_c_schema.release != NULL);
if (__pyx_t_16) {
/* … */
}
+08567: c_schema.release(&c_schema)
__pyx_v_c_schema.release((&__pyx_v_c_schema));
/* … */
__pyx_v_c_schema.release((&__pyx_v_c_schema));
+08568: if c_overrides != NULL:
__pyx_t_16 = (__pyx_v_c_overrides != NULL);
if (__pyx_t_16) {
/* … */
}
/* … */
__pyx_t_16 = (__pyx_v_c_overrides != NULL);
if (__pyx_t_16) {
/* … */
}
+08569: free(c_overrides)
free(__pyx_v_c_overrides);
/* … */
free(__pyx_v_c_overrides);
+08570: if b != NULL:
__pyx_t_16 = (__pyx_v_b != NULL);
if (__pyx_t_16) {
/* … */
}
goto __pyx_L56;
}
__pyx_L55_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_27 = 0; __pyx_t_26 = 0; __pyx_t_25 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_ExceptionSwap(&__pyx_t_29, &__pyx_t_30, &__pyx_t_31);
if ( unlikely(__Pyx_GetException(&__pyx_t_27, &__pyx_t_26, &__pyx_t_25) < 0)) __Pyx_ErrFetch(&__pyx_t_27, &__pyx_t_26, &__pyx_t_25);
__Pyx_XGOTREF(__pyx_t_27);
__Pyx_XGOTREF(__pyx_t_26);
__Pyx_XGOTREF(__pyx_t_25);
__Pyx_XGOTREF(__pyx_t_29);
__Pyx_XGOTREF(__pyx_t_30);
__Pyx_XGOTREF(__pyx_t_31);
__pyx_t_23 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_28 = __pyx_filename;
{
/* … */
__pyx_t_16 = (__pyx_v_b != NULL);
if (__pyx_t_16) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_29);
__Pyx_XGIVEREF(__pyx_t_30);
__Pyx_XGIVEREF(__pyx_t_31);
__Pyx_ExceptionReset(__pyx_t_29, __pyx_t_30, __pyx_t_31);
__Pyx_XGIVEREF(__pyx_t_27);
__Pyx_XGIVEREF(__pyx_t_26);
__Pyx_XGIVEREF(__pyx_t_25);
__Pyx_ErrRestore(__pyx_t_27, __pyx_t_26, __pyx_t_25);
__pyx_t_27 = 0; __pyx_t_26 = 0; __pyx_t_25 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0;
__pyx_lineno = __pyx_t_23; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_28;
goto __pyx_L48_error;
}
__pyx_L56:;
}
+08571: qdb_pystr_buf_free(b)
qdb_pystr_buf_free(__pyx_v_b);
/* … */
qdb_pystr_buf_free(__pyx_v_b);
+08572: except BaseException:
__pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_6) { __Pyx_AddTraceback("questdb._client._dataframe_client_try_capsule_path", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_11, &__pyx_t_8) < 0) __PYX_ERR(0, 8572, __pyx_L50_except_error) __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_11); __Pyx_XGOTREF(__pyx_t_8);
08573: # A batch that went out may have created the table with these
08574: # columns as BINARY, so a failed write still reports them, once
08575: # its connection is closed. The write's own error is the one the
08576: # caller needs, so a handler that raises is not let replace it.
+08577: if any_flushed:
if (__pyx_v_any_flushed) {
/* … */
}
+08578: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_31); __pyx_t_31 = 0;
__Pyx_XDECREF(__pyx_t_30); __pyx_t_30 = 0;
__Pyx_XDECREF(__pyx_t_29); __pyx_t_29 = 0;
goto __pyx_L105_try_end;
__pyx_L98_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
/* … */
__pyx_L100_except_error:;
__Pyx_XGIVEREF(__pyx_t_31);
__Pyx_XGIVEREF(__pyx_t_30);
__Pyx_XGIVEREF(__pyx_t_29);
__Pyx_ExceptionReset(__pyx_t_31, __pyx_t_30, __pyx_t_29);
goto __pyx_L50_except_error;
__pyx_L99_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_31);
__Pyx_XGIVEREF(__pyx_t_30);
__Pyx_XGIVEREF(__pyx_t_29);
__Pyx_ExceptionReset(__pyx_t_31, __pyx_t_30, __pyx_t_29);
__pyx_L105_try_end:;
}
+08579: _log_unlabelled_fsb_columns(unlabelled)
__pyx_t_13 = __pyx_f_7questdb_7_client__log_unlabelled_fsb_columns(__pyx_v_unlabelled); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8579, __pyx_L98_error)
+08580: except Exception:
__pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (__pyx_t_6) { __Pyx_ErrRestore(0,0,0); goto __pyx_L99_exception_handled; } goto __pyx_L100_except_error;
08581: pass
+08582: raise
__Pyx_GIVEREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_11); __Pyx_XGIVEREF(__pyx_t_8); __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_11, __pyx_t_8); __pyx_t_1 = 0; __pyx_t_11 = 0; __pyx_t_8 = 0; __PYX_ERR(0, 8582, __pyx_L50_except_error) } goto __pyx_L50_except_error;
08583: # Only once the write has gone through and its connection is closed,
08584: # so a logging handler cannot re-enter a write in progress.
+08585: _log_unlabelled_fsb_columns(unlabelled)
__pyx_t_13 = __pyx_f_7questdb_7_client__log_unlabelled_fsb_columns(__pyx_v_unlabelled); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8585, __pyx_L1_error)
+08586: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
08587:
08588:
+08589: cdef void_int _dataframe_numpy_publish(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_numpy_publish(struct __pyx_t_7questdb_7_client_direct_conn_source_t *__pyx_v_src, uint64_t __pyx_v_budget_ms, struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at, size_t __pyx_v_max_rows_per_batch, int *__pyx_v_may_have_committed_prefix) {
struct qwp_chunk *__pyx_v_chunk;
struct qwp_direct_sender *__pyx_v_conn;
struct line_sender_error *__pyx_v_err;
PyThreadState *__pyx_v_gs;
int __pyx_v_flushed;
int __pyx_v_force_drop_conn;
size_t __pyx_v_rows_per_chunk;
size_t __pyx_v_row_offset;
size_t __pyx_v_chunk_rows;
__pyx_t_7questdb_7_client_void_int __pyx_r;
__Pyx_INCREF(__pyx_v_df);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("questdb._client._dataframe_numpy_publish", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_df);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08590: direct_conn_source_t* src,
08591: uint64_t budget_ms,
08592: qdb_pystr_buf* b,
08593: dataframe_plan_t* plan,
08594: object df,
08595: object table_name,
08596: object table_name_col,
08597: object symbols,
08598: object at,
08599: size_t max_rows_per_batch,
08600: bint* may_have_committed_prefix) except -1:
+08601: cdef qwp_chunk* chunk = NULL
__pyx_v_chunk = NULL;
+08602: cdef qwp_direct_sender* conn = NULL
__pyx_v_conn = NULL;
+08603: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+08604: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+08605: cdef bint flushed = False
__pyx_v_flushed = 0;
+08606: cdef bint force_drop_conn = False
__pyx_v_force_drop_conn = 0;
08607: cdef size_t rows_per_chunk
08608: cdef size_t row_offset
08609: cdef size_t chunk_rows
+08610: try:
/*try:*/ {
+08611: df = _dataframe_normalize_nullable(df)
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_normalize_nullable(__pyx_v_df); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8611, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_1); __pyx_t_1 = 0;
+08612: df = _dataframe_normalize_claimed_arrow(df)
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_normalize_claimed_arrow(__pyx_v_df); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8612, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_1); __pyx_t_1 = 0;
+08613: df = _dataframe_normalize_claimed_date(df)
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_normalize_claimed_date(__pyx_v_df); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8613, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_1); __pyx_t_1 = 0;
+08614: df = _dataframe_normalize_at_timestamp(df, at)
__pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_normalize_at_timestamp(__pyx_v_df, __pyx_v_at); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8614, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_1); __pyx_t_1 = 0;
+08615: _dataframe_plan_build(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_plan_build(__pyx_v_b, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_v_plan, ((PyObject*)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8615, __pyx_L4_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
08616: b,
08617: df,
08618: table_name,
08619: table_name_col,
08620: symbols,
08621: at,
08622: plan,
+08623: _FIELD_TARGETS_QWP)
__pyx_t_1 = __pyx_v_7questdb_7_client__FIELD_TARGETS_QWP;
__Pyx_INCREF(__pyx_t_1);
+08624: if (plan.col_count == 0) or (plan.row_count == 0):
__pyx_t_4 = (__pyx_v_plan->col_count == 0);
if (!__pyx_t_4) {
} else {
__pyx_t_3 = __pyx_t_4;
goto __pyx_L7_bool_binop_done;
}
__pyx_t_4 = (__pyx_v_plan->row_count == 0);
__pyx_t_3 = __pyx_t_4;
__pyx_L7_bool_binop_done:;
if (__pyx_t_3) {
/* … */
}
+08625: return 0
{
__pyx_r = 0;
}
goto __pyx_L3_return;
08626:
+08627: _dataframe_apply_roundtrip_overrides(df, plan)
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_apply_roundtrip_overrides(__pyx_v_df, __pyx_v_plan); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8627, __pyx_L4_error)
+08628: _dataframe_columnar_promote_cols(df, plan)
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_promote_cols(__pyx_v_df, __pyx_v_plan); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8628, __pyx_L4_error)
+08629: _dataframe_columnar_validate_plan(df, plan)
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_validate_plan(__pyx_v_df, __pyx_v_plan); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8629, __pyx_L4_error)
+08630: _dataframe_columnar_prebuild_pyobj(df, plan)
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_prebuild_pyobj(__pyx_v_df, __pyx_v_plan); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8630, __pyx_L4_error)
+08631: rows_per_chunk = _dataframe_columnar_rows_per_chunk(
__pyx_v_rows_per_chunk = __pyx_f_7questdb_7_client__dataframe_columnar_rows_per_chunk(__pyx_v_plan, __pyx_v_max_rows_per_batch);
08632: plan, max_rows_per_batch)
08633:
+08634: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+08635: conn = _direct_conn_open(src, budget_ms, &err)
__pyx_v_conn = __pyx_f_7questdb_7_client__direct_conn_open(__pyx_v_src, __pyx_v_budget_ms, (&__pyx_v_err));
+08636: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+08637: if conn == NULL:
__pyx_t_3 = (__pyx_v_conn == NULL);
if (unlikely(__pyx_t_3)) {
/* … */
}
+08638: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8638, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 8638, __pyx_L4_error)
08639:
+08640: chunk = qwp_chunk_new(
__pyx_v_chunk = qwp_chunk_new(__pyx_v_plan->c_table_name.buf, __pyx_v_plan->c_table_name.len, (&__pyx_v_err));
08641: plan.c_table_name.buf,
08642: plan.c_table_name.len,
08643: &err)
+08644: if chunk == NULL:
__pyx_t_3 = (__pyx_v_chunk == NULL);
if (unlikely(__pyx_t_3)) {
/* … */
}
+08645: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8645, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 8645, __pyx_L4_error)
+08646: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L16_try_end;
__pyx_L11_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
__pyx_L13_except_error:;
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
goto __pyx_L4_error;
__pyx_L16_try_end:;
}
+08647: row_offset = 0
__pyx_v_row_offset = 0;
+08648: while row_offset < plan.row_count:
while (1) {
__pyx_t_3 = (__pyx_v_row_offset < __pyx_v_plan->row_count);
if (!__pyx_t_3) break;
+08649: if not qwp_chunk_clear(chunk, &err):
__pyx_t_3 = (!qwp_chunk_clear(__pyx_v_chunk, (&__pyx_v_err)));
if (unlikely(__pyx_t_3)) {
/* … */
}
+08650: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8650, __pyx_L11_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 8650, __pyx_L11_error)
+08651: chunk_rows = rows_per_chunk
__pyx_v_chunk_rows = __pyx_v_rows_per_chunk;
+08652: if chunk_rows > plan.row_count - row_offset:
__pyx_t_3 = (__pyx_v_chunk_rows > (__pyx_v_plan->row_count - __pyx_v_row_offset));
if (__pyx_t_3) {
/* … */
}
+08653: chunk_rows = plan.row_count - row_offset
__pyx_v_chunk_rows = (__pyx_v_plan->row_count - __pyx_v_row_offset);
+08654: _dataframe_columnar_populate_chunk(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_populate_chunk(__pyx_v_plan, __pyx_v_chunk, __pyx_v_row_offset, __pyx_v_chunk_rows); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8654, __pyx_L11_error)
08655: plan,
08656: chunk,
08657: row_offset,
08658: chunk_rows)
+08659: _dataframe_columnar_flush(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_flush(__pyx_v_conn, __pyx_v_chunk, 1, __pyx_v_may_have_committed_prefix); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8659, __pyx_L11_error)
08660: conn,
08661: chunk,
08662: True,
08663: may_have_committed_prefix)
+08664: flushed = True
__pyx_v_flushed = 1;
+08665: row_offset += chunk_rows
__pyx_v_row_offset = (__pyx_v_row_offset + __pyx_v_chunk_rows);
}
08666:
+08667: _dataframe_columnar_sync(conn)
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_sync(__pyx_v_conn); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8667, __pyx_L11_error)
+08668: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._dataframe_numpy_publish", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_8, &__pyx_t_9) < 0) __PYX_ERR(0, 8668, __pyx_L13_except_error)
__Pyx_XGOTREF(__pyx_t_1);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
+08669: force_drop_conn = _dataframe_columnar_force_drop_after_error(
__pyx_v_force_drop_conn = __pyx_f_7questdb_7_client__dataframe_columnar_force_drop_after_error(__pyx_v_conn, __pyx_v_flushed);
08670: conn, flushed)
+08671: raise
__Pyx_GIVEREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_8); __Pyx_XGIVEREF(__pyx_t_9); __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_8, __pyx_t_9); __pyx_t_1 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __PYX_ERR(0, 8671, __pyx_L13_except_error) }
08672:
+08673: return 0
{
__pyx_r = 0;
}
goto __pyx_L3_return;
}
08674: finally:
+08675: _ensure_has_gil(&gs)
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_5 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_ExceptionSwap(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_5);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__pyx_t_10 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_12 = __pyx_filename;
{
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
/* … */
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+08676: if conn != NULL:
__pyx_t_3 = (__pyx_v_conn != NULL);
if (__pyx_t_3) {
/* … */
}
/* … */
__pyx_t_3 = (__pyx_v_conn != NULL);
if (__pyx_t_3) {
/* … */
}
+08677: with nogil:
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L28;
}
__pyx_L28:;
}
}
/* … */
{
PyThreadState * _save;
_save = PyEval_SaveThread();
__Pyx_FastGIL_Remember();
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
__Pyx_FastGIL_Forget();
PyEval_RestoreThread(_save);
goto __pyx_L33;
}
__pyx_L33:;
}
}
+08678: _direct_conn_close(src, conn, force_drop_conn)
__pyx_f_7questdb_7_client__direct_conn_close(__pyx_v_src, __pyx_v_conn, __pyx_v_force_drop_conn);
}
/* … */
__pyx_f_7questdb_7_client__direct_conn_close(__pyx_v_src, __pyx_v_conn, __pyx_v_force_drop_conn);
}
+08679: if chunk != NULL:
__pyx_t_3 = (__pyx_v_chunk != NULL);
if (__pyx_t_3) {
/* … */
}
/* … */
__pyx_t_3 = (__pyx_v_chunk != NULL);
if (__pyx_t_3) {
/* … */
}
+08680: qwp_chunk_free(chunk)
qwp_chunk_free(__pyx_v_chunk);
/* … */
qwp_chunk_free(__pyx_v_chunk);
08681: # The plan is rebuilt on each failover attempt; release this
08682: # attempt's plan so a re-send starts from a blank plan.
+08683: dataframe_plan_release(plan)
__pyx_f_7questdb_7_client_dataframe_plan_release(__pyx_v_plan);
/* … */
__pyx_f_7questdb_7_client_dataframe_plan_release(__pyx_v_plan);
+08684: plan[0] = dataframe_plan_blank()
(__pyx_v_plan[0]) = __pyx_f_7questdb_7_client_dataframe_plan_blank();
}
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ErrRestore(__pyx_t_7, __pyx_t_6, __pyx_t_5);
__pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_5 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0;
__pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_12;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_2 = __pyx_r;
/* … */
(__pyx_v_plan[0]) = __pyx_f_7questdb_7_client_dataframe_plan_blank();
__pyx_r = __pyx_t_2;
goto __pyx_L0;
}
}
08685:
08686:
+08687: cdef void_int _direct_dataframe_run(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__direct_dataframe_run(struct __pyx_t_7questdb_7_client_direct_conn_source_t *__pyx_v_src, double __pyx_v_reconnect_max_s, struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at, size_t __pyx_v_max_rows_per_batch, PyObject *__pyx_v_schema_overrides) {
uint64_t __pyx_v_budget_ms;
double __pyx_v_deadline;
double __pyx_v_remaining;
int __pyx_v_may_have_committed_prefix;
int __pyx_v_nonreplayable_consumed;
int __pyx_v_call_in_doubt;
PyObject *__pyx_v_validated_overrides = 0;
int64_t __pyx_v_at_micros;
PyObject *__pyx_v_ve = NULL;
PyObject *__pyx_v_exc = NULL;
__pyx_t_7questdb_7_client_void_int __pyx_r;
__Pyx_INCREF(__pyx_v_df);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_XDECREF(__pyx_t_30);
__Pyx_AddTraceback("questdb._client._direct_dataframe_run", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_validated_overrides);
__Pyx_XDECREF(__pyx_v_ve);
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_XDECREF(__pyx_v_df);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08688: direct_conn_source_t* src,
08689: double reconnect_max_s,
08690: qdb_pystr_buf* b,
08691: dataframe_plan_t* plan,
08692: object df,
08693: object table_name,
08694: object table_name_col,
08695: object symbols,
08696: object at,
08697: size_t max_rows_per_batch,
08698: object schema_overrides) except -1:
+08699: cdef uint64_t budget_ms = 0
__pyx_v_budget_ms = 0;
+08700: cdef double deadline = 0.0
__pyx_v_deadline = 0.0;
+08701: cdef double remaining = 0.0
__pyx_v_remaining = 0.0;
+08702: cdef bint may_have_committed_prefix = False
__pyx_v_may_have_committed_prefix = 0;
+08703: cdef bint nonreplayable_consumed = False
__pyx_v_nonreplayable_consumed = 0;
+08704: cdef bint call_in_doubt = False
__pyx_v_call_in_doubt = 0;
+08705: cdef object validated_overrides = _validate_schema_overrides(
__pyx_t_1 = __pyx_f_7questdb_7_client__validate_schema_overrides(__pyx_v_schema_overrides); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8705, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_validated_overrides = __pyx_t_1; __pyx_t_1 = 0;
08706: schema_overrides)
+08707: if max_rows_per_batch <= 0:
__pyx_t_2 = (__pyx_v_max_rows_per_batch <= 0);
if (unlikely(__pyx_t_2)) {
/* … */
}
+08708: raise ValueError('max_rows_per_batch must be >= 1.')
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_max_rows_per_batch_must_be_1};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8708, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 8708, __pyx_L1_error)
+08709: if table_name is not None and table_name_col is not None:
__pyx_t_5 = (__pyx_v_table_name != Py_None);
if (__pyx_t_5) {
} else {
__pyx_t_2 = __pyx_t_5;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_5 = (__pyx_v_table_name_col != Py_None);
__pyx_t_2 = __pyx_t_5;
__pyx_L5_bool_binop_done:;
if (unlikely(__pyx_t_2)) {
/* … */
}
+08710: raise ValueError(
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Can_specify_only_one_of_table_na};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8710, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 8710, __pyx_L1_error)
08711: 'Can specify only one of `table_name` or `table_name_col`.')
+08712: if table_name_col is not None:
__pyx_t_2 = (__pyx_v_table_name_col != Py_None);
if (unlikely(__pyx_t_2)) {
/* … */
}
08713: # This path writes one table per call, so it has nowhere to put
08714: # a table-name column. The check runs before the planner looks
08715: # at any column, so the error always says the same thing. Later
08716: # on, a column the planner cannot type by itself — a 32-byte
08717: # binary with no type claim, say — would raise first and point
08718: # at the wrong problem.
+08719: raise UnsupportedDataFrameShapeError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8719, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_4 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_6))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
__pyx_t_4 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_QWP_column_ingestion_writes_one};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8719, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 8719, __pyx_L1_error)
08720: 'QWP column ingestion writes one table per call and does '
08721: 'not accept `table_name_col`. That is QuestDB.dataframe() '
08722: 'and Sender.dataframe() over ws:: / wss::. Split the frame '
08723: 'on that column and make one call per table, e.g. '
08724: "`for name, group in df.groupby('tbl'): "
08725: "dataframe(group.drop(columns='tbl'), table_name=name, "
08726: "at='ts')`. Those calls take `symbols` and "
08727: "`schema_overrides` and read `df.attrs['questdb']`, so "
08728: 'LONG256 and the other column types work as normal. '
08729: 'Sender.dataframe() over tcp:: / http:: does accept '
08730: '`table_name_col`: it serializes row by row, so it can '
08731: 'change table between rows.')
+08732: if isinstance(at, datetime.datetime):
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8732, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8732, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = PyObject_IsInstance(__pyx_v_at, __pyx_t_6); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8732, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__pyx_t_2) { /* … */ }
+08733: if at != at:
__pyx_t_2 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_v_at, __pyx_v_at, Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8733, __pyx_L1_error) if (unlikely(__pyx_t_2)) { /* … */ }
+08734: raise QuestDBError(
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8734, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
+08735: QuestDBErrorCode.InvalidTimestamp,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8735, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8735, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_4 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_4 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_8, __pyx_mstate_global->__pyx_kp_u_Bad_argument_at_NaT_is_not_a_val}; __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8734, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); } __Pyx_Raise(__pyx_t_6, 0, 0, 0); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __PYX_ERR(0, 8734, __pyx_L1_error)
08736: 'Bad argument `at`: NaT is not a valid timestamp.')
+08737: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
goto __pyx_L15_try_end;
__pyx_L10_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L12_except_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
goto __pyx_L1_error;
__pyx_L15_try_end:;
}
+08738: at_micros = datetime_to_micros(at)
if (!(likely(((__pyx_v_at) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_at, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 8738, __pyx_L10_error) __pyx_t_12 = __pyx_f_7questdb_7_client_datetime_to_micros(((PyDateTime_DateTime *)__pyx_v_at)); if (unlikely(__pyx_t_12 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 8738, __pyx_L10_error) __pyx_v_at_micros = __pyx_t_12;
+08739: except ValueError as ve:
__pyx_t_13 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_ValueError)))); if (__pyx_t_13) { __Pyx_AddTraceback("questdb._client._direct_dataframe_run", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_3, &__pyx_t_8) < 0) __PYX_ERR(0, 8739, __pyx_L12_except_error) __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_3); __Pyx_XGOTREF(__pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_v_ve = __pyx_t_3; /*try:*/ { /* … */ /*finally:*/ { __pyx_L21_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_ExceptionSwap(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25); if ( unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22); __Pyx_XGOTREF(__pyx_t_20); __Pyx_XGOTREF(__pyx_t_21); __Pyx_XGOTREF(__pyx_t_22); __Pyx_XGOTREF(__pyx_t_23); __Pyx_XGOTREF(__pyx_t_24); __Pyx_XGOTREF(__pyx_t_25); __pyx_t_13 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename; { __Pyx_DECREF(__pyx_v_ve); __pyx_v_ve = 0; } __Pyx_XGIVEREF(__pyx_t_23); __Pyx_XGIVEREF(__pyx_t_24); __Pyx_XGIVEREF(__pyx_t_25); __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25); __Pyx_XGIVEREF(__pyx_t_20); __Pyx_XGIVEREF(__pyx_t_21); __Pyx_XGIVEREF(__pyx_t_22); __Pyx_ErrRestore(__pyx_t_20, __pyx_t_21, __pyx_t_22); __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_lineno = __pyx_t_13; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19; goto __pyx_L12_except_error; } } } goto __pyx_L12_except_error;
+08740: raise QuestDBError(
__pyx_t_7 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 8740, __pyx_L21_error)
__Pyx_GOTREF(__pyx_t_14);
+08741: QuestDBErrorCode.InvalidTimestamp,
__Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 8741, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_15); __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 8741, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+08742: f'Bad argument `at`: {ve}') from ve
__pyx_t_15 = __Pyx_PyObject_FormatSimple(__pyx_v_ve, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 8742, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_15); __pyx_t_17 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_Bad_argument_at, __pyx_t_15); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8742, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __pyx_t_4 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_14))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_14); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_14); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_14, __pyx__function); __pyx_t_4 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_16, __pyx_t_17}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_14, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8740, __pyx_L21_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, __pyx_v_ve); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 8740, __pyx_L21_error) }
+08743: if at_micros < 0:
__pyx_t_2 = (__pyx_v_at_micros < 0);
if (unlikely(__pyx_t_2)) {
/* … */
}
+08744: raise ValueError(
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Bad_argument_at_Cannot_use_a_dat};
__pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8744, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
}
__Pyx_Raise(__pyx_t_8, 0, 0, 0);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__PYX_ERR(0, 8744, __pyx_L1_error)
08745: 'Bad argument `at`: Cannot use a datetime before the '
08746: 'Unix epoch (1970-01-01 00:00:00).')
+08747: if not isinstance(
__pyx_t_26 = (!__pyx_t_5);
if (__pyx_t_26) {
} else {
__pyx_t_2 = __pyx_t_26;
goto __pyx_L29_bool_binop_done;
}
/* … */
if (unlikely(__pyx_t_2)) {
/* … */
}
08748: at,
+08749: (str, ServerTimestampType, TimestampNanos,
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_ServerTimestampType); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8749, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); /* … */ __pyx_t_26 = PyUnicode_Check(__pyx_v_at); if (!__pyx_t_26) { } else { __pyx_t_5 = __pyx_t_26; goto __pyx_L31_bool_binop_done; } /* … */ __pyx_t_26 = PyObject_IsInstance(__pyx_v_at, __pyx_t_8); if (!__pyx_t_26) { } else { __pyx_t_5 = __pyx_t_26; goto __pyx_L31_bool_binop_done; } /* … */ __pyx_t_26 = __Pyx_TypeCheck(__pyx_v_at, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos); if (!__pyx_t_26) { } else { __pyx_t_5 = __pyx_t_26; goto __pyx_L31_bool_binop_done; }
+08750: datetime.datetime)) and not (
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8750, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8750, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* … */ __pyx_t_26 = PyObject_IsInstance(__pyx_v_at, __pyx_t_6); __pyx_t_5 = __pyx_t_26; __pyx_L31_bool_binop_done:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; /* … */ __pyx_t_27 = (!__pyx_t_26); __pyx_t_2 = __pyx_t_27; __pyx_L29_bool_binop_done:;
+08751: isinstance(at, int) and not isinstance(at, bool)):
__pyx_t_5 = PyLong_Check(__pyx_v_at); if (__pyx_t_5) { } else { __pyx_t_26 = __pyx_t_5; goto __pyx_L35_bool_binop_done; } __pyx_t_5 = __Pyx_TypeCheck(__pyx_v_at, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); __pyx_t_27 = (!__pyx_t_5); __pyx_t_26 = __pyx_t_27; __pyx_L35_bool_binop_done:;
+08752: raise QuestDBError(
__pyx_t_6 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8752, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
+08753: QuestDBErrorCode.InvalidTimestamp,
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8753, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 8753, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_4 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_6); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_4 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_14, __pyx_mstate_global->__pyx_kp_u_dataframe_requires_at_to_be_the}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8752, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 8752, __pyx_L1_error)
08754: 'dataframe() requires `at` to be the designated timestamp '
08755: 'column (by name or index), a fixed timestamp shared by every '
08756: 'row (TimestampNanos / datetime), or the explicit '
08757: '`ServerTimestamp` sentinel to let the server assign each '
08758: 'row\'s timestamp on arrival.')
08759: # Once per call, ahead of the retry loop below, so a reconnect does
08760: # not repeat it.
+08761: df = _dataframe_freeze_claim(df)
__pyx_t_8 = __pyx_f_7questdb_7_client__dataframe_freeze_claim(__pyx_v_df); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8761, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_8); __pyx_t_8 = 0;
+08762: _dataframe_log_claim_problems(df)
__pyx_t_28 = __pyx_f_7questdb_7_client__dataframe_log_claim_problems(__pyx_v_df); if (unlikely(__pyx_t_28 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8762, __pyx_L1_error)
08763: # Ahead of the choice between the Arrow and the NumPy route, so both
08764: # see the same signed GEOHASH columns.
+08765: df = _dataframe_reinterpret_unsigned_geohash(df, schema_overrides)
__pyx_t_8 = __pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash(__pyx_v_df, __pyx_v_schema_overrides); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8765, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_8); __pyx_t_8 = 0;
08766: # A zero budget (standalone from-conf source) makes a single attempt:
08767: # a transient failure surfaces immediately rather than re-dialling.
+08768: deadline = time.monotonic() + reconnect_max_s
__pyx_t_3 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 8768, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8768, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __pyx_t_4 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_4 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8768, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); } __pyx_t_6 = PyFloat_FromDouble(__pyx_v_reconnect_max_s); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8768, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = __Pyx_PyNumber_Add_object_float(__pyx_t_8, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8768, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_29 = __Pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_29 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 8768, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_deadline = __pyx_t_29;
+08769: while True:
while (1) {
08770: # Reclaim string storage from a prior attempt's released plan.
+08771: qdb_pystr_buf_clear(b)
qdb_pystr_buf_clear(__pyx_v_b);
+08772: try:
{
/*try:*/ {
/* … */
}
__pyx_L39_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L41_except_error:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_10, __pyx_t_9);
goto __pyx_L1_error;
__pyx_L43_try_return:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_10, __pyx_t_9);
goto __pyx_L0;
__pyx_L40_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_10, __pyx_t_9);
}
}
+08773: if _dataframe_client_try_capsule_path(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_client_try_capsule_path(__pyx_v_src, __pyx_v_budget_ms, __pyx_v_df, __pyx_v_table_name, __pyx_v_symbols, __pyx_v_at, __pyx_v_max_rows_per_batch, __pyx_v_validated_overrides, (&__pyx_v_may_have_committed_prefix), (&__pyx_v_nonreplayable_consumed)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8773, __pyx_L39_error)
if (__pyx_t_2) {
/* … */
}
08774: src,
08775: budget_ms,
08776: df,
08777: table_name,
08778: symbols,
08779: at,
08780: max_rows_per_batch,
08781: validated_overrides,
08782: &may_have_committed_prefix,
08783: &nonreplayable_consumed):
+08784: return 0
{
__pyx_r = 0;
}
goto __pyx_L43_try_return;
+08785: if validated_overrides is not None:
__pyx_t_2 = (__pyx_v_validated_overrides != Py_None);
if (unlikely(__pyx_t_2)) {
/* … */
}
+08786: raise UnsupportedDataFrameShapeError(
__pyx_t_6 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8786, __pyx_L39_error)
__Pyx_GOTREF(__pyx_t_8);
+08787: _schema_overrides_need_arrow_message(df))
__pyx_t_14 = __pyx_f_7questdb_7_client__schema_overrides_need_arrow_message(__pyx_v_df); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 8787, __pyx_L39_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_4 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_8))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8); assert(__pyx_t_6); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_8, __pyx__function); __pyx_t_4 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_14}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8786, __pyx_L39_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 8786, __pyx_L39_error)
+08788: _dataframe_numpy_publish(
__pyx_t_28 = __pyx_f_7questdb_7_client__dataframe_numpy_publish(__pyx_v_src, __pyx_v_budget_ms, __pyx_v_b, __pyx_v_plan, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_v_max_rows_per_batch, (&__pyx_v_may_have_committed_prefix)); if (unlikely(__pyx_t_28 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8788, __pyx_L39_error)
08789: src, budget_ms, b, plan, df, table_name,
08790: table_name_col, symbols, at, max_rows_per_batch,
08791: &may_have_committed_prefix)
+08792: return 0
{
__pyx_r = 0;
}
goto __pyx_L43_try_return;
+08793: except QuestDBError as exc:
__Pyx_ErrFetch(&__pyx_t_3, &__pyx_t_8, &__pyx_t_14); __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8793, __pyx_L41_except_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_18 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_3, __pyx_t_6); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_ErrRestore(__pyx_t_3, __pyx_t_8, __pyx_t_14); __pyx_t_3 = 0; __pyx_t_8 = 0; __pyx_t_14 = 0; if (__pyx_t_18) { __Pyx_AddTraceback("questdb._client._direct_dataframe_run", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_14, &__pyx_t_8, &__pyx_t_3) < 0) __PYX_ERR(0, 8793, __pyx_L41_except_error) __Pyx_XGOTREF(__pyx_t_14); __Pyx_XGOTREF(__pyx_t_8); __Pyx_XGOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_t_8); __pyx_v_exc = __pyx_t_8; /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; goto __pyx_L55; } __pyx_L54_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_30); __pyx_t_30 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20); if ( unlikely(__Pyx_GetException(&__pyx_t_25, &__pyx_t_24, &__pyx_t_23) < 0)) __Pyx_ErrFetch(&__pyx_t_25, &__pyx_t_24, &__pyx_t_23); __Pyx_XGOTREF(__pyx_t_25); __Pyx_XGOTREF(__pyx_t_24); __Pyx_XGOTREF(__pyx_t_23); __Pyx_XGOTREF(__pyx_t_22); __Pyx_XGOTREF(__pyx_t_21); __Pyx_XGOTREF(__pyx_t_20); __pyx_t_18 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_19 = __pyx_filename; { __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; } __Pyx_XGIVEREF(__pyx_t_22); __Pyx_XGIVEREF(__pyx_t_21); __Pyx_XGIVEREF(__pyx_t_20); __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_21, __pyx_t_20); __Pyx_XGIVEREF(__pyx_t_25); __Pyx_XGIVEREF(__pyx_t_24); __Pyx_XGIVEREF(__pyx_t_23); __Pyx_ErrRestore(__pyx_t_25, __pyx_t_24, __pyx_t_23); __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_lineno = __pyx_t_18; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_19; goto __pyx_L41_except_error; } __pyx_L55:; } __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L40_exception_handled; } goto __pyx_L41_except_error;
08794: # Aggregate at the DataFrame boundary, including validation and
08795: # stream errors after earlier successful batches. The native flag
08796: # describes the failed flush; only this driver knows the source's
08797: # publication history across checkpoints and connections.
+08798: call_in_doubt = exc.in_doubt or may_have_committed_prefix
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8798, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_27 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_27 < 0))) __PYX_ERR(0, 8798, __pyx_L54_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (!__pyx_t_27) { } else { __pyx_t_2 = __pyx_t_27; goto __pyx_L56_bool_binop_done; } __pyx_t_2 = __pyx_v_may_have_committed_prefix; __pyx_L56_bool_binop_done:; __pyx_v_call_in_doubt = __pyx_t_2;
08799:
08800: # Select the one-shot guidance before the delivery-risk gate so a
08801: # caller sees both facts when both apply. A drained stream cannot
08802: # be replayed even when duplicate delivery is not in doubt.
+08803: if nonreplayable_consumed:
if (__pyx_v_nonreplayable_consumed) {
/* … */
}
+08804: if call_in_doubt:
if (unlikely(__pyx_v_call_in_doubt)) {
/* … */
}
+08805: raise QuestDBError(
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8805, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_17);
+08806: exc.code,
__pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 8806, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_16);
+08807: f'{exc} A prefix of this DataFrame call may have '
__pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8807, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_15 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_A_prefix_of_this_DataFrame_call); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 8807, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
08808: f'committed, and the input stream was already '
08809: f'partially consumed and cannot be replayed. Create '
08810: f'a fresh reader, then reconcile or deduplicate any '
08811: f'already committed rows before retrying.',
+08812: exc.sender_error,
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_sender_error); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8812, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_7);
+08813: in_doubt=True) from exc
__pyx_t_4 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_17))) {
__pyx_t_1 = PyMethod_GET_SELF(__pyx_t_17);
assert(__pyx_t_1);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_17);
__Pyx_INCREF(__pyx_t_1);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_17, __pyx__function);
__pyx_t_4 = 0;
}
#endif
{
PyObject *__pyx_callargs[5] = {__pyx_t_1, __pyx_t_16, __pyx_t_15, __pyx_t_7, Py_True};
#if CYTHON_VECTORCALL
__pyx_t_30 = __pyx_mstate_global->__pyx_tuple[23];
if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 8805, __pyx_L54_error)
__Pyx_INCREF(__pyx_t_30);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_in_doubt};
__pyx_t_30 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+4, 1);
if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 8805, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_30);
}
#endif
__pyx_t_6 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_4, (4-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_30);
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8805, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_6);
}
__Pyx_Raise(__pyx_t_6, 0, 0, __pyx_v_exc);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__PYX_ERR(0, 8805, __pyx_L54_error)
08814: # A fresh reader helps only with a failure that a retry
08815: # can get past. Anything else -- a column the route
08816: # cannot carry, an override that does not apply -- fails
08817: # the same way on any reader, so it goes out unchanged.
+08818: if exc.code not in (
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8818, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_6); /* … */ __pyx_t_27 = __pyx_t_2; if (unlikely(__pyx_t_27)) { /* … */ }
+08819: QuestDBErrorCode.FailoverRetry,
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8819, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_30 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_FailoverRetry); if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 8819, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_30); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_27 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_t_6, __pyx_t_30, Py_NE); if (unlikely((__pyx_t_27 < 0))) __PYX_ERR(0, 8818, __pyx_L54_error) __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0; if (__pyx_t_27) { } else { __pyx_t_2 = __pyx_t_27; goto __pyx_L61_bool_binop_done; }
+08820: QuestDBErrorCode.SocketError):
__Pyx_GetModuleGlobalName(__pyx_t_30, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 8820, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_30); __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_30, __pyx_mstate_global->__pyx_n_u_SocketError); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8820, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0; __pyx_t_27 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_t_6, __pyx_t_17, Py_NE); if (unlikely((__pyx_t_27 < 0))) __PYX_ERR(0, 8818, __pyx_L54_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_2 = __pyx_t_27; __pyx_L61_bool_binop_done:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+08821: raise
__Pyx_GIVEREF(__pyx_t_14); __Pyx_GIVEREF(__pyx_t_8); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ErrRestoreWithState(__pyx_t_14, __pyx_t_8, __pyx_t_3); __pyx_t_14 = 0; __pyx_t_8 = 0; __pyx_t_3 = 0; __PYX_ERR(0, 8821, __pyx_L54_error)
+08822: raise QuestDBError(
__pyx_t_17 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_30, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 8822, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_30);
+08823: exc.code,
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8823, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_7);
+08824: f'{exc} The input stream was already partially '
__pyx_t_15 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 8824, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_15); __pyx_t_16 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_15, __pyx_mstate_global->__pyx_kp_u_The_input_stream_was_already_pa); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 8824, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
08825: f'consumed and cannot be replayed; retry with a '
08826: f'fresh reader.',
+08827: exc.sender_error,
__pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_sender_error); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 8827, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_15);
+08828: in_doubt=False) from exc
__pyx_t_4 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_30))) {
__pyx_t_17 = PyMethod_GET_SELF(__pyx_t_30);
assert(__pyx_t_17);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_30);
__Pyx_INCREF(__pyx_t_17);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_30, __pyx__function);
__pyx_t_4 = 0;
}
#endif
{
PyObject *__pyx_callargs[5] = {__pyx_t_17, __pyx_t_7, __pyx_t_16, __pyx_t_15, Py_False};
#if CYTHON_VECTORCALL
__pyx_t_1 = __pyx_mstate_global->__pyx_tuple[23];
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8822, __pyx_L54_error)
__Pyx_INCREF(__pyx_t_1);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_in_doubt};
__pyx_t_1 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+4, 1);
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8822, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_1);
}
#endif
__pyx_t_6 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_30, __pyx_callargs+__pyx_t_4, (4-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_1);
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8822, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_6);
}
__Pyx_Raise(__pyx_t_6, 0, 0, __pyx_v_exc);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__PYX_ERR(0, 8822, __pyx_L54_error)
08829:
08830: # Refuse a whole-source replay once any batch in this DataFrame
08831: # call may have committed. If only the Python sticky guard knows
08832: # about that prefix, widen the exposed error as well; otherwise a
08833: # caller could read `in_doubt=False` and manually repeat the same
08834: # unsafe replay.
+08835: if call_in_doubt:
if (__pyx_v_call_in_doubt) {
/* … */
}
+08836: if exc.in_doubt:
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8836, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_27 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_27 < 0))) __PYX_ERR(0, 8836, __pyx_L54_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(__pyx_t_27)) { /* … */ }
+08837: raise
__Pyx_GIVEREF(__pyx_t_14); __Pyx_GIVEREF(__pyx_t_8); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ErrRestoreWithState(__pyx_t_14, __pyx_t_8, __pyx_t_3); __pyx_t_14 = 0; __pyx_t_8 = 0; __pyx_t_3 = 0; __PYX_ERR(0, 8837, __pyx_L54_error)
+08838: raise QuestDBError(
__pyx_t_30 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8838, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_1);
+08839: exc.code,
__pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 8839, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_15);
+08840: f'{exc} An earlier batch from this DataFrame call may '
__pyx_t_16 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 8840, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_16, __pyx_mstate_global->__pyx_kp_u_An_earlier_batch_from_this_Data); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8840, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
08841: f'have committed; replaying the original input from row '
08842: f'zero may duplicate rows.',
+08843: exc.sender_error,
__pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_sender_error); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 8843, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_16);
+08844: in_doubt=True) from exc
__pyx_t_4 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_1))) {
__pyx_t_30 = PyMethod_GET_SELF(__pyx_t_1);
assert(__pyx_t_30);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
__Pyx_INCREF(__pyx_t_30);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
__pyx_t_4 = 0;
}
#endif
{
PyObject *__pyx_callargs[5] = {__pyx_t_30, __pyx_t_15, __pyx_t_7, __pyx_t_16, Py_True};
#if CYTHON_VECTORCALL
__pyx_t_17 = __pyx_mstate_global->__pyx_tuple[23];
if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8838, __pyx_L54_error)
__Pyx_INCREF(__pyx_t_17);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_in_doubt};
__pyx_t_17 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+4, 1);
if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8838, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_17);
}
#endif
__pyx_t_6 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_4, (4-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_17);
__Pyx_XDECREF(__pyx_t_30); __pyx_t_30 = 0;
__Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8838, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_6);
}
__Pyx_Raise(__pyx_t_6, 0, 0, __pyx_v_exc);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__PYX_ERR(0, 8838, __pyx_L54_error)
08845: # Delivery status and retryability are independent. A local
08846: # validation error still requires the caller to correct its input.
+08847: if exc.code not in (
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8847, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_6); /* … */ __pyx_t_2 = __pyx_t_27; if (unlikely(__pyx_t_2)) { /* … */ }
+08848: QuestDBErrorCode.FailoverRetry,
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8848, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_FailoverRetry); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8848, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_t_6, __pyx_t_17, Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8847, __pyx_L54_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (__pyx_t_2) { } else { __pyx_t_27 = __pyx_t_2; goto __pyx_L66_bool_binop_done; }
+08849: QuestDBErrorCode.SocketError):
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8849, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_SocketError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8849, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_2 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_t_6, __pyx_t_1, Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8847, __pyx_L54_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_27 = __pyx_t_2; __pyx_L66_bool_binop_done:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+08850: raise
__Pyx_GIVEREF(__pyx_t_14); __Pyx_GIVEREF(__pyx_t_8); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ErrRestoreWithState(__pyx_t_14, __pyx_t_8, __pyx_t_3); __pyx_t_14 = 0; __pyx_t_8 = 0; __pyx_t_3 = 0; __PYX_ERR(0, 8850, __pyx_L54_error)
+08851: remaining = deadline - time.monotonic()
__pyx_t_6 = PyFloat_FromDouble(__pyx_v_deadline); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8851, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_17 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 8851, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8851, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_4 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_17); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_17); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_4 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_17, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8851, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_7 = __Pyx_PyNumber_Subtract_float_object(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8851, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_29 = __Pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_29 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 8851, __pyx_L54_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_remaining = __pyx_t_29;
+08852: if remaining <= 0.0:
__pyx_t_2 = (__pyx_v_remaining <= 0.0);
if (unlikely(__pyx_t_2)) {
/* … */
}
+08853: raise
__Pyx_GIVEREF(__pyx_t_14); __Pyx_GIVEREF(__pyx_t_8); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ErrRestoreWithState(__pyx_t_14, __pyx_t_8, __pyx_t_3); __pyx_t_14 = 0; __pyx_t_8 = 0; __pyx_t_3 = 0; __PYX_ERR(0, 8853, __pyx_L54_error)
+08854: budget_ms = <uint64_t>(remaining * 1000.0)
__pyx_v_budget_ms = ((uint64_t)(__pyx_v_remaining * 1000.0));
}
08855:
08856:
+08857: cdef void_int _capsule_consume_stream_with_hint(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__capsule_consume_stream_with_hint(struct qwp_direct_sender *__pyx_v_conn, PyObject *__pyx_v_stream_owner, struct line_sender_table_name __pyx_v_c_table_name, struct line_sender_column_name *__pyx_v_c_ts_column_ptr, int __pyx_v_at_scalar_set, int64_t __pyx_v_at_scalar_nanos, struct ArrowSchema *__pyx_v_c_schema, struct qwp_arrow_override const *__pyx_v_c_overrides, size_t __pyx_v_c_overrides_len, int *__pyx_v_any_flushed, size_t *__pyx_v_deferred_since_sync, int *__pyx_v_may_have_committed_prefix, size_t __pyx_v_max_rows_per_batch, int __pyx_v_can_slice, PyObject *__pyx_v_binary_names, PyObject *__pyx_v_unlabelled) {
PyObject *__pyx_v_hint = 0;
PyObject *__pyx_v_exc = NULL;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_AddTraceback("questdb._client._capsule_consume_stream_with_hint", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_hint);
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08858: qwp_direct_sender* conn,
08859: object stream_owner,
08860: line_sender_table_name c_table_name,
08861: line_sender_column_name* c_ts_column_ptr,
08862: bint at_scalar_set,
08863: int64_t at_scalar_nanos,
08864: ArrowSchema* c_schema,
08865: const qwp_arrow_override* c_overrides,
08866: size_t c_overrides_len,
08867: bint* any_flushed,
08868: size_t* deferred_since_sync,
08869: bint* may_have_committed_prefix,
08870: size_t max_rows_per_batch,
08871: bint can_slice,
08872: object binary_names,
08873: object unlabelled) except -1:
08874: cdef str hint
+08875: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_try_end;
__pyx_L3_error:;
/* … */
__pyx_L5_except_error:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L1_error;
__pyx_L8_try_end:;
}
+08876: _capsule_consume_stream(
__pyx_t_4 = __pyx_f_7questdb_7_client__capsule_consume_stream(__pyx_v_conn, __pyx_v_stream_owner, __pyx_v_c_table_name, __pyx_v_c_ts_column_ptr, __pyx_v_at_scalar_set, __pyx_v_at_scalar_nanos, __pyx_v_c_schema, __pyx_v_c_overrides, __pyx_v_c_overrides_len, __pyx_v_any_flushed, __pyx_v_deferred_since_sync, __pyx_v_may_have_committed_prefix, __pyx_v_binary_names, __pyx_v_unlabelled); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8876, __pyx_L3_error)
08877: conn, stream_owner, c_table_name, c_ts_column_ptr,
08878: at_scalar_set, at_scalar_nanos, c_schema,
08879: c_overrides, c_overrides_len, any_flushed,
08880: deferred_since_sync, may_have_committed_prefix,
08881: binary_names, unlabelled)
+08882: except QuestDBError as exc:
__Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8882, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_5, __pyx_t_8); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_ErrRestore(__pyx_t_5, __pyx_t_6, __pyx_t_7); __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; if (__pyx_t_9) { __Pyx_AddTraceback("questdb._client._capsule_consume_stream_with_hint", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5) < 0) __PYX_ERR(0, 8882, __pyx_L5_except_error) __Pyx_XGOTREF(__pyx_t_7); __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); __pyx_v_exc = __pyx_t_6; /*try:*/ { /* … */ /*finally:*/ { __pyx_L14_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_ExceptionSwap(&__pyx_t_24, &__pyx_t_25, &__pyx_t_26); if ( unlikely(__Pyx_GetException(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23) < 0)) __Pyx_ErrFetch(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23); __Pyx_XGOTREF(__pyx_t_21); __Pyx_XGOTREF(__pyx_t_22); __Pyx_XGOTREF(__pyx_t_23); __Pyx_XGOTREF(__pyx_t_24); __Pyx_XGOTREF(__pyx_t_25); __Pyx_XGOTREF(__pyx_t_26); __pyx_t_9 = __pyx_lineno; __pyx_t_19 = __pyx_clineno; __pyx_t_20 = __pyx_filename; { __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; } __Pyx_XGIVEREF(__pyx_t_24); __Pyx_XGIVEREF(__pyx_t_25); __Pyx_XGIVEREF(__pyx_t_26); __Pyx_ExceptionReset(__pyx_t_24, __pyx_t_25, __pyx_t_26); __Pyx_XGIVEREF(__pyx_t_21); __Pyx_XGIVEREF(__pyx_t_22); __Pyx_XGIVEREF(__pyx_t_23); __Pyx_ErrRestore(__pyx_t_21, __pyx_t_22, __pyx_t_23); __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_19; __pyx_filename = __pyx_t_20; goto __pyx_L5_except_error; } } } goto __pyx_L5_except_error;
+08883: if _is_batch_too_large_error(exc):
__pyx_t_10 = __pyx_f_7questdb_7_client__is_batch_too_large_error(__pyx_v_exc); if (unlikely(__pyx_t_10 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8883, __pyx_L14_error) if (__pyx_t_10) { /* … */ }
+08884: if exc.code == QuestDBErrorCode.BatchTooLarge:
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8884, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8884, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8884, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_10 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_8, __pyx_t_12, Py_EQ); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 8884, __pyx_L14_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (__pyx_t_10) { /* … */ goto __pyx_L17; }
08885: # The core already split the chunk as far as it can: a single
08886: # row (table schema plus one row's values) still exceeds the
08887: # server's per-batch cap, so a smaller batch cannot help.
08888: hint = (
+08889: 'a single row exceeds the server per-batch cap '
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_a_single_row_exceeds_the_server);
__pyx_v_hint = __pyx_mstate_global->__pyx_kp_u_a_single_row_exceeds_the_server;
08890: '(max_buf_size / the server X-QWP-Max-Batch-Size); reduce '
08891: 'the size of individual values or raise the cap. '
08892: '`max_rows_per_batch` does not bound a single row.')
+08893: elif can_slice:
if (__pyx_v_can_slice) {
/* … */
goto __pyx_L17;
}
08894: hint = (
+08895: f'reduce `max_rows_per_batch` (current: '
__pyx_t_14 = 50;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13[1]);
#endif
__pyx_t_9 = 0;
__pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_13, 3, __pyx_t_14, __pyx_t_9);
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8895, __pyx_L14_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
__pyx_v_hint = ((PyObject*)__pyx_t_8);
__pyx_t_8 = 0;
+08896: f'{max_rows_per_batch}) and retry.')
__pyx_t_12 = __Pyx_PyUnicode_From_size_t(__pyx_v_max_rows_per_batch, 0, ' ', 'd'); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8896, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_13[0] = __pyx_mstate_global->__pyx_kp_u_reduce_max_rows_per_batch_curren; __pyx_t_13[1] = __pyx_t_12; __pyx_t_13[2] = __pyx_mstate_global->__pyx_kp_u_and_retry;
08897: else:
08898: hint = (
+08899: f'this is a streaming Arrow source (e.g. '
/*else*/ {
/* … */
__pyx_t_14 = 255;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13[1]);
#endif
__pyx_t_9 = 0;
__pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_13, 3, __pyx_t_14, __pyx_t_9);
if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8899, __pyx_L14_error)
__Pyx_GOTREF(__pyx_t_12);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_v_hint = ((PyObject*)__pyx_t_12);
__pyx_t_12 = 0;
}
__pyx_L17:;
08900: f'pa.RecordBatchReader); batch size is set by the '
08901: f'producer and `max_rows_per_batch` (current: '
+08902: f'{max_rows_per_batch}) does not bound it. '
__pyx_t_8 = __Pyx_PyUnicode_From_size_t(__pyx_v_max_rows_per_batch, 0, ' ', 'd'); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8902, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_13[0] = __pyx_mstate_global->__pyx_kp_u_this_is_a_streaming_Arrow_source; __pyx_t_13[1] = __pyx_t_8; __pyx_t_13[2] = __pyx_mstate_global->__pyx_kp_u_does_not_bound_it_Materialise_t;
08903: f'Materialise to a `pa.Table` '
08904: f'(`pa.Table.from_batches(reader)`) or re-batch '
08905: f'at the source before passing.')
+08906: raise QuestDBError(
__pyx_t_8 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8906, __pyx_L14_error)
__Pyx_GOTREF(__pyx_t_11);
+08907: exc.code, f'{exc}\nHint: {hint}') from exc
__pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 8907, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_15); __pyx_t_16 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 8907, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_13[0] = __pyx_t_16; __pyx_t_13[1] = __pyx_mstate_global->__pyx_kp_u_Hint; __pyx_t_13[2] = __pyx_v_hint; __pyx_t_14 = 7; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13[0]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13[2]); #endif __pyx_t_9 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_9 |= __Pyx_PyUnicode_KIND_04(__pyx_t_13[0]) | __Pyx_PyUnicode_KIND_04(__pyx_t_13[2]); #endif __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_13, 3, __pyx_t_14, __pyx_t_9); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8907, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_18 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_11))) { __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_11); assert(__pyx_t_8); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11); __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_11, __pyx__function); __pyx_t_18 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_15, __pyx_t_17}; __pyx_t_12 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_18, (3-__pyx_t_18) | (__pyx_t_18*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8906, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_12); } __Pyx_Raise(__pyx_t_12, 0, 0, __pyx_v_exc); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __PYX_ERR(0, 8906, __pyx_L14_error)
+08908: raise
__Pyx_GIVEREF(__pyx_t_7); __Pyx_GIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_5); __Pyx_ErrRestoreWithState(__pyx_t_7, __pyx_t_6, __pyx_t_5); __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_5 = 0; __PYX_ERR(0, 8908, __pyx_L14_error) }
08909:
08910:
+08911: cdef bint _is_batch_too_large_error(object exc):
static int __pyx_f_7questdb_7_client__is_batch_too_large_error(PyObject *__pyx_v_exc) {
PyObject *__pyx_v_msg = 0;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client._is_batch_too_large_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_msg);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
08912: cdef str msg
+08913: if not isinstance(exc, QuestDBError):
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8913, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_IsInstance(__pyx_v_exc, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8913, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (!__pyx_t_2); if (__pyx_t_3) { /* … */ }
+08914: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+08915: if exc.code == QuestDBErrorCode.BatchTooLarge:
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8915, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8915, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8915, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_3 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_1, __pyx_t_5, Py_EQ); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 8915, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_3) { /* … */ }
+08916: return True
{
__pyx_r = 1;
}
goto __pyx_L0;
08917: # Fallback for encoder-level "too large" errors that carry no dedicated
08918: # code (MAX_CHUNK_ROWS row-count overflow, an oversize single value).
+08919: msg = str(exc).lower()
__pyx_t_4 = __Pyx_PyObject_Unicode(__pyx_v_exc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8919, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __pyx_t_4; __Pyx_INCREF(__pyx_t_1); __pyx_t_6 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL}; __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_lower, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8919, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } if (!(likely(PyUnicode_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_5))) __PYX_ERR(0, 8919, __pyx_L1_error) __pyx_v_msg = ((PyObject*)__pyx_t_5); __pyx_t_5 = 0;
08920: return (
+08921: ('row_count' in msg and ('exceeds' in msg or 'too large' in msg))
__pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_mstate_global->__pyx_n_u_row_count, __pyx_v_msg, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8921, __pyx_L1_error) if (!__pyx_t_2) { goto __pyx_L6_next_or; } else { } __pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_mstate_global->__pyx_n_u_exceeds, __pyx_v_msg, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8921, __pyx_L1_error) if (!__pyx_t_2) { } else { __pyx_t_3 = __pyx_t_2; goto __pyx_L5_bool_binop_done; } __pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_mstate_global->__pyx_kp_u_too_large, __pyx_v_msg, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8921, __pyx_L1_error) if (!__pyx_t_2) { } else { __pyx_t_3 = __pyx_t_2; goto __pyx_L5_bool_binop_done; } __pyx_L6_next_or:;
+08922: or 'batch too large' in msg)
__pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_mstate_global->__pyx_kp_u_batch_too_large, __pyx_v_msg, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8922, __pyx_L1_error) __pyx_t_3 = __pyx_t_2; __pyx_L5_bool_binop_done:; { __pyx_r = __pyx_t_3; } goto __pyx_L0;
08923:
08924:
08925: # no_gc_clear keeps tp_clear from nulling fields the native dispatchers
08926: # still target. The callback targets are additionally pinned in
08927: # _LIVE_CALLBACK_REFS until the dispatchers are joined, so the cycle collector
08928: # cannot clear a live handler even when the handle is reached only through it.
+08929: @cython.no_gc_clear
struct __pyx_vtabstruct_7questdb_7_client_QuestDB {
struct questdb_db *(*_begin_db_use)(struct __pyx_obj_7questdb_7_client_QuestDB *, PyObject *, struct __pyx_opt_args_7questdb_7_client_7QuestDB__begin_db_use *__pyx_optional_args);
uintptr_t (*_scoped_call_depth)(struct __pyx_obj_7questdb_7_client_QuestDB *);
void (*_enter_scoped_call)(struct __pyx_obj_7questdb_7_client_QuestDB *);
void (*_exit_scoped_call)(struct __pyx_obj_7questdb_7_client_QuestDB *);
void (*_end_db_use)(struct __pyx_obj_7questdb_7_client_QuestDB *, struct __pyx_opt_args_7questdb_7_client_7QuestDB__end_db_use *__pyx_optional_args);
PyObject *(*close)(struct __pyx_obj_7questdb_7_client_QuestDB *, int __pyx_skip_dispatch, struct __pyx_opt_args_7questdb_7_client_7QuestDB_close *__pyx_optional_args);
};
static struct __pyx_vtabstruct_7questdb_7_client_QuestDB *__pyx_vtabptr_7questdb_7_client_QuestDB;
08930: cdef class QuestDB:
08931: """
08932: Handle to a QuestDB deployment over QWP/WebSocket.
08933:
08934: Owns the connection pool; lends row-building senders via
08935: :meth:`sender`, bulk-loads DataFrames via :meth:`dataframe`, runs
08936: queries via :meth:`query`, and lends reader leases via
08937: :meth:`reader`. Construct with :func:`questdb.connect`.
08938: Instances are safe to share across threads.
08939: """
08940: cdef questdb_db* _db
08941: cdef object _conf_str
08942: cdef object _state_cond
08943: cdef size_t _lease_uses
08944: cdef size_t _call_uses
08945: cdef bint _closing
08946: cdef bint _close_running
08947: cdef object _close_deadline
08948: cdef object _thread_owner_token
08949: cdef object _dispatch_context
08950: cdef object _connection_listener
08951: cdef object _error_handler
08952: cdef size_t _cb_refs_key
08953: cdef auto_flush_mode_t _auto_flush_mode
08954: cdef bint _auto_flush_bytes_dynamic
08955:
+08956: def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_7QuestDB_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_7QuestDB_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
#if !CYTHON_VECTORCALL_TPNEW
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
#if !CYTHON_VECTORCALL_TPNEW
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__pyx_args, __pyx_nargs);
if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL_TPNEW(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) return -1;
if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
__pyx_r = __pyx_pf_7questdb_7_client_7QuestDB___cinit__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_7QuestDB___cinit__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.QuestDB.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+08957: self._db = NULL
__pyx_v_self->_db = NULL;
+08958: self._conf_str = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_conf_str); __Pyx_DECREF(__pyx_v_self->_conf_str); __pyx_v_self->_conf_str = Py_None;
+08959: self._state_cond = threading.Condition(threading.RLock())
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8959, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Condition); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8959, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8959, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_RLock); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8959, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8959, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8959, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v_self->_state_cond); __Pyx_DECREF(__pyx_v_self->_state_cond); __pyx_v_self->_state_cond = __pyx_t_1; __pyx_t_1 = 0;
+08960: self._lease_uses = 0
__pyx_v_self->_lease_uses = 0;
+08961: self._call_uses = 0
__pyx_v_self->_call_uses = 0;
+08962: self._closing = False
__pyx_v_self->_closing = 0;
+08963: self._close_running = False
__pyx_v_self->_close_running = 0;
+08964: self._close_deadline = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_close_deadline); __Pyx_DECREF(__pyx_v_self->_close_deadline); __pyx_v_self->_close_deadline = Py_None;
08965: # This exact owner token indexes the handle's entry in the
08966: # per-OS-thread table of scoped call and callback-dispatch
08967: # depths. The table is shared by every handle, so a handle keeps
08968: # its own identity per thread without allocating an OS TLS key
08969: # of its own.
+08970: self._thread_owner_token = object()
__pyx_t_4 = NULL;
__pyx_t_8 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_object, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8970, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_GIVEREF(__pyx_t_1);
__Pyx_GOTREF(__pyx_v_self->_thread_owner_token);
__Pyx_DECREF(__pyx_v_self->_thread_owner_token);
__pyx_v_self->_thread_owner_token = __pyx_t_1;
__pyx_t_1 = 0;
+08971: self._dispatch_context = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_dispatch_context); __Pyx_DECREF(__pyx_v_self->_dispatch_context); __pyx_v_self->_dispatch_context = Py_None;
+08972: self._connection_listener = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_connection_listener); __Pyx_DECREF(__pyx_v_self->_connection_listener); __pyx_v_self->_connection_listener = Py_None;
+08973: self._error_handler = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_error_handler); __Pyx_DECREF(__pyx_v_self->_error_handler); __pyx_v_self->_error_handler = Py_None;
+08974: self._cb_refs_key = 0
__pyx_v_self->_cb_refs_key = 0;
+08975: self._auto_flush_mode.enabled = False
__pyx_v_self->_auto_flush_mode.enabled = 0;
+08976: self._auto_flush_mode.interval = -1
__pyx_v_self->_auto_flush_mode.interval = -1L;
+08977: self._auto_flush_mode.row_count = -1
__pyx_v_self->_auto_flush_mode.row_count = -1L;
+08978: self._auto_flush_mode.byte_count = -1
__pyx_v_self->_auto_flush_mode.byte_count = -1L;
+08979: self._auto_flush_bytes_dynamic = False
__pyx_v_self->_auto_flush_bytes_dynamic = 0;
08980:
+08981: cdef questdb_db* _begin_db_use(
static struct questdb_db *__pyx_f_7questdb_7_client_7QuestDB__begin_db_use(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, PyObject *__pyx_v_method, struct __pyx_opt_args_7questdb_7_client_7QuestDB__begin_db_use *__pyx_optional_args) {
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("questdb._client.QuestDB._begin_db_use", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
struct __pyx_opt_args_7questdb_7_client_7QuestDB__begin_db_use {
int __pyx_n;
int scoped;
};
+08982: self, str method, bint scoped=True) except? NULL:
int __pyx_v_scoped = ((int)1);
struct questdb_db *__pyx_v_db;
struct questdb_db *__pyx_r;
if (__pyx_optional_args) {
if (__pyx_optional_args->__pyx_n > 0) {
__pyx_v_scoped = __pyx_optional_args->scoped;
}
}
+08983: cdef questdb_db* db = NULL
__pyx_v_db = NULL;
+08984: self._state_cond.acquire()
__pyx_t_2 = __pyx_v_self->_state_cond; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8984, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+08985: try:
/*try:*/ {
+08986: db = self._db
__pyx_t_4 = __pyx_v_self->_db;
__pyx_v_db = __pyx_t_4;
+08987: if db == NULL:
__pyx_t_5 = (__pyx_v_db == NULL);
if (unlikely(__pyx_t_5)) {
/* … */
}
+08988: raise QuestDBError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8988, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_6);
+08989: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8989, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8989, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+08990: f"{method}() can't be called: QuestDB is closed.")
__pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8990, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_9 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_QuestDB_is_clos); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8990, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_3 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_3 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_8, __pyx_t_9}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8988, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 8988, __pyx_L4_error)
+08991: if self._closing:
if (unlikely(__pyx_v_self->_closing)) {
/* … */
}
08992: # Closing is one-way, so this refusal is permanent:
08993: # the handle never goes back to taking new work.
+08994: raise QuestDBError(
__pyx_t_6 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8994, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_9);
+08995: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8995, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8995, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+08996: f"{method}() can't be called: QuestDB is closing. "
__pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8996, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_8, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_QuestDB_is_clos_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8996, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_3 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_6); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_3 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_2, __pyx_t_7}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8994, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 8994, __pyx_L4_error)
08997: 'close() has been called, and the handle takes no '
08998: 'new work while calls in progress and outstanding '
08999: 'leases finish.')
09000: # A scoped use begins and ends inside one call on one
09001: # thread, so it can also be counted per thread and let
09002: # `close()` tell a caller waiting on other threads from one
09003: # waiting on itself. A lease is not scoped: it is handed
09004: # out here and may be returned from anywhere, so counting
09005: # it per thread would leave the borrower's count standing
09006: # and the returner's below zero. The two kinds are counted
09007: # apart because `close()` limits its wait for each
09008: # differently and says which it is waiting for: a call ends
09009: # when its work does, a lease only when its holder closes
09010: # it.
+09011: if scoped:
if (__pyx_v_scoped) {
/* … */
goto __pyx_L8;
}
+09012: self._enter_scoped_call()
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_enter_scoped_call(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9012, __pyx_L4_error)
09013: # The first scoped call on a thread allocates its call
09014: # table, and on CPython 3.10/3.11 and PyPy an allocation
09015: # can run a garbage-collection pass right here. A
09016: # finalizer it runs can close this handle on this
09017: # thread, since the lock is reentrant, and that close
09018: # sees no use yet and frees the pool. The pointer read
09019: # above is only good if the handle is still open now.
+09020: if self._db == NULL or self._closing:
__pyx_t_10 = (__pyx_v_self->_db == NULL);
if (!__pyx_t_10) {
} else {
__pyx_t_5 = __pyx_t_10;
goto __pyx_L10_bool_binop_done;
}
__pyx_t_5 = __pyx_v_self->_closing;
__pyx_L10_bool_binop_done:;
if (unlikely(__pyx_t_5)) {
/* … */
}
+09021: self._exit_scoped_call()
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_exit_scoped_call(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9021, __pyx_L4_error)
+09022: raise QuestDBError(
__pyx_t_9 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 9022, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_7);
+09023: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9023, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9023, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+09024: f"{method}() can't be called: QuestDB was "
__pyx_t_2 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9024, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_8 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_QuestDB_was_clo); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9024, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_3 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_9, __pyx_t_6, __pyx_t_8}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9022, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 9022, __pyx_L4_error)
09025: 'closed while the call was starting.')
+09026: self._call_uses += 1
__pyx_v_self->_call_uses = (__pyx_v_self->_call_uses + 1);
09027: else:
+09028: self._lease_uses += 1
/*else*/ {
__pyx_v_self->_lease_uses = (__pyx_v_self->_lease_uses + 1);
}
__pyx_L8:;
+09029: return db
{
__pyx_r = __pyx_v_db;
}
goto __pyx_L3_return;
}
09030: finally:
+09031: self._state_cond.release()
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
{
__pyx_t_7 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9031, __pyx_L13_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
}
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
goto __pyx_L1_error;
__pyx_L13_error:;
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_4 = __pyx_r;
__pyx_t_7 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9031, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_r = __pyx_t_4;
goto __pyx_L0;
}
}
09032:
+09033: cdef uintptr_t _scoped_call_depth(self) except? <uintptr_t>-1:
static uintptr_t __pyx_f_7questdb_7_client_7QuestDB__scoped_call_depth(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
uintptr_t __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.QuestDB._scoped_call_depth", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = ((uintptr_t)-1L);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
09034: """This handle's call depth on the current OS thread."""
+09035: return _scoped_depth_for(self._thread_owner_token)
__pyx_t_1 = __pyx_v_self->_thread_owner_token; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = __pyx_f_7questdb_7_client__scoped_depth_for(__pyx_t_1); if (unlikely(__pyx_t_2 == ((uintptr_t)((uintptr_t)-1L)) && PyErr_Occurred())) __PYX_ERR(0, 9035, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; { __pyx_r = __pyx_t_2; } goto __pyx_L0;
09036:
+09037: cdef void _enter_scoped_call(self) except *:
static void __pyx_f_7questdb_7_client_7QuestDB__enter_scoped_call(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.QuestDB._enter_scoped_call", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
09038: """Count a call that borrows nothing but runs on this handle.
09039:
09040: A lease's own methods are scoped in exactly the sense
09041: `_begin_db_use` means: the call begins and ends inside one frame
09042: on one thread. Counting them here is what lets `close()` tell a
09043: caller waiting on other threads from one waiting on the very
09044: frame that would release the lease it is waiting for.
09045:
09046: `_lease_uses` is deliberately untouched: the lease already
09047: holds one for its whole lifetime, and it may be released from a
09048: different thread than the one that borrowed it.
09049: """
+09050: _enter_scoped_for(self._thread_owner_token)
__pyx_t_1 = __pyx_v_self->_thread_owner_token; __Pyx_INCREF(__pyx_t_1); __pyx_f_7questdb_7_client__enter_scoped_for(__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9050, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
09051:
+09052: cdef void _exit_scoped_call(self) except *:
static void __pyx_f_7questdb_7_client_7QuestDB__exit_scoped_call(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.QuestDB._exit_scoped_call", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
+09053: _exit_scoped_for(self._thread_owner_token)
__pyx_t_1 = __pyx_v_self->_thread_owner_token; __Pyx_INCREF(__pyx_t_1); __pyx_f_7questdb_7_client__exit_scoped_for(__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9053, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
09054:
+09055: cdef void _end_db_use(self, bint scoped=True) except *:
static void __pyx_f_7questdb_7_client_7QuestDB__end_db_use(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, struct __pyx_opt_args_7questdb_7_client_7QuestDB__end_db_use *__pyx_optional_args) {
int __pyx_v_scoped = ((int)1);
if (__pyx_optional_args) {
if (__pyx_optional_args->__pyx_n > 0) {
__pyx_v_scoped = __pyx_optional_args->scoped;
}
}
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.QuestDB._end_db_use", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
/* … */
struct __pyx_opt_args_7questdb_7_client_7QuestDB__end_db_use {
int __pyx_n;
int scoped;
};
+09056: self._state_cond.acquire()
__pyx_t_2 = __pyx_v_self->_state_cond; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9056, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+09057: try:
/*try:*/ {
+09058: if scoped:
if (__pyx_v_scoped) {
/* … */
goto __pyx_L6;
}
+09059: if self._call_uses == 0:
__pyx_t_4 = (__pyx_v_self->_call_uses == 0);
if (unlikely(__pyx_t_4)) {
/* … */
}
+09060: raise RuntimeError(
__pyx_t_2 = NULL;
__pyx_t_3 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_QuestDB_call_use_counter_underfl};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9060, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 9060, __pyx_L4_error)
09061: 'QuestDB call-use counter underflow.')
09062: # The thread-local update below can raise. Unwind the shared
09063: # count first so a failed update cannot leave close() waiting
09064: # on a call that has already returned.
+09065: self._call_uses -= 1
__pyx_v_self->_call_uses = (__pyx_v_self->_call_uses - 1);
+09066: self._exit_scoped_call()
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_exit_scoped_call(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9066, __pyx_L4_error)
09067: else:
+09068: if self._lease_uses == 0:
/*else*/ {
__pyx_t_4 = (__pyx_v_self->_lease_uses == 0);
if (unlikely(__pyx_t_4)) {
/* … */
}
+09069: raise RuntimeError(
__pyx_t_2 = NULL;
__pyx_t_3 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_QuestDB_lease_counter_underflow};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9069, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 9069, __pyx_L4_error)
09070: 'QuestDB lease counter underflow.')
+09071: self._lease_uses -= 1
__pyx_v_self->_lease_uses = (__pyx_v_self->_lease_uses - 1);
}
__pyx_L6:;
+09072: if self._lease_uses + self._call_uses == 0:
__pyx_t_4 = ((__pyx_v_self->_lease_uses + __pyx_v_self->_call_uses) == 0);
if (__pyx_t_4) {
/* … */
}
}
+09073: self._state_cond.notify_all()
__pyx_t_2 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_notify_all, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9073, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
09074: finally:
+09075: self._state_cond.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_2 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9075, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L5;
}
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
if ( unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__pyx_t_5 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
{
__pyx_t_2 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9075, __pyx_L11_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
}
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
__pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
__pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7;
goto __pyx_L1_error;
__pyx_L11_error:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
goto __pyx_L1_error;
}
__pyx_L5:;
}
09076:
+09077: @staticmethod
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_3from_conf(CYTHON_UNUSED PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_7QuestDB_2from_conf, "\n Construct a handle from a QWP/WebSocket configuration string.\n\n Prefer the :func:`questdb.connect` module-level factory.\n\n By default the handle connects eagerly: construction pre-opens the\n warm minimums (``sender_pool_min`` sender and ``query_pool_min``\n reader connections, one of each by default), so an unreachable\n server or bad credentials fail here, fast. With\n ``lazy_connect=true`` construction opens no connection: sender\n leases buffer locally and connect in the background, readers\n connect on first use (``query_pool_min`` defaults to 0), and\n errors surface from the first operation instead. Combining\n ``lazy_connect=true`` with a blocking ``initial_connect_retry``\n or a positive ``query_pool_min`` is a configuration conflict.\n\n Pooled row auto-flush is enabled by default at 1,000 rows, 100\n milliseconds, or an estimated encoded size at 90% of the effective\n frame cap. Before a server cap is known, or when the server omits it,\n the byte threshold is 90% of the lower of QuestDB\047s default cap, 2 MiB\n less 14 bytes, and the local store-and-forward frame cap. Set\n ``auto_flush_bytes=off`` to disable only the byte trigger, or\n ``auto_flush=off`` to disable all automatic publishing.\n The mode is immutable and shared by every lease; the interval starts\n when the first row enters an empty lease buffer. Auto-triggered\n publishes do not wait for server acknowledgement.\n\n The underlying connection pool is opened by\n `questdb_db_connect_with_handlers`.\n Dataframe ingestion always uses the direct (non-store-and-forward)\n QWP/WebSocket column sender, independent of ``sf_dir``. On a transient\n connection failure the original DataFrame is re-sent only when no\n batch was successfully published and the failed operation is provably\n not del""ivered. Once a prefix may have committed, the call raises\n instead of replaying from row zero. A delivery-unknown failure surfaces\n as :class:`QuestDBError` with ``in_doubt`` set.\n ``request_timeout`` bounds each commit\047s no-progress ack wait;\n ``request_timeout=0`` disables that deadline, so a stalled but\n connected server can block :meth:`dataframe` indefinitely.\n\n ``connection_listener``, when set, is a callable receiving one\n :class:`ConnectionEvent` per connection-state transition of the\n pool\047s ingress connections (initial connect, per-endpoint attempt\n failures, failover, terminal auth rejection). It runs on a\n dedicated dispatcher thread fed by a bounded inbox\n (``connection_event_inbox_capacity``; ``0`` selects the default\n of 64) with a drop-oldest overflow policy, so a slow listener\n cannot stall ingest or reconnects. Exceptions it raises are\n logged and swallowed. Dropped/delivered totals are available via\n :attr:`connection_events_dropped` /\n :attr:`connection_events_delivered`. Successful events are queued\n only after negotiated state, including the server frame cap, is\n committed; they do not acknowledge data.\n\n ``error_handler``, when set, is a callable receiving one\n :class:`SenderError` per server rejection recorded by any of the\n pool\047s store-and-forward connections \342\200\224 including rejections for\n rows published through a :class:`PooledSender` that was already\n closed. It runs on its own dedicated dispatcher thread fed by a\n bounded inbox (``error_event_inbox_capacity``; ``0`` selects the\n default of 64, overflow drops the oldest event). Exceptions it\n raises are logged and swallowed. Without a handler every rejection\n is logged through the ``questdb`` logger instead \342\200\224 ``ERROR`` for\n terminal reject""ions, ``WARNING`` for retriable ones (the affected\n rows are replayed, not lost) \342\200\224 so rejections are never silent.\n A terminal rejection is queued only after the connection\047s terminal\n latch and pollable diagnostic have been committed.\n Delivered/dropped totals are available via\n :attr:`error_events_delivered` /\n :attr:`error_events_dropped`. Use the handler for\n dead-lettering, alerting, and metrics; terminal failures also\n surface as :class:`QuestDBError` from the sender calls themselves.\n\n When a handler or listener closes over the returned handle, call\n :meth:`close` explicitly (or use ``with``): until closed, such a\n handle is pinned alive rather than collected, so an abandoned one\n leaks instead of crashing. The pin is dropped at interpreter\n shutdown, so an unclosed self-referential handle can still crash\n during finalization.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_3from_conf = {"from_conf", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_3from_conf, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_2from_conf}; static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_3from_conf(CYTHON_UNUSED PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_conf_str = 0; PyObject *__pyx_v_connection_listener = 0; PyObject *__pyx_v_connection_event_inbox_capacity = 0; PyObject *__pyx_v_error_handler = 0; PyObject *__pyx_v_error_event_inbox_capacity = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("from_conf (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_conf_str,&__pyx_mstate_global->__pyx_n_u_connection_listener,&__pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity,&__pyx_mstate_global->__pyx_n_u_error_handler,&__pyx_mstate_global->__pyx_n_u_error_event_inbox_capacity,0}; PyObject* values[5] = {0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 9077, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 9077, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "from_conf", 0) < (0)) __PYX_ERR(0, 9077, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_2generator8(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ /* … */ static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_2from_conf(PyObject *__pyx_v_conf_str, PyObject *__pyx_v_connection_listener, PyObject *__pyx_v_connection_event_inbox_capacity, PyObject *__pyx_v_error_handler, PyObject *__pyx_v_error_event_inbox_capacity) { struct __pyx_obj_7questdb_7_client___pyx_scope_struct_12_from_conf *__pyx_cur_scope; struct line_sender_error *__pyx_v_err; struct line_sender_utf8 __pyx_v_c_conf; enum line_sender_protocol __pyx_v_c_protocol; PyObject *__pyx_v_protocol = 0; PyObject *__pyx_v_params = 0; int __pyx_v_auto_flush_configured; PyObject *__pyx_v_native_conf_str = 0; struct qdb_pystr_buf *__pyx_v_b; struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_db = 0; PyThreadState *__pyx_v_gs; void *__pyx_v_connection_listener_data; questdb_connection_event_cb __pyx_v_connection_event_cb; size_t __pyx_v_c_event_inbox_capacity; size_t __pyx_v_c_error_inbox_capacity; PyObject *__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_2generator8 = 0; PyObject *__pyx_r = NULL; __pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_12_from_conf *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_12_from_conf(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_12_from_conf, __pyx_mstate_global->__pyx_empty_tuple, NULL); if (unlikely(!__pyx_cur_scope)) { __pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_12_from_conf *)Py_None); __Pyx_INCREF(Py_None); __PYX_ERR(0, 9077, __pyx_L1_error) } else { __Pyx_GOTREF((PyObject *)__pyx_cur_scope); } __Pyx_INCREF(__pyx_v_error_handler); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("questdb._client.QuestDB.from_conf", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_protocol); __Pyx_XDECREF(__pyx_v_params); __Pyx_XDECREF(__pyx_v_native_conf_str); __Pyx_XDECREF((PyObject *)__pyx_v_db); __Pyx_XDECREF(__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_2generator8); __Pyx_XDECREF(__pyx_v_error_handler); __Pyx_DECREF((PyObject *)__pyx_cur_scope); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 9077, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); /* … */ __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_3from_conf, __Pyx_CYFUNCTION_STATICMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_from_conf, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[122])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 9077, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19); #endif __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_19, __pyx_t_20); __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_from_conf, __pyx_t_19) < (0)) __PYX_ERR(0, 9077, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __pyx_t_20 = NULL; __Pyx_GetNameInClass(__pyx_t_17, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_from_conf); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9077, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_20, __pyx_t_17}; __pyx_t_19 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_staticmethod, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 9077, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); } if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_from_conf, __pyx_t_19) < (0)) __PYX_ERR(0, 9077, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; /* … */ struct __pyx_obj_7questdb_7_client___pyx_scope_struct_12_from_conf { PyObject_HEAD PyObject *__pyx_v_auto_flush_keys; };
09078: def from_conf(
09079: str conf_str,
09080: *,
+09081: connection_listener=None,
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); /* … */ if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_connection_listener, Py_None) < (0)) __PYX_ERR(0, 9077, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 9077, __pyx_L1_error)
09082: connection_event_inbox_capacity=0,
+09083: error_handler=None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("from_conf", 1, 1, 1, i); __PYX_ERR(0, 9077, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 9077, __pyx_L3_error) /* … */ if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); } __pyx_v_conf_str = ((PyObject*)values[0]); __pyx_v_connection_listener = values[1]; __pyx_v_connection_event_inbox_capacity = values[2]; __pyx_v_error_handler = values[3]; __pyx_v_error_event_inbox_capacity = values[4]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("from_conf", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 9077, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.QuestDB.from_conf", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_conf_str), (&PyUnicode_Type), 1, "conf_str", 1))) __PYX_ERR(0, 9079, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_2from_conf(__pyx_v_conf_str, __pyx_v_connection_listener, __pyx_v_connection_event_inbox_capacity, __pyx_v_error_handler, __pyx_v_error_event_inbox_capacity); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_error_handler, Py_None) < (0)) __PYX_ERR(0, 9077, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_error_event_inbox_capacity, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 9077, __pyx_L1_error)
09084: error_event_inbox_capacity=0):
09085: """
09086: Construct a handle from a QWP/WebSocket configuration string.
09087:
09088: Prefer the :func:`questdb.connect` module-level factory.
09089:
09090: By default the handle connects eagerly: construction pre-opens the
09091: warm minimums (``sender_pool_min`` sender and ``query_pool_min``
09092: reader connections, one of each by default), so an unreachable
09093: server or bad credentials fail here, fast. With
09094: ``lazy_connect=true`` construction opens no connection: sender
09095: leases buffer locally and connect in the background, readers
09096: connect on first use (``query_pool_min`` defaults to 0), and
09097: errors surface from the first operation instead. Combining
09098: ``lazy_connect=true`` with a blocking ``initial_connect_retry``
09099: or a positive ``query_pool_min`` is a configuration conflict.
09100:
09101: Pooled row auto-flush is enabled by default at 1,000 rows, 100
09102: milliseconds, or an estimated encoded size at 90% of the effective
09103: frame cap. Before a server cap is known, or when the server omits it,
09104: the byte threshold is 90% of the lower of QuestDB's default cap, 2 MiB
09105: less 14 bytes, and the local store-and-forward frame cap. Set
09106: ``auto_flush_bytes=off`` to disable only the byte trigger, or
09107: ``auto_flush=off`` to disable all automatic publishing.
09108: The mode is immutable and shared by every lease; the interval starts
09109: when the first row enters an empty lease buffer. Auto-triggered
09110: publishes do not wait for server acknowledgement.
09111:
09112: The underlying connection pool is opened by
09113: `questdb_db_connect_with_handlers`.
09114: Dataframe ingestion always uses the direct (non-store-and-forward)
09115: QWP/WebSocket column sender, independent of ``sf_dir``. On a transient
09116: connection failure the original DataFrame is re-sent only when no
09117: batch was successfully published and the failed operation is provably
09118: not delivered. Once a prefix may have committed, the call raises
09119: instead of replaying from row zero. A delivery-unknown failure surfaces
09120: as :class:`QuestDBError` with ``in_doubt`` set.
09121: ``request_timeout`` bounds each commit's no-progress ack wait;
09122: ``request_timeout=0`` disables that deadline, so a stalled but
09123: connected server can block :meth:`dataframe` indefinitely.
09124:
09125: ``connection_listener``, when set, is a callable receiving one
09126: :class:`ConnectionEvent` per connection-state transition of the
09127: pool's ingress connections (initial connect, per-endpoint attempt
09128: failures, failover, terminal auth rejection). It runs on a
09129: dedicated dispatcher thread fed by a bounded inbox
09130: (``connection_event_inbox_capacity``; ``0`` selects the default
09131: of 64) with a drop-oldest overflow policy, so a slow listener
09132: cannot stall ingest or reconnects. Exceptions it raises are
09133: logged and swallowed. Dropped/delivered totals are available via
09134: :attr:`connection_events_dropped` /
09135: :attr:`connection_events_delivered`. Successful events are queued
09136: only after negotiated state, including the server frame cap, is
09137: committed; they do not acknowledge data.
09138:
09139: ``error_handler``, when set, is a callable receiving one
09140: :class:`SenderError` per server rejection recorded by any of the
09141: pool's store-and-forward connections — including rejections for
09142: rows published through a :class:`PooledSender` that was already
09143: closed. It runs on its own dedicated dispatcher thread fed by a
09144: bounded inbox (``error_event_inbox_capacity``; ``0`` selects the
09145: default of 64, overflow drops the oldest event). Exceptions it
09146: raises are logged and swallowed. Without a handler every rejection
09147: is logged through the ``questdb`` logger instead — ``ERROR`` for
09148: terminal rejections, ``WARNING`` for retriable ones (the affected
09149: rows are replayed, not lost) — so rejections are never silent.
09150: A terminal rejection is queued only after the connection's terminal
09151: latch and pollable diagnostic have been committed.
09152: Delivered/dropped totals are available via
09153: :attr:`error_events_delivered` /
09154: :attr:`error_events_dropped`. Use the handler for
09155: dead-lettering, alerting, and metrics; terminal failures also
09156: surface as :class:`QuestDBError` from the sender calls themselves.
09157:
09158: When a handler or listener closes over the returned handle, call
09159: :meth:`close` explicitly (or use ``with``): until closed, such a
09160: handle is pinned alive rather than collected, so an abandoned one
09161: leaks instead of crashing. The pin is dropped at interpreter
09162: shutdown, so an unclosed self-referential handle can still crash
09163: during finalization.
09164: """
+09165: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
09166: cdef line_sender_utf8 c_conf
09167: cdef line_sender_protocol c_protocol
09168: cdef object protocol
09169: cdef dict params
+09170: cdef set auto_flush_keys = {
__pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9171, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush) < (0)) __PYX_ERR(0, 9171, __pyx_L1_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_rows) < (0)) __PYX_ERR(0, 9171, __pyx_L1_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes) < (0)) __PYX_ERR(0, 9171, __pyx_L1_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_interval) < (0)) __PYX_ERR(0, 9171, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_1); __pyx_cur_scope->__pyx_v_auto_flush_keys = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
09171: 'auto_flush',
09172: 'auto_flush_rows',
09173: 'auto_flush_bytes',
09174: 'auto_flush_interval',
09175: }
09176: cdef bint auto_flush_configured
09177: cdef str native_conf_str
+09178: cdef qdb_pystr_buf* b = qdb_pystr_buf_new()
__pyx_v_b = qdb_pystr_buf_new();
+09179: cdef QuestDB db = QuestDB.__new__(QuestDB)
__pyx_t_1 = ((PyObject *)__pyx_tp_new_7questdb_7_client_QuestDB(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9179, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_db = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_1); __pyx_t_1 = 0;
+09180: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+09181: cdef void* connection_listener_data = NULL
__pyx_v_connection_listener_data = NULL;
+09182: cdef questdb_connection_event_cb connection_event_cb = NULL
__pyx_v_connection_event_cb = NULL;
09183: cdef size_t c_event_inbox_capacity
09184: cdef size_t c_error_inbox_capacity
+09185: try:
/*try:*/ {
+09186: protocol, params = parse_conf_str(b, conf_str)
__pyx_t_1 = __pyx_f_7questdb_7_client_parse_conf_str(__pyx_v_b, __pyx_v_conf_str); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9186, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 9186, __pyx_L4_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_3); } else { __pyx_t_2 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9186, __pyx_L4_error) __Pyx_XGOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9186, __pyx_L4_error) __Pyx_XGOTREF(__pyx_t_3); } #else __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9186, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9186, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9186, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < (0)) __PYX_ERR(0, 9186, __pyx_L4_error) __pyx_t_5 = NULL; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L7_unpacking_done; __pyx_L6_unpacking_failed:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 9186, __pyx_L4_error) __pyx_L7_unpacking_done:; } if (!(likely(PyDict_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_3))) __PYX_ERR(0, 9186, __pyx_L4_error) __pyx_v_protocol = __pyx_t_2; __pyx_t_2 = 0; __pyx_v_params = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
+09187: if protocol not in (Protocol.Ws, Protocol.Wss):
__Pyx_INCREF(__pyx_v_protocol); __pyx_t_1 = __pyx_v_protocol; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9187, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Ws); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9187, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_t_1, __pyx_t_2, Py_NE); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 9187, __pyx_L4_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_7) { } else { __pyx_t_6 = __pyx_t_7; goto __pyx_L9_bool_binop_done; } __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9187, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_Wss); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9187, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_7 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_t_1, __pyx_t_3, Py_NE); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 9187, __pyx_L4_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_6 = __pyx_t_7; __pyx_L9_bool_binop_done:; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_7 = __pyx_t_6; if (unlikely(__pyx_t_7)) { /* … */ }
+09188: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9188, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
+09189: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9189, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9189, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_8, __pyx_mstate_global->__pyx_kp_u_questdb_connect_requires_a_QWP_W}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9188, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 9188, __pyx_L4_error)
09190: 'questdb.connect() requires a QWP/WebSocket '
09191: 'configuration string: ws:: or wss::.')
+09192: if params.get('addr') is None:
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 9192, __pyx_L4_error)
}
__pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_addr, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9192, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_7 = (__pyx_t_1 == Py_None);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(__pyx_t_7)) {
/* … */
}
+09193: raise QuestDBError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9193, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_8);
+09194: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9194, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9194, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_8))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_8, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Missing_addr_parameter_in_config}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9193, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 9193, __pyx_L4_error)
09195: 'Missing "addr" parameter in config string')
09196:
09197: # The pooled native core does not implement row-buffer
09198: # auto-flushing: it rejects the threshold keys and accepts only
09199: # auto_flush=off. Keep this Python-owned handle configuration out
09200: # of the native connect string. Pooled QWP uses its own defaults,
09201: # while validation stays shared with the standalone Sender.
+09202: c_protocol = protocol.c_value
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_protocol, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9202, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_10 = ((enum line_sender_protocol)__Pyx_PyLong_As_enum__line_sender_protocol(__pyx_t_1)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9202, __pyx_L4_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_c_protocol = __pyx_t_10;
+09203: auto_flush_configured = not auto_flush_keys.isdisjoint(params)
__pyx_t_1 = __Pyx_CallUnboundCMethod1(&__pyx_mstate_global->__pyx_umethod_PySet_Type__isdisjoint, __pyx_cur_scope->__pyx_v_auto_flush_keys, __pyx_v_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9203, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(PyBool_Check(__pyx_t_1)) || __Pyx_RaiseUnexpectedTypeError("bool", __pyx_t_1))) __PYX_ERR(0, 9203, __pyx_L4_error) __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 9203, __pyx_L4_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_auto_flush_configured = (!__pyx_t_7);
+09204: _parse_pooled_auto_flush(
__pyx_t_11 = __pyx_f_7questdb_7_client__parse_pooled_auto_flush(__pyx_v_c_protocol, __pyx_t_1, __pyx_t_8, __pyx_t_4, __pyx_t_2, (&__pyx_v_db->_auto_flush_mode), (&__pyx_v_db->_auto_flush_bytes_dynamic)); if (unlikely(__pyx_t_11 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9204, __pyx_L4_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
09205: c_protocol,
+09206: params.get('auto_flush'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 9206, __pyx_L4_error)
}
__pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9206, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_1);
+09207: params.get('auto_flush_rows'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 9207, __pyx_L4_error)
}
__pyx_t_8 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, Py_None); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9207, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_8);
+09208: params.get('auto_flush_bytes'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 9208, __pyx_L4_error)
}
__pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9208, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_4);
+09209: params.get('auto_flush_interval'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 9209, __pyx_L4_error)
}
__pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush_interval, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9209, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
09210: &db._auto_flush_mode,
09211: &db._auto_flush_bytes_dynamic)
+09212: if auto_flush_configured:
if (__pyx_v_auto_flush_configured) {
/* … */
goto __pyx_L12;
}
+09213: native_conf_str = protocol.tag + '::' + ''.join(
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_protocol, __pyx_mstate_global->__pyx_n_u_tag); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9213, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyNumber_Add(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u__35); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9213, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* … */ __pyx_t_8 = __Pyx_Generator_GetInlinedResult(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9213, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__6, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9213, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = PyNumber_Add(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9213, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!(likely(PyUnicode_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_8))) __PYX_ERR(0, 9213, __pyx_L4_error) __pyx_v_native_conf_str = ((PyObject*)__pyx_t_8); __pyx_t_8 = 0;
+09214: f'{key}={conf_str_value(value)};'
static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_9from_conf_genexpr(PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_13_genexpr *__pyx_cur_scope;
PyObject *__pyx_r = NULL;
__pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_13_genexpr *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_13_genexpr(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_13_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
if (unlikely(!__pyx_cur_scope)) {
__pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_13_genexpr *)Py_None);
__Pyx_INCREF(Py_None);
__PYX_ERR(0, 9214, __pyx_L1_error)
} else {
__Pyx_GOTREF((PyObject *)__pyx_cur_scope);
}
__pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_12_from_conf *) __pyx_self;
__Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
__Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
__pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
__Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
{
__pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7questdb_7_client_7QuestDB_9from_conf_2generator8, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[8]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_from_conf_locals_genexpr, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(0, 9214, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
}
/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client.QuestDB.from_conf.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__Pyx_DECREF((PyObject *)__pyx_cur_scope);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_2generator8(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("genexpr", 0);
__pyx_L3_first_run:;
if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 9214, __pyx_L1_error)
__pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 9214, __pyx_L1_error)
__Pyx_GOTREF(__pyx_r);
/* … */
__pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_key, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9214, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_5 = __pyx_f_7questdb_7_client_conf_str_value(__pyx_cur_scope->__pyx_v_value); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 9214, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_9 = __Pyx_PyUnicode_Unicode(__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 9214, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_t_10[0] = __pyx_t_6;
__pyx_t_10[1] = __pyx_mstate_global->__pyx_kp_u__34;
__pyx_t_10[2] = __pyx_t_9;
__pyx_t_10[3] = __pyx_mstate_global->__pyx_kp_u__28;
__pyx_t_11 = 2;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10[0]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10[2]);
#endif
__pyx_t_7 = 0;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_7 |= __Pyx_PyUnicode_KIND_04(__pyx_t_10[0]) | __Pyx_PyUnicode_KIND_04(__pyx_t_10[2]);
#endif
__pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_10, 4, __pyx_t_11, __pyx_t_7);
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 9214, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_GIVEREF(__pyx_t_5);
if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_r, __pyx_t_5))) __PYX_ERR(0, 9214, __pyx_L1_error)
__pyx_t_5 = 0;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_r); __pyx_r = 0;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_9);
if (__Pyx_PyErr_Occurred()) {
__Pyx_Generator_Replace_StopIteration(0);
__Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
}
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
#if !CYTHON_USE_EXC_INFO_STACK
__Pyx_Coroutine_ResetAndClearException(__pyx_generator);
#endif
__pyx_generator->resume_label = -1;
__Pyx_Coroutine_clear((PyObject*)__pyx_generator);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_2 = __pyx_pf_7questdb_7_client_7QuestDB_9from_conf_genexpr(((PyObject*)__pyx_cur_scope), __pyx_v_params); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9214, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_13_genexpr {
PyObject_HEAD
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_12_from_conf *__pyx_outer_scope;
PyObject *__pyx_genexpr_arg_0;
PyObject *__pyx_v_key;
PyObject *__pyx_v_value;
};
+09215: for key, value in params.items()
__pyx_t_2 = 0;
if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 9215, __pyx_L1_error) }
if (unlikely(__pyx_cur_scope->__pyx_genexpr_arg_0 == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
__PYX_ERR(0, 9215, __pyx_L1_error)
}
__pyx_t_5 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_genexpr_arg_0, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 9215, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_1);
__pyx_t_1 = __pyx_t_5;
__pyx_t_5 = 0;
while (1) {
__pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, &__pyx_t_6, NULL, __pyx_t_4);
if (unlikely(__pyx_t_7 == 0)) break;
if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 9215, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_GOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_key);
__Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_key, __pyx_t_5);
__Pyx_GIVEREF(__pyx_t_5);
__pyx_t_5 = 0;
__Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_value);
__Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_value, __pyx_t_6);
__Pyx_GIVEREF(__pyx_t_6);
__pyx_t_6 = 0;
+09216: if key not in auto_flush_keys)
if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_auto_flush_keys)) { __Pyx_RaiseClosureNameError("auto_flush_keys"); __PYX_ERR(0, 9216, __pyx_L1_error) }
if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_auto_flush_keys == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
__PYX_ERR(0, 9216, __pyx_L1_error)
}
__pyx_t_8 = (__Pyx_PySet_ContainsTF(__pyx_cur_scope->__pyx_v_key, __pyx_cur_scope->__pyx_outer_scope->__pyx_v_auto_flush_keys, Py_NE)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 9216, __pyx_L1_error)
if (__pyx_t_8) {
/* … */
}
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
09217: else:
09218: # Preserve the native configuration path byte for byte when
09219: # there are no Python-owned auto-flush settings to remove.
+09220: native_conf_str = conf_str
/*else*/ {
__Pyx_INCREF(__pyx_v_conf_str);
__pyx_v_native_conf_str = __pyx_v_conf_str;
}
__pyx_L12:;
09221:
+09222: if connection_listener is not None and not callable(
__pyx_t_6 = (__pyx_v_connection_listener != Py_None);
if (__pyx_t_6) {
} else {
__pyx_t_7 = __pyx_t_6;
goto __pyx_L14_bool_binop_done;
}
/* … */
__pyx_t_6 = __Pyx_PyCallable_Check(__pyx_v_connection_listener); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 9222, __pyx_L4_error)
/* … */
__pyx_t_12 = (!__pyx_t_6);
__pyx_t_7 = __pyx_t_12;
__pyx_L14_bool_binop_done:;
if (unlikely(__pyx_t_7)) {
/* … */
}
09223: connection_listener):
+09224: raise TypeError(
__pyx_t_2 = NULL;
+09225: '"connection_listener" must be callable or None, '
__pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_connection_listener_must_be_cal, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9225, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9224, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 9224, __pyx_L4_error)
+09226: f'not {_fqn(type(connection_listener))}')
__pyx_t_4 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_connection_listener)))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9226, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9226, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+09227: if error_handler is not None and not callable(
__pyx_t_12 = (__pyx_v_error_handler != Py_None);
if (__pyx_t_12) {
} else {
__pyx_t_7 = __pyx_t_12;
goto __pyx_L17_bool_binop_done;
}
/* … */
__pyx_t_12 = __Pyx_PyCallable_Check(__pyx_v_error_handler); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 9227, __pyx_L4_error)
/* … */
__pyx_t_6 = (!__pyx_t_12);
__pyx_t_7 = __pyx_t_6;
__pyx_L17_bool_binop_done:;
if (unlikely(__pyx_t_7)) {
/* … */
}
09228: error_handler):
+09229: raise TypeError(
__pyx_t_4 = NULL;
+09230: '"error_handler" must be callable or None, '
__pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_error_handler_must_be_callable, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9230, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_9 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9229, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 9229, __pyx_L4_error)
+09231: f'not {_fqn(type(error_handler))}')
__pyx_t_2 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_error_handler)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9231, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9231, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+09232: str_to_utf8(b, <PyObject*>native_conf_str, &c_conf)
__pyx_t_11 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_native_conf_str), (&__pyx_v_c_conf)); if (unlikely(__pyx_t_11 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9232, __pyx_L4_error)
+09233: if connection_listener is not None:
__pyx_t_7 = (__pyx_v_connection_listener != Py_None);
if (__pyx_t_7) {
/* … */
}
09234: # Register as part of pool construction so recovery senders
09235: # pre-opened by connect cannot emit events before the listener
09236: # exists. The handle keeps the callback target alive until
09237: # close() has stopped and joined the dispatcher.
+09238: db._connection_listener = connection_listener
__Pyx_INCREF(__pyx_v_connection_listener); __Pyx_GIVEREF(__pyx_v_connection_listener); __Pyx_GOTREF(__pyx_v_db->_connection_listener); __Pyx_DECREF(__pyx_v_db->_connection_listener); __pyx_v_db->_connection_listener = __pyx_v_connection_listener;
+09239: connection_event_cb = _connection_event_trampoline
__pyx_v_connection_event_cb = __pyx_f_7questdb_7_client__connection_event_trampoline;
09240: # A rejection handler is always installed (defaulting to the
09241: # `questdb` logger) because the native default logs through the
09242: # Rust `log` facade, which is not bridged into Python logging.
+09243: if error_handler is None:
__pyx_t_7 = (__pyx_v_error_handler == Py_None);
if (__pyx_t_7) {
/* … */
}
+09244: error_handler = _default_error_handler
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_default_error_handler); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9244, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF_SET(__pyx_v_error_handler, __pyx_t_8); __pyx_t_8 = 0;
+09245: db._error_handler = error_handler
__Pyx_INCREF(__pyx_v_error_handler); __Pyx_GIVEREF(__pyx_v_error_handler); __Pyx_GOTREF(__pyx_v_db->_error_handler); __Pyx_DECREF(__pyx_v_db->_error_handler); __pyx_v_db->_error_handler = __pyx_v_error_handler;
+09246: db._dispatch_context = _new_dispatch_context(
__pyx_t_1 = ((PyObject *)__pyx_f_7questdb_7_client__new_dispatch_context(__pyx_t_8, __pyx_t_2, __pyx_t_4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9246, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v_db->_dispatch_context); __Pyx_DECREF(__pyx_v_db->_dispatch_context); __pyx_v_db->_dispatch_context = __pyx_t_1; __pyx_t_1 = 0;
+09247: db._thread_owner_token,
__pyx_t_8 = __pyx_v_db->_thread_owner_token;
__Pyx_INCREF(__pyx_t_8);
+09248: db._error_handler,
__pyx_t_2 = __pyx_v_db->_error_handler;
__Pyx_INCREF(__pyx_t_2);
+09249: db._connection_listener)
__pyx_t_4 = __pyx_v_db->_connection_listener;
__Pyx_INCREF(__pyx_t_4);
+09250: if connection_listener is not None:
__pyx_t_7 = (__pyx_v_connection_listener != Py_None);
if (__pyx_t_7) {
/* … */
}
+09251: connection_listener_data = <void*>db._dispatch_context
__pyx_v_connection_listener_data = ((void *)__pyx_v_db->_dispatch_context);
09252: # Convert to C integers while still holding the GIL: a bad
09253: # value must raise here, not inside the nogil region below.
+09254: c_event_inbox_capacity = connection_event_inbox_capacity
__pyx_t_9 = __Pyx_PyLong_As_size_t(__pyx_v_connection_event_inbox_capacity); if (unlikely((__pyx_t_9 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 9254, __pyx_L4_error) __pyx_v_c_event_inbox_capacity = __pyx_t_9;
+09255: c_error_inbox_capacity = error_event_inbox_capacity
__pyx_t_9 = __Pyx_PyLong_As_size_t(__pyx_v_error_event_inbox_capacity); if (unlikely((__pyx_t_9 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 9255, __pyx_L4_error) __pyx_v_c_error_inbox_capacity = __pyx_t_9;
+09256: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+09257: db._db = questdb_db_connect_with_handlers(
__pyx_v_db->_db = questdb_db_connect_with_handlers(__pyx_v_c_conf.buf, __pyx_v_c_conf.len, __pyx_v_connection_event_cb, __pyx_v_connection_listener_data, __pyx_v_c_event_inbox_capacity, __pyx_f_7questdb_7_client__sender_error_trampoline, ((void *)__pyx_v_db->_dispatch_context), __pyx_v_c_error_inbox_capacity, (&__pyx_v_err));
09258: c_conf.buf,
09259: c_conf.len,
09260: connection_event_cb,
09261: connection_listener_data,
09262: c_event_inbox_capacity,
09263: _sender_error_trampoline,
09264: <void*>db._dispatch_context,
09265: c_error_inbox_capacity,
09266: &err)
+09267: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+09268: if db._db == NULL:
__pyx_t_7 = (__pyx_v_db->_db == NULL);
if (unlikely(__pyx_t_7)) {
/* … */
}
09269: # A failed handler-aware connect fences its dispatchers before
09270: # returning, so the callback targets are now safe to release.
+09271: db._connection_listener = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_db->_connection_listener); __Pyx_DECREF(__pyx_v_db->_connection_listener); __pyx_v_db->_connection_listener = Py_None;
+09272: db._error_handler = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_db->_error_handler); __Pyx_DECREF(__pyx_v_db->_error_handler); __pyx_v_db->_error_handler = Py_None;
+09273: db._dispatch_context = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_db->_dispatch_context); __Pyx_DECREF(__pyx_v_db->_dispatch_context); __pyx_v_db->_dispatch_context = Py_None;
+09274: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9274, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 9274, __pyx_L4_error)
+09275: db._conf_str = conf_str
__Pyx_INCREF(__pyx_v_conf_str); __Pyx_GIVEREF(__pyx_v_conf_str); __Pyx_GOTREF(__pyx_v_db->_conf_str); __Pyx_DECREF(__pyx_v_db->_conf_str); __pyx_v_db->_conf_str = __pyx_v_conf_str;
+09276: db._cb_refs_key = _retain_callback_refs(
__pyx_t_9 = __pyx_f_7questdb_7_client__retain_callback_refs(((PyObject *)__pyx_v_db), __pyx_t_1); if (unlikely(__pyx_t_9 == ((size_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 9276, __pyx_L4_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_db->_cb_refs_key = __pyx_t_9;
+09277: db, db._dispatch_context)
__pyx_t_1 = __pyx_v_db->_dispatch_context;
__Pyx_INCREF(__pyx_t_1);
+09278: return db
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_db);
__pyx_r = ((PyObject *)__pyx_v_db);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L3_return;
}
09279: finally:
+09280: _ensure_has_gil(&gs)
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_ExceptionSwap(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
if ( unlikely(__Pyx_GetException(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18) < 0)) __Pyx_ErrFetch(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__Pyx_XGOTREF(__pyx_t_20);
__Pyx_XGOTREF(__pyx_t_21);
__pyx_t_13 = __pyx_lineno; __pyx_t_14 = __pyx_clineno; __pyx_t_15 = __pyx_filename;
{
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
/* … */
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+09281: qdb_pystr_buf_free(b)
qdb_pystr_buf_free(__pyx_v_b);
}
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_XGIVEREF(__pyx_t_21);
__Pyx_ExceptionReset(__pyx_t_19, __pyx_t_20, __pyx_t_21);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_ErrRestore(__pyx_t_16, __pyx_t_17, __pyx_t_18);
__pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0;
__pyx_lineno = __pyx_t_13; __pyx_clineno = __pyx_t_14; __pyx_filename = __pyx_t_15;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_21 = __pyx_r;
__pyx_r = 0;
/* … */
qdb_pystr_buf_free(__pyx_v_b);
__pyx_r = __pyx_t_21;
__pyx_t_21 = 0;
goto __pyx_L0;
}
}
09282:
+09283: def __enter__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_5__enter__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_5__enter__ = {"__enter__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_5__enter__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_5__enter__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
#if !CYTHON_VECTORCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__enter__ (wrapper)", 0);
#if !CYTHON_VECTORCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__enter__", 1, 0, 0, __pyx_nargs); return NULL; }
const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) return NULL;
if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__enter__", __pyx_kwds); return NULL;}
__pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_4__enter__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_4__enter__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.QuestDB.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_5__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB___enter, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[123])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 9283, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_19);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
#endif
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_enter, __pyx_t_19) < (0)) __PYX_ERR(0, 9283, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+09284: self._state_cond.acquire()
__pyx_t_2 = __pyx_v_self->_state_cond; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9284, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+09285: try:
/*try:*/ {
+09286: if self._db == NULL:
__pyx_t_4 = (__pyx_v_self->_db == NULL);
if (unlikely(__pyx_t_4)) {
/* … */
}
+09287: raise QuestDBError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 9287, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_5);
+09288: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9288, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 9288, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_3 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_3 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_enter___can_t_be_called_QuestD}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9287, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 9287, __pyx_L4_error)
09289: '__enter__() can\'t be called: QuestDB is closed.')
+09290: if self._closing:
if (unlikely(__pyx_v_self->_closing)) {
/* … */
}
}
+09291: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 9291, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_7);
+09292: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9292, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9292, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_3 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_enter___can_t_be_called_QuestD_2}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9291, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 9291, __pyx_L4_error)
09293: '__enter__() can\'t be called: QuestDB is closing. '
09294: 'close() has been called, and the handle takes no '
09295: 'new work while calls in progress and outstanding '
09296: 'leases finish.')
09297: finally:
+09298: self._state_cond.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_7 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9298, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L5;
}
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
if ( unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__pyx_t_8 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_10 = __pyx_filename;
{
__pyx_t_7 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_7);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9298, __pyx_L9_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
}
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_ExceptionReset(__pyx_t_14, __pyx_t_15, __pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ErrRestore(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
__pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_10;
goto __pyx_L1_error;
__pyx_L9_error:;
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_ExceptionReset(__pyx_t_14, __pyx_t_15, __pyx_t_16);
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
goto __pyx_L1_error;
}
__pyx_L5:;
}
+09299: return self
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_self);
__pyx_r = ((PyObject *)__pyx_v_self);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
09300:
+09301: def sender(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_7sender(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_7QuestDB_6sender, "\n Borrow a context-managed row-building sender from the pool.\n\n The lease counts as an active use of the handle until it is\n closed: :meth:`QuestDB.close` waits for outstanding leases for as\n long as its ``timeout`` allows (a minute by default -- see\n :meth:`close <QuestDB.close>`), and a lease keeps working while\n the handle drains -- apart from :meth:`PooledSender.dataframe`,\n which is new work on the handle and is refused once ``close()``\n has started.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_7sender = {"sender", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_7sender, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_6sender}; static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_7sender(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("sender (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("sender", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("sender", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_6sender(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_6sender(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) { struct questdb_db *__pyx_v_db; struct qwp_sender *__pyx_v_sender; struct line_sender_error *__pyx_v_err; struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer = 0; struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_lease = 0; PyThreadState *__pyx_v_gs; int __pyx_v_db_use; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("questdb._client.QuestDB.sender", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_buffer); __Pyx_XDECREF((PyObject *)__pyx_v_lease); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_7sender, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_sender, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[124])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 9301, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_sender, __pyx_t_19) < (0)) __PYX_ERR(0, 9301, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
09302: """
09303: Borrow a context-managed row-building sender from the pool.
09304:
09305: The lease counts as an active use of the handle until it is
09306: closed: :meth:`QuestDB.close` waits for outstanding leases for as
09307: long as its ``timeout`` allows (a minute by default -- see
09308: :meth:`close <QuestDB.close>`), and a lease keeps working while
09309: the handle drains -- apart from :meth:`PooledSender.dataframe`,
09310: which is new work on the handle and is refused once ``close()``
09311: has started.
09312: """
+09313: cdef questdb_db* db = NULL
__pyx_v_db = NULL;
+09314: cdef qwp_sender* sender = NULL
__pyx_v_sender = NULL;
+09315: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+09316: cdef Buffer buffer = None
__Pyx_INCREF(Py_None);
__pyx_v_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None);
+09317: cdef PooledSender lease = None
__Pyx_INCREF(Py_None);
__pyx_v_lease = ((struct __pyx_obj_7questdb_7_client_PooledSender *)Py_None);
+09318: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+09319: cdef bint db_use = False
__pyx_v_db_use = 0;
+09320: db = self._begin_db_use('sender', scoped=False)
__pyx_t_2.__pyx_n = 1; __pyx_t_2.scoped = 0; __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_sender, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 9320, __pyx_L1_error) __pyx_v_db = __pyx_t_1;
+09321: db_use = True
__pyx_v_db_use = 1;
+09322: try:
/*try:*/ {
+09323: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+09324: sender = questdb_db_borrow_sender(db, &err)
__pyx_v_sender = questdb_db_borrow_sender(__pyx_v_db, (&__pyx_v_err));
+09325: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+09326: if sender == NULL:
__pyx_t_3 = (__pyx_v_sender == NULL);
if (unlikely(__pyx_t_3)) {
/* … */
}
+09327: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9327, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 9327, __pyx_L4_error)
09328:
+09329: buffer = Buffer.__new__(Buffer)
__pyx_t_4 = ((PyObject *)__pyx_tp_new_7questdb_7_client_Buffer(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9329, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF_SET(__pyx_v_buffer, ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_4)); __pyx_t_4 = 0;
+09330: buffer._impl = questdb_db_new_buffer(db, &err)
__pyx_v_buffer->_impl = questdb_db_new_buffer(__pyx_v_db, (&__pyx_v_err));
+09331: if buffer._impl == NULL:
__pyx_t_3 = (__pyx_v_buffer->_impl == NULL);
if (unlikely(__pyx_t_3)) {
/* … */
}
+09332: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9332, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 9332, __pyx_L4_error)
+09333: buffer._b = qdb_pystr_buf_new()
__pyx_v_buffer->_b = qdb_pystr_buf_new();
+09334: buffer._init_buf_size = line_sender_buffer_capacity(buffer._impl)
__pyx_v_buffer->_init_buf_size = line_sender_buffer_capacity(__pyx_v_buffer->_impl);
+09335: buffer._max_name_len = questdb_db_buffer_max_name_len(db)
__pyx_v_buffer->_max_name_len = questdb_db_buffer_max_name_len(__pyx_v_db);
+09336: buffer._qwp = True
__pyx_v_buffer->_qwp = 1;
09337:
+09338: lease = PooledSender.__new__(PooledSender)
__pyx_t_4 = ((PyObject *)__pyx_tp_new_7questdb_7_client_PooledSender(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9338, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF_SET(__pyx_v_lease, ((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_t_4)); __pyx_t_4 = 0;
+09339: lease._attach(self, db, sender, buffer)
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_lease->__pyx_vtab)->_attach(__pyx_v_lease, __pyx_v_self, __pyx_v_db, __pyx_v_sender, __pyx_v_buffer);
+09340: sender = NULL
__pyx_v_sender = NULL;
+09341: db_use = False
__pyx_v_db_use = 0;
+09342: return lease
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_lease);
__pyx_r = ((PyObject *)__pyx_v_lease);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L3_return;
}
09343: finally:
+09344: _ensure_has_gil(&gs)
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
if ( unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__pyx_t_5 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
{
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
/* … */
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+09345: if sender != NULL:
__pyx_t_3 = (__pyx_v_sender != NULL);
if (__pyx_t_3) {
/* … */
}
/* … */
__pyx_t_3 = (__pyx_v_sender != NULL);
if (__pyx_t_3) {
/* … */
}
+09346: questdb_db_return_sender(db, sender)
questdb_db_return_sender(__pyx_v_db, __pyx_v_sender);
/* … */
questdb_db_return_sender(__pyx_v_db, __pyx_v_sender);
+09347: if db_use:
if (__pyx_v_db_use) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
__pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
__pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7;
goto __pyx_L1_error;
__pyx_L9_error:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_13 = __pyx_r;
__pyx_r = 0;
/* … */
if (__pyx_v_db_use) {
/* … */
}
__pyx_r = __pyx_t_13;
__pyx_t_13 = 0;
goto __pyx_L0;
}
}
+09348: self._end_db_use(scoped=False)
__pyx_t_14.__pyx_n = 1;
__pyx_t_14.scoped = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, &__pyx_t_14); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9348, __pyx_L9_error)
/* … */
__pyx_t_14.__pyx_n = 1;
__pyx_t_14.scoped = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, &__pyx_t_14); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9348, __pyx_L1_error)
09349:
+09350: def dataframe(
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_9dataframe(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_7QuestDB_8dataframe, "\n Ingest a dataframe through the pooled columnar QWP path.\n\n Ingestion always uses the direct (non-store-and-forward) column\n sender, independent of ``sf_dir``. On success, the call returns only\n after every DataFrame batch has been committed. The first successful\n batch on a fresh direct connection is already a commit boundary;\n subsequent batches are pipelined until the final commit. Large Arrow\n inputs add a checkpoint about every 100 batches to bound the\n uncommitted tail. The client may checkpoint earlier if deferred\n capacity fills or a batch must be split to fit.\n\n On a transient connection failure, the client re-sends the original,\n replayable DataFrame only when no batch was successfully published and\n the failed operation is not ``in_doubt``. Otherwise it raises rather\n than replaying from row zero. If a batch from this call may have\n committed, the raised error has ``in_doubt=True`` even when the final\n native write alone was provably not delivered. This includes local\n validation and Arrow stream errors after publication. Internal\n checkpoints do not reset the call\047s delivery status. The load did not\n finish, but any already committed prefix remains; an application-level\n retry of the whole DataFrame can duplicate it unless the destination\n table uses suitable ``DEDUP UPSERT KEYS``. A consumed one-shot stream\n may instead be non-replayable with ``in_doubt=False`` when no rows\n could have landed; that error asks for a fresh reader. Server-side\n rejections (e.g. a\n schema mismatch) surface as a plain\n :class:`QuestDBError`; the structured ``sender_error`` diagnostic\n is attached only by the store-and-forward senders.\n\n ``df`` accepts any of:\n\n - **pandas** ``pandas.DataFrame``. NumPy-backed columns route\n through the le""gacy planner; pyarrow-backed columns route\n through the Arrow C Stream capsule path below.\n - **polars** ``polars.DataFrame`` and ``polars.LazyFrame``\n (polars 1.32 or later). ``LazyFrame`` is materialised via\n ``.collect(engine=\047streaming\047)``.\n - **pyarrow** ``pa.Table``, ``pa.RecordBatch``, and\n ``pa.RecordBatchReader``.\n - Any object exposing the Arrow C Data Interface \342\200\224 i.e. with\n ``__arrow_c_stream__`` (duckdb / cudf / pyarrow-backed\n pandas 2.2+) or ``__arrow_c_array__`` (single Arrow array\n exporters, wrapped into a one-batch ``pa.Table``).\n\n ``at`` names the designated timestamp column (by name or index).\n Alternatively pass a fixed ``TimestampNanos`` / ``datetime``\n shared by every row (encoded as a repeated constant; resubmission\n stays idempotent under ``DEDUP UPSERT KEYS``), or the explicit\n :data:`ServerTimestamp` sentinel to let the server assign each\n row\047s timestamp on arrival \342\200\224 an opt-in mirroring the row API,\n since server-assigned timestamps defeat ``DEDUP UPSERT KEYS`` on\n resubmission.\n\n The columnar path loads one table per call: name it via\n ``table_name`` \342\200\224 or, for NumPy-backed pandas input, the\n dataframe\047s index name (``df.index.name``); Arrow-native input\n (polars, pyarrow, pyarrow-backed pandas) requires an explicit\n ``table_name``. ``table_name_col`` raises\n :class:`UnsupportedDataFrameShapeError` \342\200\224 split multi-table\n frames (e.g. ``df.groupby(col)``) and load each group.\n\n Supports a column-QWP v1 subset: a single per-call table name,\n non-null designated timestamp column, and the following\n per-column dtypes:\n\n - **Numeric**: NumPy ``bool/int{8,16,32,64}/uint{8..64}/float{32,64}``.\n Arrow ``pa.int{8,16,32,64}``, ``pa.float{16"",32,64}``, and\n ``pa.uint{8,16,32,64}`` are accepted by the Rust Arrow batch route\n when the frame uses a fixed table name and a designated timestamp\n column name. Unsigned Arrow values follow the\n Rust Arrow policy: ``UInt8`` and ``UInt16`` widen to ``INT``,\n ``UInt32`` to ``LONG``, and ``UInt64`` values up to\n ``i64::MAX`` are accepted as ``LONG``. Larger ``UInt64`` values are\n rejected because QuestDB QWP-WS encodes integers as signed ``i64``.\n Signed ``int8``/``int16`` land as QuestDB ``INT``; the row-oriented\n :meth:`Sender.dataframe` instead widens every integer to ``LONG``.\n Likewise ``float32`` lands here as ``FLOAT`` but is widened to\n ``DOUBLE`` by the row path \342\200\224 ingest a given table through a single\n path to avoid a first-write column-type mismatch.\n - **String / Symbol**: object-dtype ``str``, ``pa.string()``,\n ``pa.large_string()``, ``pd.CategoricalDtype`` of strings.\n - **Timestamp**: NumPy ``datetime64`` units accepted by pandas and\n ``pa.timestamp`` with unit ``s``, ``us``, or ``ns`` (tz-aware\n accepted on Arrow-backed columns in the Rust Arrow route). An\n Arrow ``ms`` timestamp field lands as DATE instead \342\200\224 see\n **DATE** below \342\200\224 while a NumPy ``datetime64[ms]`` field is\n widened to a microsecond TIMESTAMP unless a\n ``df.attrs[\047questdb\047]`` claim names it DATE.\n Timestamp *field* columns accept null timestamps (``NaT`` /\n ``None``) and values before the Unix epoch; a ``datetime64[ns]``\n field carrying ``NaT`` is re-exported through Arrow so its\n ``INT64_MIN`` null sentinel is preserved (this needs pyarrow).\n The *designated* timestamp column (``at=``) must be non-null\n and at or after the epoch.\n - **Decimal**: Arrow-backed ``pa.decimal{32,64,1""28,256}`` columns\n (``pa.decimal32``/``pa.decimal64`` require pyarrow >= 19), or\n object-dtype columns of ``decimal.Decimal`` (re-exported through\n Arrow; the decimal width and scale are inferred from the values).\n - **Array**: Arrow ``pa.list_`` / ``pa.large_list`` /\n ``pa.fixed_size_list`` columns with a ``float64`` leaf (nested for\n multi-dimensional), and object-dtype columns of ``float64``\n ``numpy.ndarray`` cells (any rank; requires pyarrow). Both land as\n QuestDB ``ARRAY(DOUBLE)``. Null rows are allowed; null *elements*\n inside an array are not.\n - **UUID**: object-dtype columns of ``uuid.UUID``, the\n ``arrow.uuid`` extension type over ``pa.fixed_size_binary(16)``,\n or any 16-byte binary column claimed with\n ``schema_overrides={\047col\047: \047uuid\047}``. Bytes are **canonical\n RFC 4122 big-endian** \342\200\224 exactly ``uuid.UUID.bytes`` \342\200\224 and the\n client byte-swaps them into QWP wire order. Round-trip through\n :meth:`query <questdb.QuestDB.query>` is byte-identity.\n\n The ``arrow.uuid`` route requires pyarrow >= 18, which is where\n that canonical extension type is registered, and the column\n must carry the extension **type** \342\200\224 build it from ``pa.uuid()``.\n Writing ``ARROW:extension:name`` as plain field metadata is not\n equivalent: pyarrow leaves such a key on the field, and a\n pandas ``ArrowDtype`` carries a type and no field, so a frame\n built that way holds a bare ``pa.fixed_size_binary(16)`` and\n is refused as unlabelled \342\200\224 see **Binary** below. Frames\n imported over the C data interface or Arrow IPC do get the\n extension type rebuilt from that key, which is why the same\n metadata can route two ways. The other two routes \342\200\224\n ``uuid.UUID``"" cells and ``schema_overrides`` \342\200\224 are free of both\n conditions, and a ``{\047kind\047: \047uuid\047}`` entry in\n ``df.attrs[\047questdb\047]`` claims an object-dtype column of\n 16-byte ``bytes``, the shape\n ``to_pandas(dtype_backend=\047numpy_nullable\047)`` returns. On\n pyarrow < 18, where no column can carry the label at all, a\n pandas frame\047s bare ``pa.fixed_size_binary(16)`` column is\n still refused rather than quietly landing as BINARY.\n - **LONG256**: 32-byte binary columns. Bytes are little-endian\n limbs, least-significant limb first, forwarded verbatim. Three\n routes claim the type, and they need different inputs.\n ``schema_overrides={\047col\047: \047long256\047}`` needs a fully\n Arrow-backed frame \342\200\224 every column an ArrowDtype, e.g.\n ``df.convert_dtypes(dtype_backend=\047pyarrow\047)``.\n ``questdb.column_type=long256`` *field* metadata needs a\n ``pa.Table`` or ``pa.RecordBatch`` handed straight to this\n method: field metadata lives on the field, a pandas\n ``ArrowDtype`` carries a type and no field, so a column that\n passed through pandas has already lost the claim. A\n ``{\047kind\047: \047long256\047}`` entry in ``df.attrs[\047questdb\047]`` claims\n an object-dtype column of Python ints or of 32-byte ``bytes``\n \342\200\224 the two shapes :meth:`QueryResult.to_pandas` hands a LONG256\n column back in, plain and ``dtype_backend=\047numpy_nullable\047``\n respectively. Ints are encoded as 32 unsigned little-endian\n bytes, so every non-null value must satisfy\n ``0 <= value < 2**256``; ``bytes`` cells go out verbatim and\n must be exactly 32 bytes. LONG256 has no Arrow extension type,\n so a ``pa.fixed_size_binary(32)`` column in a pandas frame\n claims nothing by itse""lf and is refused rather than sent as\n opaque bytes \342\200\224 see **Binary** below for why pandas frames\n refuse where native Arrow input writes BINARY.\n - **Binary**: object-dtype columns of ``bytes``, ``bytearray``, or\n C-contiguous one-byte-item ``memoryview`` cells land as BINARY,\n the same value types :func:`Buffer.row <questdb.ingress.Buffer.row>`\n accepts. Arrow ``pa.binary()``, ``pa.large_binary()``, and\n ``pa.fixed_size_binary(n)`` columns also land as BINARY, with\n the exception and the condition below.\n\n The exception is ``pa.fixed_size_binary(8)``, which both\n planners refuse with ``ArrowUnsupportedColumnKind``, labelled\n or not. polars exports its ``Object`` dtype in exactly that\n shape, as handles to objects in its own process rather than\n data, and once exported nothing else marks it. To store\n genuine 8-byte values as BINARY, make the column\n variable-length binary: ``pa.binary()``, ``pl.Binary``, or an\n object column of ``bytes``.\n\n The condition is on widths 16 and 32. A width on its own\n claims nothing: such a column is a UUID or a LONG256 only when\n something labels it \342\200\224 ``pa.uuid()``, ``questdb.column_type``\n field metadata of ``uuid`` or ``long256``, ``schema_overrides``,\n or a ``df.attrs[\047questdb\047]`` claim. Any other extension type,\n or any other ``questdb.column_type`` value, leaves the column\n unlabelled \342\200\224 except ``binary``, which, like\n ``schema_overrides={\047col\047: \047binary\047}``, labels it as plain bytes.\n What happens to an unlabelled\n one depends on where it comes from, not on which planner\n writes it. Native Arrow input \342\200\224 a ``pa.Table``,\n ``pa.RecordBatch``, ``pa.RecordBatchReader``, or any other\n ``__ar""row_c_stream__`` producer \342\200\224 keeps its field metadata, so\n an unlabelled column there is written as BINARY, and once the\n write is done the ``questdb`` logger records one WARNING per\n such column naming the remedies. A pandas frame refuses it with ``BadDataFrame``,\n fully Arrow-backed or not: an ``ArrowDtype`` carries a type and\n no field, so the column may be a UUID or LONG256 column whose\n label was dropped on the way into pandas, and guessing would\n auto-create a table with the wrong column type. The refusal\n does not depend on the pyarrow version \342\200\224 which remedies the\n message can name does, since ``pa.uuid()`` needs pyarrow 18,\n but which columns are accepted does not. To write either width\n as BINARY without the warning or the refusal, label it as\n plain bytes \342\200\224 ``schema_overrides={\047col\047: \047binary\047}``, or\n ``{\"questdb.column_type\": \"binary\"}`` field metadata on native\n Arrow input \342\200\224 which sends it as it is, with no copy. Making the\n column variable-length binary (``pa.binary()``,\n ``pd.ArrowDtype(pa.binary())``) or, in pandas, an object-dtype\n column of ``bytes`` works too, at the cost of a copy. Requires\n QuestDB 10 or newer.\n - **DATE**: Arrow ``pa.timestamp(\047ms\047)`` (tz-aware or naive),\n ``pa.date32()``, and ``pa.date64()`` columns land as DATE. The\n Arrow type is itself the claim, so there is no DATE cell type\n and no ``\047date\047`` kind for ``schema_overrides``. Such a column\n lands as DATE whether the frame is fully Arrow-backed or mixed\n with NumPy columns. What has no route of its own to DATE is\n the NumPy ``datetime64[ms]`` dtype, which widens to a\n microsecond TIMESTAMP, and its tz-aware ``datetime64[ms, tz]``\n form, which i""s rejected outright. A millisecond column named\n by ``at=`` becomes the table\047s designated TIMESTAMP, like any\n other ``at`` column. Round-tripping keeps the type: :meth:`query\n <questdb.QuestDB.query>` returns a DATE column as\n ``pa.timestamp(\047ms\047, \047UTC\047)``, which ``to_arrow()`` and\n ``to_pandas(dtype_backend=\047pyarrow\047)`` feed straight back as\n DATE. Plain ``to_pandas()`` gives a NumPy ``datetime64[ms]``\n column, and the ``df.attrs[\047questdb\047]`` claim it comes with\n names the column DATE, so this method puts the Arrow type back\n on before writing and that frame lands as DATE too.\n Row-at-a-time, DATE is written with :class:`DateMillis\n <questdb.DateMillis>` through :func:`Buffer.row\n <questdb.ingress.Buffer.row>`.\n\n Server-side coercion handles cross-type writes (e.g. ``pa.string()``\n UUIDs landing in a UUID column are parsed server-side; narrow ints\n landing in a wider column are widened). Failures surface as\n ``QuestDBError`` from the ``flush()``.\n\n ``schema_overrides`` reclassifies columns by name, mapping each to\n ``\047symbol\047``, ``\047ipv4\047``, ``\047char\047``, ``\047uuid\047``, ``\047long256\047``,\n ``\047binary\047``, or ``(\047geohash\047, bits)`` (e.g.\n ``{\047venue\047: \047symbol\047, \047src_ip\047: \047ipv4\047}``). Unknown column names are\n rejected. An override wins over any Arrow field metadata on its\n column, except ``\047binary\047``, which is refused on a column whose\n own type or field metadata labels it UUID or LONG256. ``\047uuid\047`` and ``\047long256\047`` apply to fixed-size and\n variable-length binary columns alike \342\200\224 the route polars frames take,\n since polars has no fixed-size binary dtype \342\200\224 and every non-null\n value must be exactly 16 or 32 bytes respec""tively. ``\047binary\047``\n applies to binary columns and says a 16- or 32-byte column holds\n plain bytes (see **Binary** above); it cannot override a\n ``pa.uuid()`` type or a ``uuid`` / ``long256`` field label, and\n is refused on such a column. It requires the\n Arrow columnar path (fully Arrow-backed input without\n ``table_name_col``; pandas input needs pandas 2.2 or later); on\n input that falls back to the NumPy planner\n it raises :class:`UnsupportedDataFrameShapeError`.\n\n A pandas frame that came out of :meth:`QueryResult.to_pandas`\n carries its source column types in ``df.attrs[\047questdb\047]``, and\n this method reads them back. That is what keeps UUID, LONG256,\n IPV4, CHAR, GEOHASH, and DATE columns their own type on a\n read-modify-write round trip: their claim lives in Arrow *field*\n metadata, which a pandas dtype \342\200\224 an Arrow type and no field \342\200\224\n cannot hold. The metadata recalls what the frame held when it was\n read, so a column since dropped, renamed, or retyped simply loses\n its claim, and ``symbols`` / ``schema_overrides`` outrank it.\n BYTE, SHORT, and INT columns still widen one step on the way back\n in; the Arrow ingest API has no override that pins them.\n\n The claim is honoured on every shape a ``to_pandas`` backend\n produces, so plain ``to_pandas()``,\n ``dtype_backend=\047pyarrow\047`` and ``dtype_backend=\047numpy_nullable\047``\n round-trip the same way. Besides the Arrow-backed and plain NumPy\n columns, that covers the object columns the other backends leave\n behind: Python ints, which is what a pandas masked column becomes\n and what plain ``to_pandas()`` returns a LONG256 as, and\n ``bytes``, which is how ``dtype_backend=\047numpy_nullable\047``\n returns UUID and LONG256. Frames saved from version 5.0, who""se\n plain ``to_pandas()`` returned a GEOHASH column as an unsigned\n integer, round-trip too: such a column is written as the signed\n integer of the same width, bit for bit. A frame whose columns\n were retyped past that set \342\200\224 which a custom ``types_mapper`` can\n do \342\200\224 keeps the claim in ``attrs`` and cannot use it: a claimed\n column that arrives as a float or a string dtype lands as that\n dtype implies, and the claim it could not use is reported as a\n warning-level record on the ``questdb`` logger. An object column\n states no width or range of its own, so a claimed value the type\n cannot hold \342\200\224 an integer past ``2**32-1`` under ``ipv4``, a cell\n that is not exactly 16 or 32 bytes under ``uuid`` or ``long256``\n \342\200\224 is refused rather than written into a column of the claimed\n type. GEOHASH is the deliberate exception, described next.\n\n Bulk GEOHASH values are raw bit patterns, whatever the column is\n stored as: NumPy, Arrow, or an object column of Python ints,\n which is also what a pandas masked column becomes. This is a\n deliberate contract, the same for every shape, so that whether a\n frame is written does not depend on whether a GEOHASH column\n holds a null; plain :meth:`QueryResult.to_pandas` returns a\n column that does as a masked column. The declared precision\n must be in ``1..=60`` and fit the signed integer carrier, but no\n per-value check verifies that the pattern has no bits set above\n that precision. For example, ``32`` under ``GEOHASH(5b)`` is\n accepted even though it needs six bits. If the declared precision\n is wrong for the data, the write can succeed and store a different\n GEOHASH location or ``NULL``. Only the low\n ``ceil(precision / 8)`` bytes are encoded, and the exact result of\n an incons""istent value is unspecified. This is a semantic\n data-integrity risk, not a memory-safety risk for otherwise valid\n NumPy/Arrow buffers. The caller must validate bulk values. The\n scalar :class:`Geohash <questdb.Geohash>` constructor remains\n strict; malformed custom Arrow C Data structures remain invalid\n input and are outside this guarantee.\n\n A column of nothing but nulls names no type of its own, and\n without a claim it is left out of the write and out of the\n table the write auto-creates. A claim names one, so a claimed\n all-null column is written as the claimed type \342\200\224 which is what\n keeps a batch that happens to hold no value for one column from\n deciding the shape of the table.\n\n The claim a query result carries reads as an ordinary mapping\n but cannot be edited in place, because every copy of the frame\n shares it; assign a new mapping to ``df.attrs[\047questdb\047]`` to\n change it. A plain hand-written ``dict`` is read here just the\n same, in this shape:\n\n .. code-block:: python\n\n df.attrs[\047questdb\047] = {\n \047version\047: 1,\n \047columns\047: {\n \047src_ip\047: {\047kind\047: \047ipv4\047},\n \047pos\047: {\047kind\047: \047geohash\047, \047precision_bits\047: 20},\n \047traded_on\047: {\047kind\047: \047date\047},\n },\n }\n\n ``version`` must be ``1`` when present, and a mapping without it\n reads as version 1. The claim\047s vocabulary can gain kinds, and a\n client applying a version it does not understand would write the\n wrong column type, which is the outcome the claim exists to\n prevent, so a mapping carrying any other version is not read and\n every column in it is ignored. A claim, or a column\047s entry in\n it, that ""is not read is reported through the ``questdb`` logger;\n the write goes ahead either way. ``kind`` is one of\n ``\047uuid\047``, ``\047long256\047``, ``\047ipv4\047``, ``\047char\047``, ``\047geohash\047``,\n or ``\047date\047`` \342\200\224 the types whose claim cannot always ride on a pandas\n dtype. ``precision_bits`` accompanies ``\047geohash\047`` alone. A\n ``\047date\047`` claim restores the DATE type after plain pandas has\n represented it as NumPy ``datetime64[ms]``. Naming a column that is\n not in the frame is not an error; the entry is skipped.\n\n A ``pa.Table`` or ``pa.RecordBatch`` from\n :meth:`QueryResult.to_arrow` or :meth:`QueryResult.iter_arrow`\n carries the same claims in Arrow field metadata, as a\n ``questdb.column_type`` key on every field, and this method\n passes that metadata to the native client unchanged. A field\n claim the field\047s Arrow type cannot carry \342\200\224 ``\047short\047`` on\n ``pa.int32()``, ``\047ipv4\047`` on ``pa.int64()`` \342\200\224 makes this method\n raise :class:`QuestDBError <questdb.QuestDBError>`, with ``code``\n set to ``QuestDBErrorCode.ArrowIngest``, before anything is sent.\n This stricter rule is deliberate. Field metadata is the input\n contract of the native Arrow ingest, which refuses such a field\n in every language that uses it. A field claim also goes stale\n only when the old field is carried onto a new type: ``Table.cast``\n with a schema built from ``field.with_type(...)``, or\n ``pa.concat_tables(..., promote_options=\047permissive\047)`` with the\n claimed table first. Casting to a schema built from scratch,\n ``set_column`` by name, and a polars or pandas round trip all\n build fields without the key. ``df.attrs`` belongs to the whole\n frame and survives ``astype`` and arithmetic, so a stale claim\n th""ere is the normal case and is logged instead. To write a\n retyped column, drop its metadata:\n\n .. code-block:: python\n\n i = table.schema.get_field_index(\047col\047)\n table = table.cast(table.schema.set(\n i, table.schema.field(i).remove_metadata()))\n\n ``max_rows_per_batch`` sets the pipelining granularity, not a\n safety limit: any batch exceeding the negotiated per-batch byte\n cap is split regardless of it, and a single row is never bounded\n by it. Each batch is one unit of client memory and server-side\n apply. The first successful batch on a fresh connection is a commit\n boundary. Sliceable Arrow inputs add another checkpoint about every\n 100 batches, so ``max_rows_per_batch * 100`` rows approximates the\n maximum periodic uncommitted tail, not a whole-source replay window.\n The NumPy planner pipelines the remaining batches until its final\n commit. Either path may checkpoint earlier when deferred capacity\n fills. Raise ``max_rows_per_batch`` for narrow numeric\n rows; lower it for very wide rows or tight memory. Streaming Arrow\n input (``pa.RecordBatchReader``) is not re-batched \342\200\224 the producer\047s\n batch size governs its checkpoint window.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_9dataframe = {"dataframe", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_9dataframe, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_8dataframe}; static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_9dataframe(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_df = 0; PyObject *__pyx_v_table_name = 0; PyObject *__pyx_v_table_name_col = 0; PyObject *__pyx_v_symbols = 0; PyObject *__pyx_v_at = 0; PyObject *__pyx_v_max_rows_per_batch = 0; PyObject *__pyx_v_schema_overrides = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("dataframe (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_df_2,&__pyx_mstate_global->__pyx_n_u_at,&__pyx_mstate_global->__pyx_n_u_table_name,&__pyx_mstate_global->__pyx_n_u_table_name_col,&__pyx_mstate_global->__pyx_n_u_symbols,&__pyx_mstate_global->__pyx_n_u_max_rows_per_batch,&__pyx_mstate_global->__pyx_n_u_schema_overrides_2,0}; PyObject* values[7] = {0,0,0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 9350, __pyx_L3_error) if (likely(__pyx_kwds_len > 0)) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 9350, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "dataframe", 0) < (0)) __PYX_ERR(0, 9350, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_8dataframe(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at, PyObject *__pyx_v_max_rows_per_batch, PyObject *__pyx_v_schema_overrides) { struct qdb_pystr_buf *__pyx_v_b; struct __pyx_t_7questdb_7_client_dataframe_plan_t __pyx_v_plan; struct questdb_db *__pyx_v_db; int __pyx_v_db_use; struct __pyx_t_7questdb_7_client_direct_conn_source_t __pyx_v_src; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_AddTraceback("questdb._client.QuestDB.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_19 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 9350, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); /* … */ __pyx_t_17 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9350, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_table_name_col, __pyx_mstate_global->__pyx_kp_u_Union_None_int_str) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Union_str_bool_List_int_List_str) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_int_st) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_object) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error) __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_9dataframe, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_dataframe, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[125])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 9350, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20); #endif __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_20, __pyx_t_19); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_20, __pyx_t_17); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_dataframe, __pyx_t_20) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
09351: self,
09352: df,
09353: *,
+09354: table_name: Optional[str] = None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error)
+09355: table_name_col: Union[None, int, str] = None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_n_u_auto)); if (!values[5]) values[5] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__36); /* … */ if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_table_name_col, Py_None) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_n_u_auto) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error)
09356: symbols: Union[str, bool, List[int], List[str]] = 'auto',
09357: at: Union[ServerTimestampType, int, str, TimestampNanos, datetime.datetime],
+09358: max_rows_per_batch: int = DEFAULT_MAX_CHUNK_ROWS,
__Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 9358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_PyInt_FromNumber(&__pyx_t_19, NULL, 1) < (0)) __PYX_ERR(0, 9358, __pyx_L1_error) __pyx_mstate_global->__pyx_k__36 = ((PyObject*)__pyx_t_19); __Pyx_GIVEREF(__pyx_t_19); __pyx_t_19 = 0; /* … */ __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); if (__Pyx_PyInt_FromNumber(&__pyx_t_17, NULL, 1) < (0)) __PYX_ERR(0, 9358, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_t_17) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+09359: schema_overrides: Optional[Dict[str, object]] = None):
if (!values[6]) values[6] = __Pyx_NewRef(((PyObject*)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, i); __PYX_ERR(0, 9350, __pyx_L3_error) } } for (Py_ssize_t i = 1; i < 2; i++) { if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("dataframe", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 9350, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { __Pyx_RaiseKeywordRequired("dataframe", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 9350, __pyx_L3_error) } __pyx_v_df = values[0]; __pyx_v_at = values[1]; __pyx_v_table_name = ((PyObject*)values[2]); __pyx_v_table_name_col = values[3]; __pyx_v_symbols = values[4]; if (__Pyx_PyInt_FromNumber(&values[5], "max_rows_per_batch", 0) < (0)) __PYX_ERR(0, 9358, __pyx_L3_error) __pyx_v_max_rows_per_batch = ((PyObject*)values[5]); __pyx_v_schema_overrides = ((PyObject*)values[6]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 9350, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.QuestDB.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 1, "table_name", 2))) __PYX_ERR(0, 9354, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_max_rows_per_batch), (&PyLong_Type), 0, "max_rows_per_batch", 2))) __PYX_ERR(0, 9358, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema_overrides), (&PyDict_Type), 1, "schema_overrides", 2))) __PYX_ERR(0, 9359, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_8dataframe(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self), __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_v_max_rows_per_batch, __pyx_v_schema_overrides); /* … */ if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, Py_None) < (0)) __PYX_ERR(0, 9350, __pyx_L1_error)
09360: """
09361: Ingest a dataframe through the pooled columnar QWP path.
09362:
09363: Ingestion always uses the direct (non-store-and-forward) column
09364: sender, independent of ``sf_dir``. On success, the call returns only
09365: after every DataFrame batch has been committed. The first successful
09366: batch on a fresh direct connection is already a commit boundary;
09367: subsequent batches are pipelined until the final commit. Large Arrow
09368: inputs add a checkpoint about every 100 batches to bound the
09369: uncommitted tail. The client may checkpoint earlier if deferred
09370: capacity fills or a batch must be split to fit.
09371:
09372: On a transient connection failure, the client re-sends the original,
09373: replayable DataFrame only when no batch was successfully published and
09374: the failed operation is not ``in_doubt``. Otherwise it raises rather
09375: than replaying from row zero. If a batch from this call may have
09376: committed, the raised error has ``in_doubt=True`` even when the final
09377: native write alone was provably not delivered. This includes local
09378: validation and Arrow stream errors after publication. Internal
09379: checkpoints do not reset the call's delivery status. The load did not
09380: finish, but any already committed prefix remains; an application-level
09381: retry of the whole DataFrame can duplicate it unless the destination
09382: table uses suitable ``DEDUP UPSERT KEYS``. A consumed one-shot stream
09383: may instead be non-replayable with ``in_doubt=False`` when no rows
09384: could have landed; that error asks for a fresh reader. Server-side
09385: rejections (e.g. a
09386: schema mismatch) surface as a plain
09387: :class:`QuestDBError`; the structured ``sender_error`` diagnostic
09388: is attached only by the store-and-forward senders.
09389:
09390: ``df`` accepts any of:
09391:
09392: - **pandas** ``pandas.DataFrame``. NumPy-backed columns route
09393: through the legacy planner; pyarrow-backed columns route
09394: through the Arrow C Stream capsule path below.
09395: - **polars** ``polars.DataFrame`` and ``polars.LazyFrame``
09396: (polars 1.32 or later). ``LazyFrame`` is materialised via
09397: ``.collect(engine='streaming')``.
09398: - **pyarrow** ``pa.Table``, ``pa.RecordBatch``, and
09399: ``pa.RecordBatchReader``.
09400: - Any object exposing the Arrow C Data Interface — i.e. with
09401: ``__arrow_c_stream__`` (duckdb / cudf / pyarrow-backed
09402: pandas 2.2+) or ``__arrow_c_array__`` (single Arrow array
09403: exporters, wrapped into a one-batch ``pa.Table``).
09404:
09405: ``at`` names the designated timestamp column (by name or index).
09406: Alternatively pass a fixed ``TimestampNanos`` / ``datetime``
09407: shared by every row (encoded as a repeated constant; resubmission
09408: stays idempotent under ``DEDUP UPSERT KEYS``), or the explicit
09409: :data:`ServerTimestamp` sentinel to let the server assign each
09410: row's timestamp on arrival — an opt-in mirroring the row API,
09411: since server-assigned timestamps defeat ``DEDUP UPSERT KEYS`` on
09412: resubmission.
09413:
09414: The columnar path loads one table per call: name it via
09415: ``table_name`` — or, for NumPy-backed pandas input, the
09416: dataframe's index name (``df.index.name``); Arrow-native input
09417: (polars, pyarrow, pyarrow-backed pandas) requires an explicit
09418: ``table_name``. ``table_name_col`` raises
09419: :class:`UnsupportedDataFrameShapeError` — split multi-table
09420: frames (e.g. ``df.groupby(col)``) and load each group.
09421:
09422: Supports a column-QWP v1 subset: a single per-call table name,
09423: non-null designated timestamp column, and the following
09424: per-column dtypes:
09425:
09426: - **Numeric**: NumPy ``bool/int{8,16,32,64}/uint{8..64}/float{32,64}``.
09427: Arrow ``pa.int{8,16,32,64}``, ``pa.float{16,32,64}``, and
09428: ``pa.uint{8,16,32,64}`` are accepted by the Rust Arrow batch route
09429: when the frame uses a fixed table name and a designated timestamp
09430: column name. Unsigned Arrow values follow the
09431: Rust Arrow policy: ``UInt8`` and ``UInt16`` widen to ``INT``,
09432: ``UInt32`` to ``LONG``, and ``UInt64`` values up to
09433: ``i64::MAX`` are accepted as ``LONG``. Larger ``UInt64`` values are
09434: rejected because QuestDB QWP-WS encodes integers as signed ``i64``.
09435: Signed ``int8``/``int16`` land as QuestDB ``INT``; the row-oriented
09436: :meth:`Sender.dataframe` instead widens every integer to ``LONG``.
09437: Likewise ``float32`` lands here as ``FLOAT`` but is widened to
09438: ``DOUBLE`` by the row path — ingest a given table through a single
09439: path to avoid a first-write column-type mismatch.
09440: - **String / Symbol**: object-dtype ``str``, ``pa.string()``,
09441: ``pa.large_string()``, ``pd.CategoricalDtype`` of strings.
09442: - **Timestamp**: NumPy ``datetime64`` units accepted by pandas and
09443: ``pa.timestamp`` with unit ``s``, ``us``, or ``ns`` (tz-aware
09444: accepted on Arrow-backed columns in the Rust Arrow route). An
09445: Arrow ``ms`` timestamp field lands as DATE instead — see
09446: **DATE** below — while a NumPy ``datetime64[ms]`` field is
09447: widened to a microsecond TIMESTAMP unless a
09448: ``df.attrs['questdb']`` claim names it DATE.
09449: Timestamp *field* columns accept null timestamps (``NaT`` /
09450: ``None``) and values before the Unix epoch; a ``datetime64[ns]``
09451: field carrying ``NaT`` is re-exported through Arrow so its
09452: ``INT64_MIN`` null sentinel is preserved (this needs pyarrow).
09453: The *designated* timestamp column (``at=``) must be non-null
09454: and at or after the epoch.
09455: - **Decimal**: Arrow-backed ``pa.decimal{32,64,128,256}`` columns
09456: (``pa.decimal32``/``pa.decimal64`` require pyarrow >= 19), or
09457: object-dtype columns of ``decimal.Decimal`` (re-exported through
09458: Arrow; the decimal width and scale are inferred from the values).
09459: - **Array**: Arrow ``pa.list_`` / ``pa.large_list`` /
09460: ``pa.fixed_size_list`` columns with a ``float64`` leaf (nested for
09461: multi-dimensional), and object-dtype columns of ``float64``
09462: ``numpy.ndarray`` cells (any rank; requires pyarrow). Both land as
09463: QuestDB ``ARRAY(DOUBLE)``. Null rows are allowed; null *elements*
09464: inside an array are not.
09465: - **UUID**: object-dtype columns of ``uuid.UUID``, the
09466: ``arrow.uuid`` extension type over ``pa.fixed_size_binary(16)``,
09467: or any 16-byte binary column claimed with
09468: ``schema_overrides={'col': 'uuid'}``. Bytes are **canonical
09469: RFC 4122 big-endian** — exactly ``uuid.UUID.bytes`` — and the
09470: client byte-swaps them into QWP wire order. Round-trip through
09471: :meth:`query <questdb.QuestDB.query>` is byte-identity.
09472:
09473: The ``arrow.uuid`` route requires pyarrow >= 18, which is where
09474: that canonical extension type is registered, and the column
09475: must carry the extension **type** — build it from ``pa.uuid()``.
09476: Writing ``ARROW:extension:name`` as plain field metadata is not
09477: equivalent: pyarrow leaves such a key on the field, and a
09478: pandas ``ArrowDtype`` carries a type and no field, so a frame
09479: built that way holds a bare ``pa.fixed_size_binary(16)`` and
09480: is refused as unlabelled — see **Binary** below. Frames
09481: imported over the C data interface or Arrow IPC do get the
09482: extension type rebuilt from that key, which is why the same
09483: metadata can route two ways. The other two routes —
09484: ``uuid.UUID`` cells and ``schema_overrides`` — are free of both
09485: conditions, and a ``{'kind': 'uuid'}`` entry in
09486: ``df.attrs['questdb']`` claims an object-dtype column of
09487: 16-byte ``bytes``, the shape
09488: ``to_pandas(dtype_backend='numpy_nullable')`` returns. On
09489: pyarrow < 18, where no column can carry the label at all, a
09490: pandas frame's bare ``pa.fixed_size_binary(16)`` column is
09491: still refused rather than quietly landing as BINARY.
09492: - **LONG256**: 32-byte binary columns. Bytes are little-endian
09493: limbs, least-significant limb first, forwarded verbatim. Three
09494: routes claim the type, and they need different inputs.
09495: ``schema_overrides={'col': 'long256'}`` needs a fully
09496: Arrow-backed frame — every column an ArrowDtype, e.g.
09497: ``df.convert_dtypes(dtype_backend='pyarrow')``.
09498: ``questdb.column_type=long256`` *field* metadata needs a
09499: ``pa.Table`` or ``pa.RecordBatch`` handed straight to this
09500: method: field metadata lives on the field, a pandas
09501: ``ArrowDtype`` carries a type and no field, so a column that
09502: passed through pandas has already lost the claim. A
09503: ``{'kind': 'long256'}`` entry in ``df.attrs['questdb']`` claims
09504: an object-dtype column of Python ints or of 32-byte ``bytes``
09505: — the two shapes :meth:`QueryResult.to_pandas` hands a LONG256
09506: column back in, plain and ``dtype_backend='numpy_nullable'``
09507: respectively. Ints are encoded as 32 unsigned little-endian
09508: bytes, so every non-null value must satisfy
09509: ``0 <= value < 2**256``; ``bytes`` cells go out verbatim and
09510: must be exactly 32 bytes. LONG256 has no Arrow extension type,
09511: so a ``pa.fixed_size_binary(32)`` column in a pandas frame
09512: claims nothing by itself and is refused rather than sent as
09513: opaque bytes — see **Binary** below for why pandas frames
09514: refuse where native Arrow input writes BINARY.
09515: - **Binary**: object-dtype columns of ``bytes``, ``bytearray``, or
09516: C-contiguous one-byte-item ``memoryview`` cells land as BINARY,
09517: the same value types :func:`Buffer.row <questdb.ingress.Buffer.row>`
09518: accepts. Arrow ``pa.binary()``, ``pa.large_binary()``, and
09519: ``pa.fixed_size_binary(n)`` columns also land as BINARY, with
09520: the exception and the condition below.
09521:
09522: The exception is ``pa.fixed_size_binary(8)``, which both
09523: planners refuse with ``ArrowUnsupportedColumnKind``, labelled
09524: or not. polars exports its ``Object`` dtype in exactly that
09525: shape, as handles to objects in its own process rather than
09526: data, and once exported nothing else marks it. To store
09527: genuine 8-byte values as BINARY, make the column
09528: variable-length binary: ``pa.binary()``, ``pl.Binary``, or an
09529: object column of ``bytes``.
09530:
09531: The condition is on widths 16 and 32. A width on its own
09532: claims nothing: such a column is a UUID or a LONG256 only when
09533: something labels it — ``pa.uuid()``, ``questdb.column_type``
09534: field metadata of ``uuid`` or ``long256``, ``schema_overrides``,
09535: or a ``df.attrs['questdb']`` claim. Any other extension type,
09536: or any other ``questdb.column_type`` value, leaves the column
09537: unlabelled — except ``binary``, which, like
09538: ``schema_overrides={'col': 'binary'}``, labels it as plain bytes.
09539: What happens to an unlabelled
09540: one depends on where it comes from, not on which planner
09541: writes it. Native Arrow input — a ``pa.Table``,
09542: ``pa.RecordBatch``, ``pa.RecordBatchReader``, or any other
09543: ``__arrow_c_stream__`` producer — keeps its field metadata, so
09544: an unlabelled column there is written as BINARY, and once the
09545: write is done the ``questdb`` logger records one WARNING per
09546: such column naming the remedies. A pandas frame refuses it with ``BadDataFrame``,
09547: fully Arrow-backed or not: an ``ArrowDtype`` carries a type and
09548: no field, so the column may be a UUID or LONG256 column whose
09549: label was dropped on the way into pandas, and guessing would
09550: auto-create a table with the wrong column type. The refusal
09551: does not depend on the pyarrow version — which remedies the
09552: message can name does, since ``pa.uuid()`` needs pyarrow 18,
09553: but which columns are accepted does not. To write either width
09554: as BINARY without the warning or the refusal, label it as
09555: plain bytes — ``schema_overrides={'col': 'binary'}``, or
09556: ``{"questdb.column_type": "binary"}`` field metadata on native
09557: Arrow input — which sends it as it is, with no copy. Making the
09558: column variable-length binary (``pa.binary()``,
09559: ``pd.ArrowDtype(pa.binary())``) or, in pandas, an object-dtype
09560: column of ``bytes`` works too, at the cost of a copy. Requires
09561: QuestDB 10 or newer.
09562: - **DATE**: Arrow ``pa.timestamp('ms')`` (tz-aware or naive),
09563: ``pa.date32()``, and ``pa.date64()`` columns land as DATE. The
09564: Arrow type is itself the claim, so there is no DATE cell type
09565: and no ``'date'`` kind for ``schema_overrides``. Such a column
09566: lands as DATE whether the frame is fully Arrow-backed or mixed
09567: with NumPy columns. What has no route of its own to DATE is
09568: the NumPy ``datetime64[ms]`` dtype, which widens to a
09569: microsecond TIMESTAMP, and its tz-aware ``datetime64[ms, tz]``
09570: form, which is rejected outright. A millisecond column named
09571: by ``at=`` becomes the table's designated TIMESTAMP, like any
09572: other ``at`` column. Round-tripping keeps the type: :meth:`query
09573: <questdb.QuestDB.query>` returns a DATE column as
09574: ``pa.timestamp('ms', 'UTC')``, which ``to_arrow()`` and
09575: ``to_pandas(dtype_backend='pyarrow')`` feed straight back as
09576: DATE. Plain ``to_pandas()`` gives a NumPy ``datetime64[ms]``
09577: column, and the ``df.attrs['questdb']`` claim it comes with
09578: names the column DATE, so this method puts the Arrow type back
09579: on before writing and that frame lands as DATE too.
09580: Row-at-a-time, DATE is written with :class:`DateMillis
09581: <questdb.DateMillis>` through :func:`Buffer.row
09582: <questdb.ingress.Buffer.row>`.
09583:
09584: Server-side coercion handles cross-type writes (e.g. ``pa.string()``
09585: UUIDs landing in a UUID column are parsed server-side; narrow ints
09586: landing in a wider column are widened). Failures surface as
09587: ``QuestDBError`` from the ``flush()``.
09588:
09589: ``schema_overrides`` reclassifies columns by name, mapping each to
09590: ``'symbol'``, ``'ipv4'``, ``'char'``, ``'uuid'``, ``'long256'``,
09591: ``'binary'``, or ``('geohash', bits)`` (e.g.
09592: ``{'venue': 'symbol', 'src_ip': 'ipv4'}``). Unknown column names are
09593: rejected. An override wins over any Arrow field metadata on its
09594: column, except ``'binary'``, which is refused on a column whose
09595: own type or field metadata labels it UUID or LONG256. ``'uuid'`` and ``'long256'`` apply to fixed-size and
09596: variable-length binary columns alike — the route polars frames take,
09597: since polars has no fixed-size binary dtype — and every non-null
09598: value must be exactly 16 or 32 bytes respectively. ``'binary'``
09599: applies to binary columns and says a 16- or 32-byte column holds
09600: plain bytes (see **Binary** above); it cannot override a
09601: ``pa.uuid()`` type or a ``uuid`` / ``long256`` field label, and
09602: is refused on such a column. It requires the
09603: Arrow columnar path (fully Arrow-backed input without
09604: ``table_name_col``; pandas input needs pandas 2.2 or later); on
09605: input that falls back to the NumPy planner
09606: it raises :class:`UnsupportedDataFrameShapeError`.
09607:
09608: A pandas frame that came out of :meth:`QueryResult.to_pandas`
09609: carries its source column types in ``df.attrs['questdb']``, and
09610: this method reads them back. That is what keeps UUID, LONG256,
09611: IPV4, CHAR, GEOHASH, and DATE columns their own type on a
09612: read-modify-write round trip: their claim lives in Arrow *field*
09613: metadata, which a pandas dtype — an Arrow type and no field —
09614: cannot hold. The metadata recalls what the frame held when it was
09615: read, so a column since dropped, renamed, or retyped simply loses
09616: its claim, and ``symbols`` / ``schema_overrides`` outrank it.
09617: BYTE, SHORT, and INT columns still widen one step on the way back
09618: in; the Arrow ingest API has no override that pins them.
09619:
09620: The claim is honoured on every shape a ``to_pandas`` backend
09621: produces, so plain ``to_pandas()``,
09622: ``dtype_backend='pyarrow'`` and ``dtype_backend='numpy_nullable'``
09623: round-trip the same way. Besides the Arrow-backed and plain NumPy
09624: columns, that covers the object columns the other backends leave
09625: behind: Python ints, which is what a pandas masked column becomes
09626: and what plain ``to_pandas()`` returns a LONG256 as, and
09627: ``bytes``, which is how ``dtype_backend='numpy_nullable'``
09628: returns UUID and LONG256. Frames saved from version 5.0, whose
09629: plain ``to_pandas()`` returned a GEOHASH column as an unsigned
09630: integer, round-trip too: such a column is written as the signed
09631: integer of the same width, bit for bit. A frame whose columns
09632: were retyped past that set — which a custom ``types_mapper`` can
09633: do — keeps the claim in ``attrs`` and cannot use it: a claimed
09634: column that arrives as a float or a string dtype lands as that
09635: dtype implies, and the claim it could not use is reported as a
09636: warning-level record on the ``questdb`` logger. An object column
09637: states no width or range of its own, so a claimed value the type
09638: cannot hold — an integer past ``2**32-1`` under ``ipv4``, a cell
09639: that is not exactly 16 or 32 bytes under ``uuid`` or ``long256``
09640: — is refused rather than written into a column of the claimed
09641: type. GEOHASH is the deliberate exception, described next.
09642:
09643: Bulk GEOHASH values are raw bit patterns, whatever the column is
09644: stored as: NumPy, Arrow, or an object column of Python ints,
09645: which is also what a pandas masked column becomes. This is a
09646: deliberate contract, the same for every shape, so that whether a
09647: frame is written does not depend on whether a GEOHASH column
09648: holds a null; plain :meth:`QueryResult.to_pandas` returns a
09649: column that does as a masked column. The declared precision
09650: must be in ``1..=60`` and fit the signed integer carrier, but no
09651: per-value check verifies that the pattern has no bits set above
09652: that precision. For example, ``32`` under ``GEOHASH(5b)`` is
09653: accepted even though it needs six bits. If the declared precision
09654: is wrong for the data, the write can succeed and store a different
09655: GEOHASH location or ``NULL``. Only the low
09656: ``ceil(precision / 8)`` bytes are encoded, and the exact result of
09657: an inconsistent value is unspecified. This is a semantic
09658: data-integrity risk, not a memory-safety risk for otherwise valid
09659: NumPy/Arrow buffers. The caller must validate bulk values. The
09660: scalar :class:`Geohash <questdb.Geohash>` constructor remains
09661: strict; malformed custom Arrow C Data structures remain invalid
09662: input and are outside this guarantee.
09663:
09664: A column of nothing but nulls names no type of its own, and
09665: without a claim it is left out of the write and out of the
09666: table the write auto-creates. A claim names one, so a claimed
09667: all-null column is written as the claimed type — which is what
09668: keeps a batch that happens to hold no value for one column from
09669: deciding the shape of the table.
09670:
09671: The claim a query result carries reads as an ordinary mapping
09672: but cannot be edited in place, because every copy of the frame
09673: shares it; assign a new mapping to ``df.attrs['questdb']`` to
09674: change it. A plain hand-written ``dict`` is read here just the
09675: same, in this shape:
09676:
09677: .. code-block:: python
09678:
09679: df.attrs['questdb'] = {
09680: 'version': 1,
09681: 'columns': {
09682: 'src_ip': {'kind': 'ipv4'},
09683: 'pos': {'kind': 'geohash', 'precision_bits': 20},
09684: 'traded_on': {'kind': 'date'},
09685: },
09686: }
09687:
09688: ``version`` must be ``1`` when present, and a mapping without it
09689: reads as version 1. The claim's vocabulary can gain kinds, and a
09690: client applying a version it does not understand would write the
09691: wrong column type, which is the outcome the claim exists to
09692: prevent, so a mapping carrying any other version is not read and
09693: every column in it is ignored. A claim, or a column's entry in
09694: it, that is not read is reported through the ``questdb`` logger;
09695: the write goes ahead either way. ``kind`` is one of
09696: ``'uuid'``, ``'long256'``, ``'ipv4'``, ``'char'``, ``'geohash'``,
09697: or ``'date'`` — the types whose claim cannot always ride on a pandas
09698: dtype. ``precision_bits`` accompanies ``'geohash'`` alone. A
09699: ``'date'`` claim restores the DATE type after plain pandas has
09700: represented it as NumPy ``datetime64[ms]``. Naming a column that is
09701: not in the frame is not an error; the entry is skipped.
09702:
09703: A ``pa.Table`` or ``pa.RecordBatch`` from
09704: :meth:`QueryResult.to_arrow` or :meth:`QueryResult.iter_arrow`
09705: carries the same claims in Arrow field metadata, as a
09706: ``questdb.column_type`` key on every field, and this method
09707: passes that metadata to the native client unchanged. A field
09708: claim the field's Arrow type cannot carry — ``'short'`` on
09709: ``pa.int32()``, ``'ipv4'`` on ``pa.int64()`` — makes this method
09710: raise :class:`QuestDBError <questdb.QuestDBError>`, with ``code``
09711: set to ``QuestDBErrorCode.ArrowIngest``, before anything is sent.
09712: This stricter rule is deliberate. Field metadata is the input
09713: contract of the native Arrow ingest, which refuses such a field
09714: in every language that uses it. A field claim also goes stale
09715: only when the old field is carried onto a new type: ``Table.cast``
09716: with a schema built from ``field.with_type(...)``, or
09717: ``pa.concat_tables(..., promote_options='permissive')`` with the
09718: claimed table first. Casting to a schema built from scratch,
09719: ``set_column`` by name, and a polars or pandas round trip all
09720: build fields without the key. ``df.attrs`` belongs to the whole
09721: frame and survives ``astype`` and arithmetic, so a stale claim
09722: there is the normal case and is logged instead. To write a
09723: retyped column, drop its metadata:
09724:
09725: .. code-block:: python
09726:
09727: i = table.schema.get_field_index('col')
09728: table = table.cast(table.schema.set(
09729: i, table.schema.field(i).remove_metadata()))
09730:
09731: ``max_rows_per_batch`` sets the pipelining granularity, not a
09732: safety limit: any batch exceeding the negotiated per-batch byte
09733: cap is split regardless of it, and a single row is never bounded
09734: by it. Each batch is one unit of client memory and server-side
09735: apply. The first successful batch on a fresh connection is a commit
09736: boundary. Sliceable Arrow inputs add another checkpoint about every
09737: 100 batches, so ``max_rows_per_batch * 100`` rows approximates the
09738: maximum periodic uncommitted tail, not a whole-source replay window.
09739: The NumPy planner pipelines the remaining batches until its final
09740: commit. Either path may checkpoint earlier when deferred capacity
09741: fills. Raise ``max_rows_per_batch`` for narrow numeric
09742: rows; lower it for very wide rows or tight memory. Streaming Arrow
09743: input (``pa.RecordBatchReader``) is not re-batched — the producer's
09744: batch size governs its checkpoint window.
09745: """
+09746: cdef qdb_pystr_buf* b = NULL
__pyx_v_b = NULL;
+09747: cdef dataframe_plan_t plan = dataframe_plan_blank()
__pyx_v_plan = __pyx_f_7questdb_7_client_dataframe_plan_blank();
+09748: cdef questdb_db* db = NULL
__pyx_v_db = NULL;
+09749: cdef bint db_use = False
__pyx_v_db_use = 0;
09750: cdef direct_conn_source_t src
+09751: db = self._begin_db_use('dataframe')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_dataframe, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 9751, __pyx_L1_error) __pyx_v_db = __pyx_t_1;
+09752: db_use = True
__pyx_v_db_use = 1;
+09753: try:
/*try:*/ {
09754: # Claimed inside the `try`, and after `_begin_db_use`,
09755: # which raises on a closed handle: an allocation made
09756: # ahead of that raise has nothing to free it, so a retry
09757: # loop against a closed handle leaks one per attempt.
+09758: b = qdb_pystr_buf_new()
__pyx_v_b = qdb_pystr_buf_new();
+09759: src.db = db
__pyx_v_src.db = __pyx_v_db;
+09760: src.opts = NULL
__pyx_v_src.opts = NULL;
+09761: _direct_dataframe_run(
__pyx_t_3 = __pyx_f_7questdb_7_client__direct_dataframe_run((&__pyx_v_src), (((double)questdb_db_reconnect_max_duration_ms(__pyx_v_db)) / 1000.0), __pyx_v_b, (&__pyx_v_plan), __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_t_2, __pyx_v_schema_overrides); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9761, __pyx_L4_error)
09762: &src,
09763: questdb_db_reconnect_max_duration_ms(db) / 1000.0,
09764: b,
09765: &plan,
09766: df,
09767: table_name,
09768: table_name_col,
09769: symbols,
09770: at,
+09771: max_rows_per_batch,
__pyx_t_2 = __Pyx_PyLong_As_size_t(__pyx_v_max_rows_per_batch); if (unlikely((__pyx_t_2 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 9771, __pyx_L4_error)
09772: schema_overrides)
+09773: return self
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_self);
__pyx_r = ((PyObject *)__pyx_v_self);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L3_return;
}
09774: finally:
+09775: if b != NULL:
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
{
__pyx_t_13 = (__pyx_v_b != NULL);
if (__pyx_t_13) {
/* … */
}
/* … */
__pyx_t_13 = (__pyx_v_b != NULL);
if (__pyx_t_13) {
/* … */
}
+09776: qdb_pystr_buf_free(b)
qdb_pystr_buf_free(__pyx_v_b);
/* … */
qdb_pystr_buf_free(__pyx_v_b);
+09777: if db_use:
if (__pyx_v_db_use) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
goto __pyx_L1_error;
__pyx_L7_error:;
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_12 = __pyx_r;
__pyx_r = 0;
/* … */
if (__pyx_v_db_use) {
/* … */
}
__pyx_r = __pyx_t_12;
__pyx_t_12 = 0;
goto __pyx_L0;
}
}
+09778: self._end_db_use()
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9778, __pyx_L7_error) /* … */ ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9778, __pyx_L1_error)
09779:
+09780: def execute(self, str sql, object binds=None, *, object timeout=None):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_11execute(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_7QuestDB_10execute, "\n Run a statement and discard whatever it returns.\n\n Executes ``sql`` like :meth:`query`, drains the result to its\n clean end and returns the pooled connection \342\200\224 the pattern DDL\n and DML otherwise need spelled out as\n ``with db.query(sql) as r: r.to_pandas()``. Statement output\n (a ``COPY`` status row, admin-function rows, a stray\n ``SELECT``) is discarded; use :meth:`query` when you want the\n result. The connection\047s SYMBOL dictionary is left untouched.\n\n ``binds`` and ``timeout`` behave exactly as on :meth:`query`.\n\n Returns the statement\047s ``EXEC_DONE`` report as an\n :class:`ExecDone` named tuple ``(op_type, rows_affected)``, or\n ``None`` for a statement that streamed a result set instead (a\n ``SELECT``). See :attr:`QueryResult.exec_done` for the caveats on\n ``rows_affected``.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_11execute = {"execute", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_11execute, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_10execute}; static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_11execute(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_sql = 0; PyObject *__pyx_v_binds = 0; PyObject *__pyx_v_timeout = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("execute (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_sql,&__pyx_mstate_global->__pyx_n_u_binds,&__pyx_mstate_global->__pyx_n_u_timeout,0}; PyObject* values[3] = {0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 9780, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 9780, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 9780, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "execute", 0) < (0)) __PYX_ERR(0, 9780, __pyx_L3_error) if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("execute", 0, 1, 2, i); __PYX_ERR(0, 9780, __pyx_L3_error) } } } else { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 9780, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 9780, __pyx_L3_error) break; default: goto __pyx_L5_argtuple_error; } if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_sql = ((PyObject*)values[0]); __pyx_v_binds = values[1]; __pyx_v_timeout = values[2]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("execute", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 9780, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.QuestDB.execute", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sql), (&PyUnicode_Type), 1, "sql", 1))) __PYX_ERR(0, 9780, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_10execute(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self), __pyx_v_sql, __pyx_v_binds, __pyx_v_timeout); /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_10execute(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, PyObject *__pyx_v_sql, PyObject *__pyx_v_binds, PyObject *__pyx_v_timeout) { PyObject *__pyx_v_result = NULL; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("questdb._client.QuestDB.execute", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_result); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 9780, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_timeout, Py_None) < (0)) __PYX_ERR(0, 9780, __pyx_L1_error) __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_11execute, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_execute, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[126])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9780, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_17, __pyx_mstate_global->__pyx_tuple[49]); __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_17, __pyx_t_20); __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_execute_2, __pyx_t_17) < (0)) __PYX_ERR(0, 9780, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
09781: """
09782: Run a statement and discard whatever it returns.
09783:
09784: Executes ``sql`` like :meth:`query`, drains the result to its
09785: clean end and returns the pooled connection — the pattern DDL
09786: and DML otherwise need spelled out as
09787: ``with db.query(sql) as r: r.to_pandas()``. Statement output
09788: (a ``COPY`` status row, admin-function rows, a stray
09789: ``SELECT``) is discarded; use :meth:`query` when you want the
09790: result. The connection's SYMBOL dictionary is left untouched.
09791:
09792: ``binds`` and ``timeout`` behave exactly as on :meth:`query`.
09793:
09794: Returns the statement's ``EXEC_DONE`` report as an
09795: :class:`ExecDone` named tuple ``(op_type, rows_affected)``, or
09796: ``None`` for a statement that streamed a result set instead (a
09797: ``SELECT``). See :attr:`QueryResult.exec_done` for the caveats on
09798: ``rows_affected``.
09799: """
+09800: self._begin_db_use('execute')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_execute_2, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 9800, __pyx_L1_error)
+09801: try:
/*try:*/ {
+09802: result = self.query(
__pyx_t_3 = ((PyObject *)__pyx_v_self);
__Pyx_INCREF(__pyx_t_3);
/* … */
{
PyObject* __pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_reset_symbol_dict, __pyx_mstate_global->__pyx_n_u_timeout};
__pyx_mstate_global->__pyx_tuple[33] = __Pyx_PyTuple_FromArray(__pyx_temp, 2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[33])) __PYX_ERR(0, 9802, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[33]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[33]);
+09803: sql, binds, reset_symbol_dict=False, timeout=timeout)
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[5] = {__pyx_t_3, __pyx_v_sql, __pyx_v_binds, Py_False, __pyx_v_timeout};
#if CYTHON_VECTORCALL
__pyx_t_5 = __pyx_mstate_global->__pyx_tuple[33];
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 9802, __pyx_L4_error)
__Pyx_INCREF(__pyx_t_5);
#else
{
PyObject *__pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_reset_symbol_dict, __pyx_mstate_global->__pyx_n_u_timeout};
__pyx_t_5 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+3, 2);
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 9802, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_5);
}
#endif
__pyx_t_2 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_query, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_5);
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9802, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_v_result = __pyx_t_2;
__pyx_t_2 = 0;
+09804: try:
/*try:*/ {
+09805: result._drain()
__pyx_t_5 = __pyx_v_result;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_drain, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9805, __pyx_L7_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+09806: return result.exec_done
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_mstate_global->__pyx_n_u_exec_done); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9806, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L6_return; }
09807: finally:
+09808: result.close()
/*finally:*/ {
__pyx_L7_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
if ( unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__pyx_t_6 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
{
__pyx_t_5 = __pyx_v_result;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9808, __pyx_L10_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
}
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
__pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8;
goto __pyx_L4_error;
__pyx_L10_error:;
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
goto __pyx_L4_error;
}
__pyx_L6_return: {
__pyx_t_14 = __pyx_r;
__pyx_r = 0;
__pyx_t_5 = __pyx_v_result;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9808, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_r = __pyx_t_14;
__pyx_t_14 = 0;
goto __pyx_L3_return;
}
}
}
09809: finally:
+09810: self._end_db_use()
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9);
if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_9);
__pyx_t_7 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9810, __pyx_L12_error)
}
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_10, __pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ErrRestore(__pyx_t_14, __pyx_t_13, __pyx_t_12);
__pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0;
__pyx_lineno = __pyx_t_7; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_8;
goto __pyx_L1_error;
__pyx_L12_error:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_10, __pyx_t_9);
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_9 = __pyx_r;
__pyx_r = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9810, __pyx_L1_error)
__pyx_r = __pyx_t_9;
__pyx_t_9 = 0;
goto __pyx_L0;
}
}
09811:
+09812: def query(
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_13query(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_7QuestDB_12query, "\n Execute a SQL query and return a :class:`QueryResult`.\n\n Egress goes through the QuestDB Wire Protocol (QWP/WebSocket)\n ``/read/v1`` endpoint. The reader is borrowed from the same\n connection pool that hosts the ingress writers and is returned to\n the pool when the returned :class:`QueryResult` is consumed or\n closed (a poisoned connection is dropped instead). Auth / TLS\n settings apply to both directions.\n\n To run several queries on one pooled connection, lease a\n :class:`PooledReader` with :meth:`reader` instead.\n\n :param sql: SQL text to execute. Forwarded verbatim to QuestDB.\n\n :param binds: Positional bind parameters matching the ``$1``..``$N``\n placeholders in ``sql``, as a list or tuple. Always prefer binds\n over interpolating values into the SQL text \342\200\224 they take no\n escaping and keep types exact. Supported Python types and their\n QuestDB bind types:\n\n - ``None`` \342\206\222 SQL NULL (bound as a VARCHAR null)\n - ``bool`` \342\206\222 BOOLEAN\n - ``int`` \342\206\222 LONG (must fit signed 64-bit)\n - ``float`` \342\206\222 DOUBLE\n - ``str`` \342\206\222 VARCHAR\n - ``datetime.datetime`` \342\206\222 TIMESTAMP (microseconds; a naive\n value is interpreted as UTC, the same rule as everywhere else\n in the API)\n - :class:`TimestampMicros` \342\206\222 TIMESTAMP\n - :class:`TimestampNanos` \342\206\222 TIMESTAMP_NS\n - ``datetime.date`` \342\206\222 DATE\n - ``decimal.Decimal`` \342\206\222 the narrowest DECIMAL that holds it,\n with its fractional digits as the scale (up to 76 digits and\n scale 76; NaN and infinities raise :class:`ValueError`)\n - ``uuid.UUID`` \342\206\222 UUID\n\n Any other type raises :class:`TypeError` na""ming the placeholder.\n\n .. code-block:: python\n\n res = db.query(\n \047SELECT * FROM trades WHERE ts > $1 AND sym = $2\047,\n [datetime.datetime(2026, 7, 1), \047BTC-USD\047])\n\n :param reset_symbol_dict: When ``True`` (the default), the server\n resets the connection\047s SYMBOL dictionary before this query so it\n never inherits symbols from earlier queries on the pooled\n connection (query-scoped dict), avoiding cross-query dictionary\n bloat in ``to_polars()`` / ``to_pandas()``. Set ``False`` to keep\n the dictionary warm across repeated identical queries. No-op\n against servers that predate the capability.\n\n :param timeout: Run this query under its own budget instead of the\n server-wide ``query.timeout``, overriding the connect string\047s\n ``query_timeout_ms``. An ``int`` is milliseconds; a\n ``datetime.timedelta`` works too, with a positive value below\n one millisecond rounded *up* to 1 ms. ``None`` (the default)\n keeps the connect string\047s ``query_timeout_ms``; ``0`` clears\n it. Requires a server advertising ``CAP_QUERY_TIMEOUT``: against\n an older one a non-zero timeout is refused before anything is\n sent, with ``QuestDBErrorCode.UnsupportedServer``, rather than\n silently running under the server default; the connection is\n untouched, so pass ``timeout=0`` or raise the server\047s\n ``query.timeout`` instead. On expiry the error carries\n ``QuestDBErrorCode.QueryTimeout`` and the connection stays\n usable \342\200\224 but do not retry a write on it: a statement that\n outlives its timeout is reported as done instead, and a DDL /\n INSERT / UPDATE that timed out waiting for the table writer may\n still be applied.\n\n "" :return: A :class:`QueryResult`. Materialise it via\n ``iter_rows()``, ``to_pandas()``, ``to_arrow()``,\n ``iter_arrow()``, ``iter_pandas()``, or the\n ``__arrow_c_stream__`` PyCapsule protocol.\n\n Sentinel-value collisions in the result frame round-trip QuestDB\047s\n contract: ``INT64_MIN`` in a LONG column, NaN in DOUBLE / FLOAT,\n and the sentinel values for INT / DATE / TIMESTAMP /\n TIMESTAMP_NS / CHAR / UUID / LONG256 / IPV4 are all interpreted\n as NULL by QuestDB and cannot be distinguished from legitimate\n occurrences of those values. GEOHASH has no such sentinel, so a\n NULL GEOHASH stays distinct from every value.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_13query = {"query", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_13query, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_12query}; static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_13query(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_sql = 0; PyObject *__pyx_v_binds = 0; int __pyx_v_reset_symbol_dict; PyObject *__pyx_v_timeout = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("query (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_sql,&__pyx_mstate_global->__pyx_n_u_binds,&__pyx_mstate_global->__pyx_n_u_reset_symbol_dict,&__pyx_mstate_global->__pyx_n_u_timeout,0}; PyObject* values[4] = {0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 9812, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 9812, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 9812, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "query", 0) < (0)) __PYX_ERR(0, 9812, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_12query(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, PyObject *__pyx_v_sql, PyObject *__pyx_v_binds, int __pyx_v_reset_symbol_dict, PyObject *__pyx_v_timeout) { struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_reader_handle = 0; struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_cursor_handle = 0; struct questdb_db *__pyx_v_db; int64_t __pyx_v_timeout_ms; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("questdb._client.QuestDB.query", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_reader_handle); __Pyx_XDECREF((PyObject *)__pyx_v_cursor_handle); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9812, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); /* … */ __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_13query, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_query, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[127])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 9812, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20); #endif __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_20, __pyx_mstate_global->__pyx_tuple[49]); __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_20, __pyx_t_17); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_query, __pyx_t_20) < (0)) __PYX_ERR(0, 9812, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
09813: self,
09814: str sql,
+09815: object binds=None,
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
09816: *,
+09817: bint reset_symbol_dict=True,
__pyx_v_reset_symbol_dict = ((int)1);
}
__pyx_v_timeout = values[3];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("query", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 9812, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.QuestDB.query", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sql), (&PyUnicode_Type), 1, "sql", 1))) __PYX_ERR(0, 9814, __pyx_L1_error)
__pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_12query(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self), __pyx_v_sql, __pyx_v_binds, __pyx_v_reset_symbol_dict, __pyx_v_timeout);
/* … */
if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_reset_symbol_dict, Py_True) < (0)) __PYX_ERR(0, 9812, __pyx_L1_error)
+09818: object timeout=None):
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("query", 0, 1, 2, i); __PYX_ERR(0, 9812, __pyx_L3_error) } } } else { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 9812, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 9812, __pyx_L3_error) break; default: goto __pyx_L5_argtuple_error; } /* … */ if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_sql = ((PyObject*)values[0]); __pyx_v_binds = values[1]; if (values[2]) { __pyx_v_reset_symbol_dict = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_reset_symbol_dict == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 9817, __pyx_L3_error) } else { /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_timeout, Py_None) < (0)) __PYX_ERR(0, 9812, __pyx_L1_error)
09819: """
09820: Execute a SQL query and return a :class:`QueryResult`.
09821:
09822: Egress goes through the QuestDB Wire Protocol (QWP/WebSocket)
09823: ``/read/v1`` endpoint. The reader is borrowed from the same
09824: connection pool that hosts the ingress writers and is returned to
09825: the pool when the returned :class:`QueryResult` is consumed or
09826: closed (a poisoned connection is dropped instead). Auth / TLS
09827: settings apply to both directions.
09828:
09829: To run several queries on one pooled connection, lease a
09830: :class:`PooledReader` with :meth:`reader` instead.
09831:
09832: :param sql: SQL text to execute. Forwarded verbatim to QuestDB.
09833:
09834: :param binds: Positional bind parameters matching the ``$1``..``$N``
09835: placeholders in ``sql``, as a list or tuple. Always prefer binds
09836: over interpolating values into the SQL text — they take no
09837: escaping and keep types exact. Supported Python types and their
09838: QuestDB bind types:
09839:
09840: - ``None`` → SQL NULL (bound as a VARCHAR null)
09841: - ``bool`` → BOOLEAN
09842: - ``int`` → LONG (must fit signed 64-bit)
09843: - ``float`` → DOUBLE
09844: - ``str`` → VARCHAR
09845: - ``datetime.datetime`` → TIMESTAMP (microseconds; a naive
09846: value is interpreted as UTC, the same rule as everywhere else
09847: in the API)
09848: - :class:`TimestampMicros` → TIMESTAMP
09849: - :class:`TimestampNanos` → TIMESTAMP_NS
09850: - ``datetime.date`` → DATE
09851: - ``decimal.Decimal`` → the narrowest DECIMAL that holds it,
09852: with its fractional digits as the scale (up to 76 digits and
09853: scale 76; NaN and infinities raise :class:`ValueError`)
09854: - ``uuid.UUID`` → UUID
09855:
09856: Any other type raises :class:`TypeError` naming the placeholder.
09857:
09858: .. code-block:: python
09859:
09860: res = db.query(
09861: 'SELECT * FROM trades WHERE ts > $1 AND sym = $2',
09862: [datetime.datetime(2026, 7, 1), 'BTC-USD'])
09863:
09864: :param reset_symbol_dict: When ``True`` (the default), the server
09865: resets the connection's SYMBOL dictionary before this query so it
09866: never inherits symbols from earlier queries on the pooled
09867: connection (query-scoped dict), avoiding cross-query dictionary
09868: bloat in ``to_polars()`` / ``to_pandas()``. Set ``False`` to keep
09869: the dictionary warm across repeated identical queries. No-op
09870: against servers that predate the capability.
09871:
09872: :param timeout: Run this query under its own budget instead of the
09873: server-wide ``query.timeout``, overriding the connect string's
09874: ``query_timeout_ms``. An ``int`` is milliseconds; a
09875: ``datetime.timedelta`` works too, with a positive value below
09876: one millisecond rounded *up* to 1 ms. ``None`` (the default)
09877: keeps the connect string's ``query_timeout_ms``; ``0`` clears
09878: it. Requires a server advertising ``CAP_QUERY_TIMEOUT``: against
09879: an older one a non-zero timeout is refused before anything is
09880: sent, with ``QuestDBErrorCode.UnsupportedServer``, rather than
09881: silently running under the server default; the connection is
09882: untouched, so pass ``timeout=0`` or raise the server's
09883: ``query.timeout`` instead. On expiry the error carries
09884: ``QuestDBErrorCode.QueryTimeout`` and the connection stays
09885: usable — but do not retry a write on it: a statement that
09886: outlives its timeout is reported as done instead, and a DDL /
09887: INSERT / UPDATE that timed out waiting for the table writer may
09888: still be applied.
09889:
09890: :return: A :class:`QueryResult`. Materialise it via
09891: ``iter_rows()``, ``to_pandas()``, ``to_arrow()``,
09892: ``iter_arrow()``, ``iter_pandas()``, or the
09893: ``__arrow_c_stream__`` PyCapsule protocol.
09894:
09895: Sentinel-value collisions in the result frame round-trip QuestDB's
09896: contract: ``INT64_MIN`` in a LONG column, NaN in DOUBLE / FLOAT,
09897: and the sentinel values for INT / DATE / TIMESTAMP /
09898: TIMESTAMP_NS / CHAR / UUID / LONG256 / IPV4 are all interpreted
09899: as NULL by QuestDB and cannot be distinguished from legitimate
09900: occurrences of those values. GEOHASH has no such sentinel, so a
09901: NULL GEOHASH stays distinct from every value.
09902: """
09903: # Borrow a reader from the same `questdb_db` pool that hosts
09904: # the ingress writers. The pool amortises TCP+TLS handshake
09905: # cost across many `QuestDB.query()` calls: the first call
09906: # opens a connection, subsequent calls hit the idle-list
09907: # cache. See `c-questdb-client/questdb-rs/src/ingress/
09908: # column_sender/db.rs` for the pool's structure.
09909: cdef _ReaderHandle reader_handle
09910: cdef _CursorHandle cursor_handle
09911: cdef questdb_db* db
+09912: if sql is None:
__pyx_t_1 = (__pyx_v_sql == ((PyObject*)Py_None));
if (unlikely(__pyx_t_1)) {
/* … */
}
+09913: raise TypeError(
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_query_requires_a_sql_string_to_r};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9913, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 9913, __pyx_L1_error)
09914: 'query() requires a sql string; to run several queries '
09915: 'on one pooled connection, lease a PooledReader with '
09916: 'reader() instead.')
+09917: if binds is not None and not isinstance(binds, (list, tuple)):
__pyx_t_5 = (__pyx_v_binds != Py_None);
if (__pyx_t_5) {
} else {
__pyx_t_1 = __pyx_t_5;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_6 = PyList_Check(__pyx_v_binds);
if (!__pyx_t_6) {
} else {
__pyx_t_5 = __pyx_t_6;
goto __pyx_L7_bool_binop_done;
}
__pyx_t_6 = PyTuple_Check(__pyx_v_binds);
__pyx_t_5 = __pyx_t_6;
__pyx_L7_bool_binop_done:;
__pyx_t_6 = (!__pyx_t_5);
__pyx_t_1 = __pyx_t_6;
__pyx_L5_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+09918: raise TypeError(
__pyx_t_3 = NULL;
+09919: '"binds" must be a list or tuple of positional bind '
__pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_binds_must_be_a_list_or_tuple_o, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 9919, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_4 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_7}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9918, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 9918, __pyx_L1_error)
+09920: f'parameters (or None), not {_fqn(type(binds))}')
__pyx_t_7 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_binds)))); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 9920, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9920, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+09921: cdef int64_t timeout_ms = _query_timeout_to_millis(timeout)
__pyx_t_9 = __pyx_f_7questdb_7_client__query_timeout_to_millis(__pyx_v_timeout); if (unlikely(__pyx_t_9 == ((int64_t)-2L))) __PYX_ERR(0, 9921, __pyx_L1_error)
__pyx_v_timeout_ms = __pyx_t_9;
+09922: db = self._begin_db_use('query')
__pyx_t_10 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_query, NULL); if (unlikely(__pyx_t_10 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 9922, __pyx_L1_error) __pyx_v_db = __pyx_t_10;
+09923: try:
/*try:*/ {
+09924: reader_handle = _borrow_reader_from_pool(db)
__pyx_t_2 = ((PyObject *)__pyx_f_7questdb_7_client__borrow_reader_from_pool(__pyx_v_db)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9924, __pyx_L10_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_reader_handle = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)__pyx_t_2); __pyx_t_2 = 0;
+09925: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
goto __pyx_L17_try_end;
__pyx_L12_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L14_except_error:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
goto __pyx_L10_error;
__pyx_L17_try_end:;
}
}
+09926: cursor_handle = _execute_query(
__pyx_t_14.__pyx_n = 3;
__pyx_t_14.reset_symbol_dict = __pyx_v_reset_symbol_dict;
__pyx_t_14.owns_reader = 1;
__pyx_t_14.timeout_ms = __pyx_v_timeout_ms;
__pyx_t_2 = ((PyObject *)__pyx_f_7questdb_7_client__execute_query(__pyx_v_reader_handle, __pyx_v_sql, __pyx_v_binds, &__pyx_t_14)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9926, __pyx_L12_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_v_cursor_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_2);
__pyx_t_2 = 0;
09927: reader_handle, sql, binds, reset_symbol_dict, True,
09928: timeout_ms)
+09929: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client.QuestDB.query", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_7, &__pyx_t_3) < 0) __PYX_ERR(0, 9929, __pyx_L14_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_3);
+09930: reader_handle._close()
((struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle *)__pyx_v_reader_handle->__pyx_vtab)->_close(__pyx_v_reader_handle);
+09931: raise
__Pyx_GIVEREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_7); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_7, __pyx_t_3); __pyx_t_2 = 0; __pyx_t_7 = 0; __pyx_t_3 = 0; __PYX_ERR(0, 9931, __pyx_L14_except_error) }
09932: finally:
+09933: self._end_db_use()
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9933, __pyx_L1_error)
goto __pyx_L11;
}
__pyx_L10_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_ExceptionSwap(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
if ( unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__Pyx_XGOTREF(__pyx_t_20);
__pyx_t_15 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_17 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9933, __pyx_L21_error)
}
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_ExceptionReset(__pyx_t_18, __pyx_t_19, __pyx_t_20);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ErrRestore(__pyx_t_13, __pyx_t_12, __pyx_t_11);
__pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
__pyx_lineno = __pyx_t_15; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_17;
goto __pyx_L1_error;
__pyx_L21_error:;
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_ExceptionReset(__pyx_t_18, __pyx_t_19, __pyx_t_20);
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
goto __pyx_L1_error;
}
__pyx_L11:;
}
+09934: return QueryResult(cursor_handle)
__pyx_t_7 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QueryResult); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9934, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_4 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_7, ((PyObject *)__pyx_v_cursor_handle)}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9934, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
09935:
+09936: def reader(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_15reader(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_7QuestDB_14reader, "\n Borrow a context-managed :class:`PooledReader` lease from the pool.\n\n The read-side twin of :meth:`sender`: the lease holds one pooled\n reader connection for its lifetime and runs queries on it\n sequentially via :meth:`PooledReader.query`.\n\n .. code-block:: python\n\n with db.reader() as r:\n r1 = r.query(\047SELECT * FROM t1\047).to_pandas()\n r2 = r.query(\n \047SELECT * FROM t2\047,\n reset_symbol_dict=False).to_pandas()\n\n The lease counts as an active use of the handle until it is\n closed: :meth:`QuestDB.close` waits for outstanding leases for as\n long as its ``timeout`` allows (a minute by default -- see\n :meth:`close <QuestDB.close>`), and a lease keeps working while\n the handle drains.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_15reader = {"reader", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_15reader, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_14reader}; static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_15reader(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("reader (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("reader", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("reader", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_14reader(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_14reader(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) { struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_reader_handle = 0; struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_lease = 0; struct questdb_db *__pyx_v_db; int __pyx_v_db_use; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client.QuestDB.reader", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_reader_handle); __Pyx_XDECREF((PyObject *)__pyx_v_lease); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_15reader, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_reader, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[128])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 9936, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_reader, __pyx_t_20) < (0)) __PYX_ERR(0, 9936, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
09937: """
09938: Borrow a context-managed :class:`PooledReader` lease from the pool.
09939:
09940: The read-side twin of :meth:`sender`: the lease holds one pooled
09941: reader connection for its lifetime and runs queries on it
09942: sequentially via :meth:`PooledReader.query`.
09943:
09944: .. code-block:: python
09945:
09946: with db.reader() as r:
09947: r1 = r.query('SELECT * FROM t1').to_pandas()
09948: r2 = r.query(
09949: 'SELECT * FROM t2',
09950: reset_symbol_dict=False).to_pandas()
09951:
09952: The lease counts as an active use of the handle until it is
09953: closed: :meth:`QuestDB.close` waits for outstanding leases for as
09954: long as its ``timeout`` allows (a minute by default -- see
09955: :meth:`close <QuestDB.close>`), and a lease keeps working while
09956: the handle drains.
09957: """
09958: cdef _ReaderHandle reader_handle
09959: cdef PooledReader lease
09960: cdef questdb_db* db
+09961: cdef bint db_use = False
__pyx_v_db_use = 0;
+09962: db = self._begin_db_use('reader', scoped=False)
__pyx_t_2.__pyx_n = 1; __pyx_t_2.scoped = 0; __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_reader, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 9962, __pyx_L1_error) __pyx_v_db = __pyx_t_1;
+09963: db_use = True
__pyx_v_db_use = 1;
+09964: try:
/*try:*/ {
+09965: reader_handle = _borrow_reader_from_pool(db)
__pyx_t_3 = ((PyObject *)__pyx_f_7questdb_7_client__borrow_reader_from_pool(__pyx_v_db)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9965, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_reader_handle = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)__pyx_t_3); __pyx_t_3 = 0;
+09966: lease = PooledReader.__new__(PooledReader)
__pyx_t_3 = ((PyObject *)__pyx_tp_new_7questdb_7_client_PooledReader(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledReader), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9966, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_lease = ((struct __pyx_obj_7questdb_7_client_PooledReader *)__pyx_t_3); __pyx_t_3 = 0;
+09967: lease._attach(self, reader_handle)
((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_lease->__pyx_vtab)->_attach(__pyx_v_lease, __pyx_v_self, __pyx_v_reader_handle);
+09968: db_use = False
__pyx_v_db_use = 0;
+09969: return lease
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_lease);
__pyx_r = ((PyObject *)__pyx_v_lease);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L3_return;
}
09970: finally:
+09971: if db_use:
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
{
if (__pyx_v_db_use) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
__pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
__pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
goto __pyx_L1_error;
__pyx_L7_error:;
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_12 = __pyx_r;
__pyx_r = 0;
if (__pyx_v_db_use) {
/* … */
}
__pyx_r = __pyx_t_12;
__pyx_t_12 = 0;
goto __pyx_L0;
}
}
+09972: self._end_db_use(scoped=False)
__pyx_t_13.__pyx_n = 1;
__pyx_t_13.scoped = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, &__pyx_t_13); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9972, __pyx_L7_error)
/* … */
__pyx_t_13.__pyx_n = 1;
__pyx_t_13.scoped = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, &__pyx_t_13); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9972, __pyx_L1_error)
09973:
+09974: def server_info(self) -> ServerInfo:
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_17server_info(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_7QuestDB_16server_info, "\n Return a :class:`ServerInfo` snapshot of the server\047s\n ``SERVER_INFO`` handshake: cluster role, failover epoch,\n negotiated capabilities, handshake wall-clock, and cluster/node\n identifiers.\n\n A reader is borrowed from the connection pool (opening one on\n first use, exactly like :meth:`query`), sampled, and returned to\n the pool. The snapshot describes that connection at its last\n handshake; a later failover is reflected only in snapshots taken\n after it.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_17server_info = {"server_info", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_17server_info, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_16server_info}; static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_17server_info(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("server_info (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("server_info", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("server_info", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_16server_info(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_16server_info(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) { struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_reader_handle = 0; struct questdb_db *__pyx_v_db; PyObject *__pyx_v_info = NULL; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("questdb._client.QuestDB.server_info", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_reader_handle); __Pyx_XDECREF(__pyx_v_info); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 9974, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_ServerInfo) < (0)) __PYX_ERR(0, 9974, __pyx_L1_error) __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_17server_info, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_server_info, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[129])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9974, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_17, __pyx_t_20); __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_server_info, __pyx_t_17) < (0)) __PYX_ERR(0, 9974, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
09975: """
09976: Return a :class:`ServerInfo` snapshot of the server's
09977: ``SERVER_INFO`` handshake: cluster role, failover epoch,
09978: negotiated capabilities, handshake wall-clock, and cluster/node
09979: identifiers.
09980:
09981: A reader is borrowed from the connection pool (opening one on
09982: first use, exactly like :meth:`query`), sampled, and returned to
09983: the pool. The snapshot describes that connection at its last
09984: handshake; a later failover is reflected only in snapshots taken
09985: after it.
09986: """
09987: cdef _ReaderHandle reader_handle
09988: cdef questdb_db* db
+09989: db = self._begin_db_use('server_info')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_server_info, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 9989, __pyx_L1_error) __pyx_v_db = __pyx_t_1;
+09990: try:
/*try:*/ {
+09991: reader_handle = _borrow_reader_from_pool(db)
__pyx_t_2 = ((PyObject *)__pyx_f_7questdb_7_client__borrow_reader_from_pool(__pyx_v_db)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9991, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_reader_handle = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)__pyx_t_2); __pyx_t_2 = 0;
+09992: info = _snapshot_server_info(reader_handle)
__pyx_t_2 = __pyx_f_7questdb_7_client__snapshot_server_info(__pyx_v_reader_handle); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9992, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_info = __pyx_t_2; __pyx_t_2 = 0;
+09993: reader_handle._close()
((struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle *)__pyx_v_reader_handle->__pyx_vtab)->_close(__pyx_v_reader_handle); }
09994: finally:
+09995: self._end_db_use()
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9995, __pyx_L1_error)
goto __pyx_L5;
}
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9995, __pyx_L7_error)
}
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
goto __pyx_L1_error;
__pyx_L7_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
goto __pyx_L1_error;
}
__pyx_L5:;
}
+09996: return info
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_v_info);
__pyx_r = __pyx_v_info;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
09997:
+09998: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_25connection_events_dropped_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_25connection_events_dropped_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_25connection_events_dropped___get__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_25connection_events_dropped___get__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
struct questdb_db *__pyx_v_db;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.QuestDB.connection_events_dropped.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
09999: def connection_events_dropped(self) -> int:
10000: """
10001: Total connection events discarded by the listener inbox's
10002: drop-oldest policy. ``0`` when no listener is registered.
10003: """
+10004: cdef questdb_db* db = self._begin_db_use('connection_events_dropped')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_connection_events_dropped, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10004, __pyx_L1_error) __pyx_v_db = __pyx_t_1;
+10005: try:
/*try:*/ {
+10006: return questdb_db_connection_events_dropped(db)
__pyx_t_2 = __Pyx_PyLong_From_uint64_t(questdb_db_connection_events_dropped(__pyx_v_db)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10006, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L3_return; }
10007: finally:
+10008: self._end_db_use()
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10008, __pyx_L7_error)
}
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
goto __pyx_L1_error;
__pyx_L7_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_11 = __pyx_r;
__pyx_r = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10008, __pyx_L1_error)
__pyx_r = __pyx_t_11;
__pyx_t_11 = 0;
goto __pyx_L0;
}
}
10009:
+10010: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_27connection_events_delivered_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_27connection_events_delivered_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_27connection_events_delivered___get__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_27connection_events_delivered___get__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
struct questdb_db *__pyx_v_db;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.QuestDB.connection_events_delivered.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
10011: def connection_events_delivered(self) -> int:
10012: """
10013: Total connection events delivered to the listener. ``0`` when no
10014: listener is registered.
10015: """
+10016: cdef questdb_db* db = self._begin_db_use('connection_events_delivered')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_connection_events_delivered, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10016, __pyx_L1_error) __pyx_v_db = __pyx_t_1;
+10017: try:
/*try:*/ {
+10018: return questdb_db_connection_events_delivered(db)
__pyx_t_2 = __Pyx_PyLong_From_uint64_t(questdb_db_connection_events_delivered(__pyx_v_db)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10018, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L3_return; }
10019: finally:
+10020: self._end_db_use()
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10020, __pyx_L7_error)
}
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
goto __pyx_L1_error;
__pyx_L7_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_11 = __pyx_r;
__pyx_r = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10020, __pyx_L1_error)
__pyx_r = __pyx_t_11;
__pyx_t_11 = 0;
goto __pyx_L0;
}
}
10021:
+10022: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_22error_events_delivered_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_22error_events_delivered_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_22error_events_delivered___get__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_22error_events_delivered___get__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
struct questdb_db *__pyx_v_db;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.QuestDB.error_events_delivered.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
10023: def error_events_delivered(self) -> int:
10024: """
10025: Total server rejections delivered to the ``error_handler``
10026: (or to the default logging handler when none was registered).
10027: """
+10028: cdef questdb_db* db = self._begin_db_use('error_events_delivered')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_error_events_delivered, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10028, __pyx_L1_error) __pyx_v_db = __pyx_t_1;
+10029: try:
/*try:*/ {
+10030: return questdb_db_rejection_events_delivered(db)
__pyx_t_2 = __Pyx_PyLong_From_uint64_t(questdb_db_rejection_events_delivered(__pyx_v_db)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10030, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L3_return; }
10031: finally:
+10032: self._end_db_use()
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10032, __pyx_L7_error)
}
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
goto __pyx_L1_error;
__pyx_L7_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_11 = __pyx_r;
__pyx_r = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10032, __pyx_L1_error)
__pyx_r = __pyx_t_11;
__pyx_t_11 = 0;
goto __pyx_L0;
}
}
10033:
+10034: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_20error_events_dropped_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_20error_events_dropped_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_20error_events_dropped___get__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_20error_events_dropped___get__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
struct questdb_db *__pyx_v_db;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.QuestDB.error_events_dropped.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
10035: def error_events_dropped(self) -> int:
10036: """
10037: Total server rejections discarded by the handler inbox's
10038: drop-oldest policy.
10039: """
+10040: cdef questdb_db* db = self._begin_db_use('error_events_dropped')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_error_events_dropped, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10040, __pyx_L1_error) __pyx_v_db = __pyx_t_1;
+10041: try:
/*try:*/ {
+10042: return questdb_db_rejection_events_dropped(db)
__pyx_t_2 = __Pyx_PyLong_From_uint64_t(questdb_db_rejection_events_dropped(__pyx_v_db)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10042, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L3_return; }
10043: finally:
+10044: self._end_db_use()
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10044, __pyx_L7_error)
}
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
goto __pyx_L1_error;
__pyx_L7_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_11 = __pyx_r;
__pyx_r = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10044, __pyx_L1_error)
__pyx_r = __pyx_t_11;
__pyx_t_11 = 0;
goto __pyx_L0;
}
}
10045:
+10046: def reap_idle(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_19reap_idle(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_7QuestDB_18reap_idle, "\n Manually reap idle above-pool-size connections.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_19reap_idle = {"reap_idle", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_19reap_idle, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_18reap_idle}; static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_19reap_idle(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("reap_idle (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("reap_idle", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("reap_idle", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_18reap_idle(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_18reap_idle(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) { size_t __pyx_v_closed; PyThreadState *__pyx_v_gs; struct questdb_db *__pyx_v_db; int __pyx_v_db_use; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("questdb._client.QuestDB.reap_idle", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_19reap_idle, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_reap_idle, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[130])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 10046, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_reap_idle, __pyx_t_17) < (0)) __PYX_ERR(0, 10046, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
10047: """
10048: Manually reap idle above-pool-size connections.
10049: """
10050: cdef size_t closed
+10051: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+10052: cdef questdb_db* db = NULL
__pyx_v_db = NULL;
+10053: cdef bint db_use = False
__pyx_v_db_use = 0;
+10054: db = self._begin_db_use('reap_idle')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_reap_idle, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10054, __pyx_L1_error) __pyx_v_db = __pyx_t_1;
+10055: db_use = True
__pyx_v_db_use = 1;
+10056: try:
/*try:*/ {
+10057: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+10058: closed = questdb_db_reap_idle(db)
__pyx_v_closed = questdb_db_reap_idle(__pyx_v_db);
+10059: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+10060: return closed
__pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_v_closed); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10060, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L3_return; }
10061: finally:
+10062: _ensure_has_gil(&gs)
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_7);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
{
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
/* … */
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+10063: if db_use:
if (__pyx_v_db_use) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
__pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
goto __pyx_L1_error;
__pyx_L7_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_11 = __pyx_r;
__pyx_r = 0;
/* … */
if (__pyx_v_db_use) {
/* … */
}
__pyx_r = __pyx_t_11;
__pyx_t_11 = 0;
goto __pyx_L0;
}
}
+10064: self._end_db_use()
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10064, __pyx_L7_error) /* … */ ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10064, __pyx_L1_error)
10065:
+10066: cpdef close(self, object timeout=_CLOSE_TIMEOUT_DEFAULT):
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_21close(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_7questdb_7_client_7QuestDB_close(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_7questdb_7_client_7QuestDB_close *__pyx_optional_args) {
PyObject *__pyx_v_timeout = __pyx_mstate_global->__pyx_k__37;
struct questdb_db *__pyx_v_db;
PyThreadState *__pyx_v_gs;
int __pyx_v_closed;
int __pyx_v_locked;
PyObject *__pyx_v_interrupt = 0;
int __pyx_v_notice;
size_t __pyx_v_notice_leases;
size_t __pyx_v_notice_calls;
PyObject *__pyx_v_lease_limit = 0;
PyObject *__pyx_v_call_limit = 0;
PyObject *__pyx_v_started = NULL;
PyObject *__pyx_v_lease_deadline = NULL;
PyObject *__pyx_v_call_deadline = NULL;
PyObject *__pyx_v_msg = NULL;
PyObject *__pyx_v_next_notice = NULL;
PyObject *__pyx_v_deadline = NULL;
PyObject *__pyx_v_now = NULL;
PyObject *__pyx_v_wait_s = NULL;
PyObject *__pyx_v_remaining = NULL;
PyObject *__pyx_v_exc = NULL;
PyObject *__pyx_r = NULL;
if (__pyx_optional_args) {
if (__pyx_optional_args->__pyx_n > 0) {
__pyx_v_timeout = __pyx_optional_args->timeout;
}
}
/* Check if called by wrapper */
if (unlikely(__pyx_skip_dispatch)) ;
/* Check if overridden in Python */
else if (
#if !CYTHON_USE_TYPE_SLOTS
unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB &&
__Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
#else
unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
#endif
) {
#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
#endif
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10066, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7questdb_7_client_7QuestDB_21close)) {
__pyx_t_3 = NULL;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_4 = __pyx_t_1;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_timeout};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10066, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_2;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L0;
}
#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
__pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
__pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
__pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
}
#endif
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
}
#endif
}
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_22);
__Pyx_AddTraceback("questdb._client.QuestDB.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_interrupt);
__Pyx_XDECREF(__pyx_v_lease_limit);
__Pyx_XDECREF(__pyx_v_call_limit);
__Pyx_XDECREF(__pyx_v_started);
__Pyx_XDECREF(__pyx_v_lease_deadline);
__Pyx_XDECREF(__pyx_v_call_deadline);
__Pyx_XDECREF(__pyx_v_msg);
__Pyx_XDECREF(__pyx_v_next_notice);
__Pyx_XDECREF(__pyx_v_deadline);
__Pyx_XDECREF(__pyx_v_now);
__Pyx_XDECREF(__pyx_v_wait_s);
__Pyx_XDECREF(__pyx_v_remaining);
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_21close(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_7QuestDB_20close, "\n Close the client and its connection pool.\n\n Closing is one-way. Once a ``close()`` proceeds -- rather\n than being refused outright, as from inside one of the\n handle\047s own calls or callbacks -- the handle refuses new\n work: ``sender()``, ``reader()``, ``dataframe()``, ``query()``\n and the rest raise. Work already in flight drains: a call in\n progress runs to completion, and an outstanding lease keeps\n working until its holder closes it. The one exception is\n :meth:`PooledSender.dataframe`, which forwards to\n :meth:`dataframe` over a connection of its own from the pool,\n so a load started through a lease after ``close()`` is new work\n and is refused like any other. The native pool is torn down by\n the first ``close()`` that finds nothing using the handle, or\n when the handle itself is collected.\n\n Calls on the handle and on its leases are counted per OS\n thread. With greenlets -- gevent, eventlet, or ``greenlet``\n used directly -- all greenlets on one thread count as one\n caller, so ``close()`` is also refused while another greenlet\n on the same thread is suspended inside a call on the handle or\n on one of its leases. See :ref:`sender_threading`.\n\n ``timeout`` sets how long this call waits for that drain.\n Calls are the handle\047s own methods in progress, such as\n ``dataframe()`` and ``query()``; anything done through a lease\n counts as that lease, including a long ``lease.dataframe()``\n already running when ``close()`` starts.\n\n - Left out: a call in progress is waited for until it\n returns, and an outstanding lease for up to a minute. A long\n load through a lease needs a larger ``timeout``, or ``None``.\n - A number of seconds: calls and leases alike are waited for\n up to that long. ``0`` closes only if nothing is ""in flight.\n - ``None``: calls and leases alike are waited for until they\n are done.\n\n ``close()`` cannot interrupt a call in progress. A\n ``dataframe()`` reading a stream that never ends, or one\n waiting on the very thread that calls ``close()``, keeps it\n waiting until ``timeout`` runs out -- and, with no limit on\n calls, for ever. A lease comes back only when its holder\n closes it, so one held by the calling thread, or by a thread\n that has since finished, never will: close every lease before\n closing the handle.\n\n When the limit runs out, this call raises\n :class:`QuestDBError <questdb.QuestDBError>` with ``code`` set\n to ``QuestDBErrorCode.InvalidApiCall``, naming how many leases\n and calls are still outstanding. The handle stays closing --\n it never goes back to open -- and a later ``close()``, with\n any ``timeout``, resumes the wait and finishes the teardown\n once the last of them is done. Waiting for a concurrent\n ``close()`` on another thread to finish its teardown is\n limited too: a number of seconds covers that wait and the\n drain together; left out, that wait gets a minute of its own;\n ``None`` puts no limit on it.\n\n ``timeout`` covers only this waiting. The teardown then spends\n up to ``close_flush_timeout_millis`` (5 seconds by default)\n draining each sender\047s queue. An in-memory queue drops whatever\n it has not delivered by then; a disk-backed queue (``sf_dir``)\n keeps it for replay on restart. The drop is not reported to\n Python: it raises nothing and logs nothing through the\n ``questdb`` logger. To be sure rows have arrived, close each\n lease with ``close(wait=True)`` before closing the handle.\n\n While it waits, it reports what it is still waiting for\n through the ``questdb`` logger at ``WARNING``:"" every five\n seconds for the first minute, then once a minute.\n\n A number of seconds is a budget for the whole close,\n including the close a ``with`` block makes on its way out:\n when the most recent ``close()`` on the handle was given one,\n leaving the block waits only for what is left of it, and not\n at all once it has run out. To bound leaving a ``with`` block,\n call ``close(timeout=...)`` as the block\047s last statement.\n Otherwise, leaving the block closes with the limits of a\n ``close()`` with no arguments.\n\n Idempotent: closing a closed handle returns without doing\n anything, and no ``close()`` returns success unless the\n teardown has run -- when several race, one of them runs it and\n the others return once it is done.\n\n When called from inside one of this handle\047s own\n ``error_handler`` / ``connection_listener`` callbacks, it\n never waits -- while the callback runs, that thread delivers\n nothing, including whatever a wait would need. It closes\n immediately when nothing is using the handle; it refuses when\n leases or calls are outstanding (close from another thread to\n wait for the drain); and when a concurrent ``close()`` is\n already running it returns without waiting, possibly before\n that close finishes -- the handle only moves toward closed,\n never back to open.\n ");
static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_21close = {"close", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_21close, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_20close};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_21close(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_timeout = 0;
#if !CYTHON_VECTORCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("close (wrapper)", 0);
#if !CYTHON_VECTORCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_timeout,0};
PyObject* values[1] = {0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 10066, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 10066, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "close", 0) < (0)) __PYX_ERR(0, 10066, __pyx_L3_error)
if (!values[0]) values[0] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__37);
} else {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 10066, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
if (!values[0]) values[0] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__37);
}
__pyx_v_timeout = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("close", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 10066, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.QuestDB.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_20close(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self), __pyx_v_timeout);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_20close(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, PyObject *__pyx_v_timeout) {
PyObject *__pyx_r = NULL;
__pyx_t_2.__pyx_n = 1;
__pyx_t_2.timeout = __pyx_v_timeout;
__pyx_t_1 = __pyx_vtabptr_7questdb_7_client_QuestDB->close(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10066, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_1;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_1 = 0;
goto __pyx_L0;
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.QuestDB.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_CLOSE_TIMEOUT_DEFAULT); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 10066, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
__pyx_mstate_global->__pyx_k__37 = __pyx_t_17;
__Pyx_GIVEREF(__pyx_t_17);
__pyx_t_17 = 0;
__Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_CLOSE_TIMEOUT_DEFAULT); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 10066, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
{
PyObject* __pyx_temp[1] = {__pyx_t_17};
__pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 10066, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_20);
}
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
__pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_21close, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_close, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[131])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 10066, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
#endif
__Pyx_CyFunction_SetDefaultsTuple(__pyx_t_17, __pyx_t_20);
__Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_close, __pyx_t_17) < (0)) __PYX_ERR(0, 10066, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
/* … */
struct __pyx_opt_args_7questdb_7_client_7QuestDB_close {
int __pyx_n;
PyObject *timeout;
};
10067: """
10068: Close the client and its connection pool.
10069:
10070: Closing is one-way. Once a ``close()`` proceeds -- rather
10071: than being refused outright, as from inside one of the
10072: handle's own calls or callbacks -- the handle refuses new
10073: work: ``sender()``, ``reader()``, ``dataframe()``, ``query()``
10074: and the rest raise. Work already in flight drains: a call in
10075: progress runs to completion, and an outstanding lease keeps
10076: working until its holder closes it. The one exception is
10077: :meth:`PooledSender.dataframe`, which forwards to
10078: :meth:`dataframe` over a connection of its own from the pool,
10079: so a load started through a lease after ``close()`` is new work
10080: and is refused like any other. The native pool is torn down by
10081: the first ``close()`` that finds nothing using the handle, or
10082: when the handle itself is collected.
10083:
10084: Calls on the handle and on its leases are counted per OS
10085: thread. With greenlets -- gevent, eventlet, or ``greenlet``
10086: used directly -- all greenlets on one thread count as one
10087: caller, so ``close()`` is also refused while another greenlet
10088: on the same thread is suspended inside a call on the handle or
10089: on one of its leases. See :ref:`sender_threading`.
10090:
10091: ``timeout`` sets how long this call waits for that drain.
10092: Calls are the handle's own methods in progress, such as
10093: ``dataframe()`` and ``query()``; anything done through a lease
10094: counts as that lease, including a long ``lease.dataframe()``
10095: already running when ``close()`` starts.
10096:
10097: - Left out: a call in progress is waited for until it
10098: returns, and an outstanding lease for up to a minute. A long
10099: load through a lease needs a larger ``timeout``, or ``None``.
10100: - A number of seconds: calls and leases alike are waited for
10101: up to that long. ``0`` closes only if nothing is in flight.
10102: - ``None``: calls and leases alike are waited for until they
10103: are done.
10104:
10105: ``close()`` cannot interrupt a call in progress. A
10106: ``dataframe()`` reading a stream that never ends, or one
10107: waiting on the very thread that calls ``close()``, keeps it
10108: waiting until ``timeout`` runs out -- and, with no limit on
10109: calls, for ever. A lease comes back only when its holder
10110: closes it, so one held by the calling thread, or by a thread
10111: that has since finished, never will: close every lease before
10112: closing the handle.
10113:
10114: When the limit runs out, this call raises
10115: :class:`QuestDBError <questdb.QuestDBError>` with ``code`` set
10116: to ``QuestDBErrorCode.InvalidApiCall``, naming how many leases
10117: and calls are still outstanding. The handle stays closing --
10118: it never goes back to open -- and a later ``close()``, with
10119: any ``timeout``, resumes the wait and finishes the teardown
10120: once the last of them is done. Waiting for a concurrent
10121: ``close()`` on another thread to finish its teardown is
10122: limited too: a number of seconds covers that wait and the
10123: drain together; left out, that wait gets a minute of its own;
10124: ``None`` puts no limit on it.
10125:
10126: ``timeout`` covers only this waiting. The teardown then spends
10127: up to ``close_flush_timeout_millis`` (5 seconds by default)
10128: draining each sender's queue. An in-memory queue drops whatever
10129: it has not delivered by then; a disk-backed queue (``sf_dir``)
10130: keeps it for replay on restart. The drop is not reported to
10131: Python: it raises nothing and logs nothing through the
10132: ``questdb`` logger. To be sure rows have arrived, close each
10133: lease with ``close(wait=True)`` before closing the handle.
10134:
10135: While it waits, it reports what it is still waiting for
10136: through the ``questdb`` logger at ``WARNING``: every five
10137: seconds for the first minute, then once a minute.
10138:
10139: A number of seconds is a budget for the whole close,
10140: including the close a ``with`` block makes on its way out:
10141: when the most recent ``close()`` on the handle was given one,
10142: leaving the block waits only for what is left of it, and not
10143: at all once it has run out. To bound leaving a ``with`` block,
10144: call ``close(timeout=...)`` as the block's last statement.
10145: Otherwise, leaving the block closes with the limits of a
10146: ``close()`` with no arguments.
10147:
10148: Idempotent: closing a closed handle returns without doing
10149: anything, and no ``close()`` returns success unless the
10150: teardown has run -- when several race, one of them runs it and
10151: the others return once it is done.
10152:
10153: When called from inside one of this handle's own
10154: ``error_handler`` / ``connection_listener`` callbacks, it
10155: never waits -- while the callback runs, that thread delivers
10156: nothing, including whatever a wait would need. It closes
10157: immediately when nothing is using the handle; it refuses when
10158: leases or calls are outstanding (close from another thread to
10159: wait for the drain); and when a concurrent ``close()`` is
10160: already running it returns without waiting, possibly before
10161: that close finishes -- the handle only moves toward closed,
10162: never back to open.
10163: """
+10164: cdef questdb_db* db = NULL
__pyx_v_db = NULL;
+10165: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+10166: cdef bint closed = False
__pyx_v_closed = 0;
+10167: cdef bint locked = False
__pyx_v_locked = 0;
+10168: cdef object interrupt = None
__Pyx_INCREF(Py_None);
__pyx_v_interrupt = Py_None;
+10169: cdef bint notice = False
__pyx_v_notice = 0;
+10170: cdef size_t notice_leases = 0
__pyx_v_notice_leases = 0;
+10171: cdef size_t notice_calls = 0
__pyx_v_notice_calls = 0;
10172: cdef object lease_limit
10173: cdef object call_limit
10174: # Read before anything is published, so a bad argument changes
10175: # nothing for any other thread.
+10176: if timeout is _CLOSE_TIMEOUT_DEFAULT:
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_CLOSE_TIMEOUT_DEFAULT); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10176, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = (__pyx_v_timeout == __pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_6) { /* … */ goto __pyx_L3; }
+10177: lease_limit = _CLOSE_LEASE_WAIT_LIMIT_S
__pyx_t_1 = PyFloat_FromDouble(__pyx_v_7questdb_7_client__CLOSE_LEASE_WAIT_LIMIT_S); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10177, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_lease_limit = __pyx_t_1; __pyx_t_1 = 0;
+10178: call_limit = None
__Pyx_INCREF(Py_None);
__pyx_v_call_limit = Py_None;
+10179: elif timeout is None:
__pyx_t_6 = (__pyx_v_timeout == Py_None);
if (__pyx_t_6) {
/* … */
goto __pyx_L3;
}
+10180: lease_limit = None
__Pyx_INCREF(Py_None);
__pyx_v_lease_limit = Py_None;
+10181: call_limit = None
__Pyx_INCREF(Py_None);
__pyx_v_call_limit = Py_None;
10182: else:
+10183: lease_limit = _close_timeout_seconds(timeout)
/*else*/ {
__pyx_t_7 = __pyx_f_7questdb_7_client__close_timeout_seconds(__pyx_v_timeout); if (unlikely(__PYX_CHECK_FLOAT_EXCEPTION(__pyx_t_7, ((double)(-1.0))))) __PYX_ERR(0, 10183, __pyx_L1_error)
__pyx_t_1 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10183, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_v_lease_limit = __pyx_t_1;
__pyx_t_1 = 0;
+10184: call_limit = lease_limit
__Pyx_INCREF(__pyx_v_lease_limit);
__pyx_v_call_limit = __pyx_v_lease_limit;
}
__pyx_L3:;
10185: # A lease is returned only by the code holding it, and a lease
10186: # about to be closed looks exactly like one nobody will ever
10187: # touch again; a call runs until its work is done, and nothing
10188: # here can interrupt it. Whether either will finish is
10189: # something only the caller can know, so the caller sets the
10190: # limits: one deadline for leases and one for calls, either of
10191: # which may be absent. Each applies only while something of
10192: # its kind is outstanding, and neither count grows once the
10193: # handle is closing. Running out leaves the handle closing,
10194: # and a later close() resumes the wait.
+10195: started = time.monotonic()
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10195, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10195, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10195, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_started = __pyx_t_1; __pyx_t_1 = 0;
10196: lease_deadline = (
+10197: None if lease_limit is None else started + lease_limit)
__pyx_t_6 = (__pyx_v_lease_limit == Py_None);
if (__pyx_t_6) {
__Pyx_INCREF(Py_None);
__pyx_t_1 = Py_None;
} else {
__pyx_t_3 = __Pyx_PyNumber_Add_object_object(__pyx_v_started, __pyx_v_lease_limit); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10197, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_1 = __pyx_t_3;
__pyx_t_3 = 0;
}
__pyx_v_lease_deadline = __pyx_t_1;
__pyx_t_1 = 0;
10198: call_deadline = (
+10199: None if call_limit is None else started + call_limit)
__pyx_t_6 = (__pyx_v_call_limit == Py_None);
if (__pyx_t_6) {
__Pyx_INCREF(Py_None);
__pyx_t_1 = Py_None;
} else {
__pyx_t_3 = __Pyx_PyNumber_Add_object_object(__pyx_v_started, __pyx_v_call_limit); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10199, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_1 = __pyx_t_3;
__pyx_t_3 = 0;
}
__pyx_v_call_deadline = __pyx_t_1;
__pyx_t_1 = 0;
10200: # The lock is taken and released through `acquire` and `release`,
10201: # the RLock's own C methods, here and at every other place
10202: # `close()` and `__exit__` hold it. `Condition.__enter__` and
10203: # `__exit__` are written in Python, and a pending Ctrl-C is
10204: # raised at the start of the first Python function called after
10205: # it arrives. Raised on entry to `Condition.__exit__`, before
10206: # that releases the lock, it would leave this thread holding it,
10207: # and every other thread using the handle would block on it for
10208: # good. A blocked `acquire` can itself be interrupted; it then
10209: # raises without taking the lock, before the `try` it guards.
+10210: self._state_cond.acquire()
__pyx_t_3 = __pyx_v_self->_state_cond; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10210, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+10211: try:
/*try:*/ {
10212: # A close from inside one of this handle's own calls --
10213: # `dataframe()` reading `attrs`, a cell conversion, an
10214: # Arrow producer, a lease's own `row()` -- would wait on
10215: # the very frame that has to finish first, sit out the
10216: # whole bound, and leave the handle closing under its own
10217: # caller. Refused before `_closing` is published, so a
10218: # refused close changes nothing for any other thread.
+10219: if self._scoped_call_depth() != 0:
__pyx_t_8 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_scoped_call_depth(__pyx_v_self); if (unlikely(__pyx_t_8 == ((uintptr_t)((uintptr_t)-1L)) && PyErr_Occurred())) __PYX_ERR(0, 10219, __pyx_L5_error) __pyx_t_6 = (__pyx_t_8 != 0); if (__pyx_t_6) { /* … */ }
+10220: msg = ("close() can't be called from inside a call on "
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_close_can_t_be_called_from_insid);
__pyx_v_msg = __pyx_mstate_global->__pyx_kp_u_close_can_t_be_called_from_insid;
10221: 'this QuestDB handle. It would wait for that '
10222: 'call to finish, which cannot happen while the '
10223: 'call is waiting for close(). Close it after '
10224: 'the call returns.')
10225: # Only greenlets let another caller be suspended inside
10226: # a call on this OS thread, so only a process that has
10227: # loaded them is told about that case. gevent and
10228: # eventlet both run on `greenlet`.
+10229: if 'greenlet' in sys.modules:
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_sys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10229, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_modules); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10229, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_mstate_global->__pyx_n_u_greenlet, __pyx_t_3, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 10229, __pyx_L5_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_6) { /* … */ }
+10230: msg += (' With greenlets, every greenlet on an OS '
__pyx_t_3 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_v_msg, __pyx_mstate_global->__pyx_kp_u_With_greenlets_every_greenlet_o); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10230, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF_SET(__pyx_v_msg, ((PyObject*)__pyx_t_3)); __pyx_t_3 = 0;
10231: 'thread counts as the same caller, so this '
10232: 'is also refused while another greenlet on '
10233: 'this thread is suspended inside a call on '
10234: 'the handle or on one of its leases.')
+10235: raise QuestDBError(QuestDBErrorCode.InvalidApiCall, msg)
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10235, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10235, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10235, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_2))) {
__pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
assert(__pyx_t_1);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
__Pyx_INCREF(__pyx_t_1);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_9, __pyx_v_msg};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10235, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 10235, __pyx_L5_error)
10236: # A caller dispatching for this handle can wait on
10237: # nothing: while its callback frame is out, this thread
10238: # delivers no events and the native layer holds a borrow
10239: # on it, so anything the drain needs from this thread can
10240: # never happen. Refused before `_closing` is published,
10241: # like the depth refusal above, so a refused close changes
10242: # nothing for any other thread. With nothing outstanding
10243: # the close proceeds: there is no wait to refuse.
+10244: if (self._db != NULL
__pyx_t_10 = (__pyx_v_self->_db != NULL);
if (__pyx_t_10) {
} else {
__pyx_t_6 = __pyx_t_10;
goto __pyx_L10_bool_binop_done;
}
/* … */
if (unlikely(__pyx_t_6)) {
/* … */
}
+10245: and self._lease_uses + self._call_uses != 0
__pyx_t_10 = ((__pyx_v_self->_lease_uses + __pyx_v_self->_call_uses) != 0);
if (__pyx_t_10) {
} else {
__pyx_t_6 = __pyx_t_10;
goto __pyx_L10_bool_binop_done;
}
+10246: and _dispatching_for(self._thread_owner_token)):
__pyx_t_3 = __pyx_v_self->_thread_owner_token;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_10 = __pyx_f_7questdb_7_client__dispatching_for(__pyx_t_3);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_6 = __pyx_t_10;
__pyx_L10_bool_binop_done:;
+10247: raise QuestDBError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10247, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_9);
+10248: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10248, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10248, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_4, __pyx_mstate_global->__pyx_kp_u_close_can_t_wait_for_outstanding}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10247, __pyx_L5_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 10247, __pyx_L5_error)
10249: "close() can't wait for outstanding leases or "
10250: "calls from inside this handle's own "
10251: 'error_handler or connection_listener callback: '
10252: 'while the callback runs, this thread delivers '
10253: 'nothing, including whatever the wait needs. '
10254: 'Call close() from another thread.')
10255: # One-way from here: `_closing` is never cleared, so every
10256: # refusal it causes stays true, and the use counts only
10257: # move down -- `_begin_db_use` takes no new work once it
10258: # is set.
+10259: self._closing = True
__pyx_v_self->_closing = 1;
10260: # A number of seconds is a budget for the whole close: the
10261: # close a `with` block makes on its way out waits only for
10262: # what is left of it (see `__exit__`). Only a number sets
10263: # `call_deadline`, so the default and `None` clear the
10264: # budget, and the way out closes with the default limits.
+10265: self._close_deadline = call_deadline
__Pyx_INCREF(__pyx_v_call_deadline); __Pyx_GIVEREF(__pyx_v_call_deadline); __Pyx_GOTREF(__pyx_v_self->_close_deadline); __Pyx_DECREF(__pyx_v_self->_close_deadline); __pyx_v_self->_close_deadline = __pyx_v_call_deadline; }
10266: finally:
+10267: self._state_cond.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_9 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_9);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10267, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L6;
}
__pyx_L5_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
{
__pyx_t_9 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_9);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10267, __pyx_L14_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
}
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
goto __pyx_L1_error;
__pyx_L14_error:;
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
goto __pyx_L1_error;
}
__pyx_L6:;
}
10268: # Each wait below holds the lock only to read state and to
10269: # wait on it, and emits its progress notice with the lock
10270: # released. A notice runs the caller's logging handlers, which
10271: # are free to block or to reach this very handle from another
10272: # thread -- a handler that ingests its log lines into QuestDB
10273: # does both. While one runs, every lease return, call exit and
10274: # refusal still goes through the lock, so the drain being
10275: # reported on keeps moving.
+10276: next_notice = started + 5.0
__pyx_t_3 = __Pyx_PyFloat_AddObjC(__pyx_v_started, __pyx_mstate_global->__pyx_float_5_0, 5.0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10276, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_next_notice = __pyx_t_3; __pyx_t_3 = 0;
+10277: while True:
while (1) {
+10278: notice = False
__pyx_v_notice = 0;
10279: # Held through `acquire` and `release`, as above. Here it
10280: # also keeps Python code out of the step from claiming the
10281: # pointer to the native teardown: after the claim, the next
10282: # code to run is the `release` below and then the `try`
10283: # around `questdb_db_close`, so a Ctrl-C arriving in between
10284: # stays pending until the teardown's own `finally`, which
10285: # records the close first. A second Ctrl-C landing inside
10286: # `Condition.wait`'s own re-acquire of the lock can still
10287: # leave the lock in a bad state; nothing has been claimed
10288: # while this thread waits, so no teardown is skipped.
+10289: self._state_cond.acquire()
__pyx_t_9 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_9);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10289, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+10290: try:
/*try:*/ {
+10291: if self._db == NULL:
__pyx_t_6 = (__pyx_v_self->_db == NULL);
if (__pyx_t_6) {
/* … */
}
+10292: break
goto __pyx_L18_break;
+10293: if self._lease_uses + self._call_uses == 0:
__pyx_t_6 = ((__pyx_v_self->_lease_uses + __pyx_v_self->_call_uses) == 0);
if (__pyx_t_6) {
/* … */
}
10294: # Nothing is using the handle. The counts are read
10295: # and the pointer claimed under one hold of the
10296: # lock, which picks exactly one close() to run the
10297: # native teardown, and the pointer stays published
10298: # up to this very point -- so every borrower's
10299: # copy of it was valid for as long as the borrower
10300: # held a use.
+10301: db = self._db
__pyx_t_20 = __pyx_v_self->_db;
__pyx_v_db = __pyx_t_20;
+10302: self._db = NULL
__pyx_v_self->_db = NULL;
+10303: self._close_running = True
__pyx_v_self->_close_running = 1;
+10304: break
goto __pyx_L18_break;
+10305: deadline = None
__Pyx_INCREF(Py_None); __Pyx_XDECREF_SET(__pyx_v_deadline, Py_None);
+10306: if self._lease_uses != 0 and lease_deadline is not None:
__pyx_t_10 = (__pyx_v_self->_lease_uses != 0);
if (__pyx_t_10) {
} else {
__pyx_t_6 = __pyx_t_10;
goto __pyx_L25_bool_binop_done;
}
__pyx_t_10 = (__pyx_v_lease_deadline != Py_None);
__pyx_t_6 = __pyx_t_10;
__pyx_L25_bool_binop_done:;
if (__pyx_t_6) {
/* … */
}
+10307: deadline = lease_deadline
__Pyx_INCREF(__pyx_v_lease_deadline); __Pyx_DECREF_SET(__pyx_v_deadline, __pyx_v_lease_deadline);
+10308: if (self._call_uses != 0 and call_deadline is not None
__pyx_t_10 = (__pyx_v_self->_call_uses != 0);
if (__pyx_t_10) {
} else {
__pyx_t_6 = __pyx_t_10;
goto __pyx_L28_bool_binop_done;
}
/* … */
__pyx_t_10 = (__pyx_v_call_deadline != Py_None);
if (__pyx_t_10) {
} else {
__pyx_t_6 = __pyx_t_10;
goto __pyx_L28_bool_binop_done;
}
/* … */
if (__pyx_t_6) {
/* … */
}
+10309: and (deadline is None or call_deadline < deadline)):
__pyx_t_10 = (__pyx_v_deadline == Py_None);
if (!__pyx_t_10) {
} else {
__pyx_t_6 = __pyx_t_10;
goto __pyx_L28_bool_binop_done;
}
__pyx_t_10 = __Pyx_PyObject_CompareBoolLt_object_object(__pyx_v_call_deadline, __pyx_v_deadline, Py_LT); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 10309, __pyx_L20_error)
__pyx_t_6 = __pyx_t_10;
__pyx_L28_bool_binop_done:;
+10310: deadline = call_deadline
__Pyx_INCREF(__pyx_v_call_deadline); __Pyx_DECREF_SET(__pyx_v_deadline, __pyx_v_call_deadline);
+10311: now = time.monotonic()
__pyx_t_9 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10311, __pyx_L20_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10311, __pyx_L20_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_2))) {
__pyx_t_9 = PyMethod_GET_SELF(__pyx_t_2);
assert(__pyx_t_9);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
__Pyx_INCREF(__pyx_t_9);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10311, __pyx_L20_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_XDECREF_SET(__pyx_v_now, __pyx_t_3);
__pyx_t_3 = 0;
+10312: if deadline is not None and now >= deadline:
__pyx_t_10 = (__pyx_v_deadline != Py_None);
if (__pyx_t_10) {
} else {
__pyx_t_6 = __pyx_t_10;
goto __pyx_L33_bool_binop_done;
}
__pyx_t_10 = __Pyx_PyObject_CompareBoolGe_object_object(__pyx_v_now, __pyx_v_deadline, Py_GE); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 10312, __pyx_L20_error)
__pyx_t_6 = __pyx_t_10;
__pyx_L33_bool_binop_done:;
if (unlikely(__pyx_t_6)) {
/* … */
}
+10313: raise QuestDBError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10313, __pyx_L20_error)
__Pyx_GOTREF(__pyx_t_9);
+10314: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10314, __pyx_L20_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10314, __pyx_L20_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+10315: _close_gave_up_message(
__pyx_t_4 = __pyx_f_7questdb_7_client__close_gave_up_message(__pyx_t_7, __pyx_v_self->_lease_uses, __pyx_v_self->_call_uses); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10315, __pyx_L20_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_1, __pyx_t_4}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10313, __pyx_L20_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 10313, __pyx_L20_error)
+10316: deadline - started,
__pyx_t_4 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_deadline, __pyx_v_started); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10316, __pyx_L20_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = __Pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 10316, __pyx_L20_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
10317: self._lease_uses,
10318: self._call_uses))
10319: # Woken at whichever is sooner, the next notice or the
10320: # limit, so a limit holds whatever it is set to rather
10321: # than only at the notice cadence. A wait that runs out
10322: # with work still outstanding is reported either way.
+10323: wait_s = next_notice - now
__pyx_t_3 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_next_notice, __pyx_v_now); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10323, __pyx_L20_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_wait_s, __pyx_t_3); __pyx_t_3 = 0;
+10324: if deadline is not None and deadline - now < wait_s:
__pyx_t_10 = (__pyx_v_deadline != Py_None);
if (__pyx_t_10) {
} else {
__pyx_t_6 = __pyx_t_10;
goto __pyx_L36_bool_binop_done;
}
__pyx_t_3 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_deadline, __pyx_v_now); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10324, __pyx_L20_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_10 = __Pyx_PyObject_CompareBoolLt_object_object(__pyx_t_3, __pyx_v_wait_s, Py_LT); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 10324, __pyx_L20_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_6 = __pyx_t_10;
__pyx_L36_bool_binop_done:;
if (__pyx_t_6) {
/* … */
}
+10325: wait_s = deadline - now
__pyx_t_3 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_deadline, __pyx_v_now); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10325, __pyx_L20_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF_SET(__pyx_v_wait_s, __pyx_t_3); __pyx_t_3 = 0;
+10326: if (not self._state_cond.wait(timeout=max(wait_s, 0.0))
__pyx_t_9 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_9);
__pyx_t_7 = 0.0;
__Pyx_INCREF(__pyx_v_wait_s);
__pyx_t_4 = __pyx_v_wait_s;
__pyx_t_2 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10326, __pyx_L20_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_10 = __Pyx_PyObject_CompareBoolGt_float_object(__pyx_t_2, __pyx_t_4, Py_GT); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 10326, __pyx_L20_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_10) {
__pyx_t_2 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10326, __pyx_L20_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_1 = __pyx_t_2;
__pyx_t_2 = 0;
} else {
__Pyx_INCREF(__pyx_t_4);
__pyx_t_1 = __pyx_t_4;
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_1};
#if CYTHON_VECTORCALL
__pyx_t_4 = __pyx_mstate_global->__pyx_tuple[34];
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10326, __pyx_L20_error)
__Pyx_INCREF(__pyx_t_4);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_timeout};
__pyx_t_4 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10326, __pyx_L20_error)
__Pyx_GOTREF(__pyx_t_4);
}
#endif
__pyx_t_3 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_wait, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_4);
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10326, __pyx_L20_error)
__Pyx_GOTREF(__pyx_t_3);
}
__pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 10326, __pyx_L20_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_21 = (!__pyx_t_10);
if (__pyx_t_21) {
} else {
__pyx_t_6 = __pyx_t_21;
goto __pyx_L39_bool_binop_done;
}
/* … */
if (__pyx_t_6) {
/* … */
}
}
/* … */
{
PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_timeout};
__pyx_mstate_global->__pyx_tuple[34] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[34])) __PYX_ERR(0, 10326, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[34]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[34]);
10327: and (self._lease_uses
+10328: + self._call_uses) != 0):
__pyx_t_21 = ((__pyx_v_self->_lease_uses + __pyx_v_self->_call_uses) != 0);
__pyx_t_6 = __pyx_t_21;
__pyx_L39_bool_binop_done:;
+10329: notice = True
__pyx_v_notice = 1;
+10330: notice_leases = self._lease_uses
__pyx_t_5 = __pyx_v_self->_lease_uses;
__pyx_v_notice_leases = __pyx_t_5;
+10331: notice_calls = self._call_uses
__pyx_t_5 = __pyx_v_self->_call_uses;
__pyx_v_notice_calls = __pyx_t_5;
10332: # Every five seconds for the first minute, then
10333: # once a minute: a wait for a long load would
10334: # otherwise log a line every five seconds for as
10335: # long as the load runs.
+10336: now = time.monotonic()
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10336, __pyx_L20_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10336, __pyx_L20_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_9))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_9);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10336, __pyx_L20_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF_SET(__pyx_v_now, __pyx_t_3);
__pyx_t_3 = 0;
+10337: next_notice = now + (
__pyx_t_9 = __Pyx_PyNumber_Add_object_float(__pyx_v_now, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10337, __pyx_L20_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_next_notice, __pyx_t_9); __pyx_t_9 = 0;
+10338: 5.0 if now - started < 60.0 else 60.0)
__pyx_t_9 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_now, __pyx_v_started); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10338, __pyx_L20_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_6 = __Pyx_PyObject_CompareBoolLt_object_float(__pyx_t_9, __pyx_mstate_global->__pyx_float_60_0, Py_LT); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 10338, __pyx_L20_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (__pyx_t_6) { __Pyx_INCREF(__pyx_mstate_global->__pyx_float_5_0); __pyx_t_3 = __pyx_mstate_global->__pyx_float_5_0; } else { __Pyx_INCREF(__pyx_mstate_global->__pyx_float_60_0); __pyx_t_3 = __pyx_mstate_global->__pyx_float_60_0; }
10339: finally:
+10340: self._state_cond.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_3 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10340, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
}
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
goto __pyx_L21;
}
__pyx_L20_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_15, &__pyx_t_14);
if ( unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_19);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_14);
__pyx_t_12 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
{
__pyx_t_3 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10340, __pyx_L44_error)
__Pyx_GOTREF(__pyx_t_9);
}
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
}
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_15, __pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_ErrRestore(__pyx_t_19, __pyx_t_18, __pyx_t_17);
__pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0;
__pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_13;
goto __pyx_L1_error;
__pyx_L44_error:;
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_15, __pyx_t_14);
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0;
goto __pyx_L1_error;
}
__pyx_L18_break: {
__pyx_t_3 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10340, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
}
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
goto __pyx_L16_break;
}
__pyx_L21:;
}
+10341: if notice:
if (__pyx_v_notice) {
/* … */
}
}
__pyx_L16_break:;
10342: # Logged rather than warned, like every other
10343: # notice this client emits from a place the
10344: # caller did not ask for one: a warning turns
10345: # into an exception under `-W error`, which
10346: # would end the wait at the first notice and
10347: # hand back the wrong exception type.
+10348: logging.getLogger('questdb').warning(
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10348, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_22 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 10348, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_22);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_22))) {
__pyx_t_1 = PyMethod_GET_SELF(__pyx_t_22);
assert(__pyx_t_1);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_22);
__Pyx_INCREF(__pyx_t_1);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_22, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_mstate_global->__pyx_n_u_questdb};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_22, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10348, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__pyx_t_3 = __pyx_t_4;
__Pyx_INCREF(__pyx_t_3);
10349: 'QuestDB.close() is waiting for %d '
10350: 'outstanding lease(s) and %d in-progress '
10351: 'call(s) to finish.',
+10352: notice_leases,
__pyx_t_22 = __Pyx_PyLong_FromSize_t(__pyx_v_notice_leases); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 10352, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_22);
+10353: notice_calls)
__pyx_t_1 = __Pyx_PyLong_FromSize_t(__pyx_v_notice_calls); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10353, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = 0; { PyObject *__pyx_callargs[4] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_QuestDB_close_is_waiting_for_d_o, __pyx_t_22, __pyx_t_1}; __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_warning, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10348, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+10354: if db == NULL:
__pyx_t_6 = (__pyx_v_db == NULL);
if (__pyx_t_6) {
/* … */
}
10355: # Another close() claimed the pointer, or the handle
10356: # never opened. A caller dispatching for this handle
10357: # must not wait for the teardown to finish: the
10358: # in-flight closer joins this very thread. Returning
10359: # early is safe because closing cannot be undone --
10360: # the handle only moves toward closed.
+10361: if _dispatching_for(self._thread_owner_token):
__pyx_t_9 = __pyx_v_self->_thread_owner_token;
__Pyx_INCREF(__pyx_t_9);
__pyx_t_6 = __pyx_f_7questdb_7_client__dispatching_for(__pyx_t_9);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
if (__pyx_t_6) {
/* … */
}
+10362: return
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
10363: # A close() of this handle from a finalizer that a
10364: # garbage-collection pass runs on this thread while this
10365: # thread holds the pointer (after taking it, before
10366: # publishing the close) waits below for its own close
10367: # until its limit runs out, then raises. This is
10368: # deliberately left alone. It needs an unreachable object
10369: # whose finalizer closes this very handle, collected in a
10370: # window of a few Python operations, and it loses nothing.
10371: # The ways out are poor: returning early can report
10372: # success before the teardown has run, and a refusal needs
10373: # the tearing-down thread tracked for a case that
10374: # practically never happens.
10375: #
10376: # A number of seconds is one budget for the whole call, so
10377: # this wait gets only what the drain left of it and ends
10378: # at `call_deadline`. The default and `None` set no
10379: # budget: this wait gets a bound of its own, starting
10380: # when it does -- a minute by default, none for None.
+10381: if call_deadline is not None:
__pyx_t_6 = (__pyx_v_call_deadline != Py_None);
if (__pyx_t_6) {
/* … */
goto __pyx_L48;
}
+10382: deadline = call_deadline
__Pyx_INCREF(__pyx_v_call_deadline); __Pyx_XDECREF_SET(__pyx_v_deadline, __pyx_v_call_deadline);
10383: else:
+10384: deadline = (None if lease_limit is None
/*else*/ {
__pyx_t_6 = (__pyx_v_lease_limit == Py_None);
if (__pyx_t_6) {
__Pyx_INCREF(Py_None);
__pyx_t_9 = Py_None;
} else {
+10385: else time.monotonic() + lease_limit)
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 10385, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_22);
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10385, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_3))) {
__pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
assert(__pyx_t_1);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
__Pyx_INCREF(__pyx_t_1);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10385, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__pyx_t_3 = __Pyx_PyNumber_Add_object_object(__pyx_t_4, __pyx_v_lease_limit); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10385, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_9 = __pyx_t_3;
__pyx_t_3 = 0;
}
__Pyx_XDECREF_SET(__pyx_v_deadline, __pyx_t_9);
__pyx_t_9 = 0;
}
__pyx_L48:;
+10386: while True:
while (1) {
+10387: notice = False
__pyx_v_notice = 0;
10388: # Held through `acquire` and `release`, as above.
+10389: self._state_cond.acquire()
__pyx_t_3 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10389, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
}
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+10390: try:
/*try:*/ {
+10391: if not self._close_running:
__pyx_t_6 = (!__pyx_v_self->_close_running);
if (__pyx_t_6) {
/* … */
}
10392: # `_close_running` clearing says the close()
10393: # that claimed the pointer has finished;
10394: # `self._db` says what it did. After a
10395: # teardown the pointer stays NULL for good,
10396: # so a NULL pointer here is a close that ran.
10397: # A give-up hands the pointer back for a
10398: # later close() to claim, and returning
10399: # normally then would report a close that
10400: # did not take place.
+10401: if self._db == NULL:
__pyx_t_6 = (__pyx_v_self->_db == NULL);
if (__pyx_t_6) {
/* … */
}
+10402: return
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L53_return;
+10403: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10403, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_4);
+10404: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10404, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_22 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 10404, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_22); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_22, __pyx_mstate_global->__pyx_kp_u_close_did_not_close_the_handle_t}; __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10403, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_9); } __Pyx_Raise(__pyx_t_9, 0, 0, 0); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __PYX_ERR(0, 10403, __pyx_L54_error)
10405: 'close() did not close the handle: the '
10406: 'concurrent close() on another thread '
10407: 'that this call waited for could not '
10408: 'finish the teardown. The handle stays '
10409: 'closing; call close() again.')
+10410: wait_s = 5.0
__Pyx_INCREF(__pyx_mstate_global->__pyx_float_5_0); __Pyx_XDECREF_SET(__pyx_v_wait_s, __pyx_mstate_global->__pyx_float_5_0);
+10411: if deadline is not None:
__pyx_t_6 = (__pyx_v_deadline != Py_None);
if (__pyx_t_6) {
/* … */
}
+10412: remaining = deadline - time.monotonic()
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 10412, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_22);
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10412, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_3))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10412, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_9);
}
__pyx_t_3 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_deadline, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10412, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF_SET(__pyx_v_remaining, __pyx_t_3);
__pyx_t_3 = 0;
+10413: if remaining <= 0.0:
__pyx_t_6 = __Pyx_PyObject_CompareBoolLe_object_float(__pyx_v_remaining, __pyx_mstate_global->__pyx_float_0_0, Py_LE); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 10413, __pyx_L54_error) if (unlikely(__pyx_t_6)) { /* … */ }
+10414: raise QuestDBError(
__pyx_t_9 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10414, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_4);
+10415: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 10415, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_22); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10415, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
+10416: 'close() stopped waiting after '
__pyx_t_24 = 162;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_24 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_23[1]);
#endif
__pyx_t_11 = 0;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_11 |= __Pyx_PyUnicode_KIND_04(__pyx_t_23[1]);
#endif
__pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_23, 3, __pyx_t_24, __pyx_t_11);
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10416, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_9);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_9);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[3] = {__pyx_t_9, __pyx_t_1, __pyx_t_2};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10414, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__PYX_ERR(0, 10414, __pyx_L54_error)
+10417: f'{lease_limit:g}s for a concurrent '
__pyx_t_22 = __Pyx_PyObject_Format(__pyx_v_lease_limit, __pyx_mstate_global->__pyx_n_u_g); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 10417, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_22); __pyx_t_23[0] = __pyx_mstate_global->__pyx_kp_u_close_stopped_waiting_after; __pyx_t_23[1] = __pyx_t_22; __pyx_t_23[2] = __pyx_mstate_global->__pyx_kp_u_s_for_a_concurrent_close_on_anot;
10418: 'close() on another thread to finish '
10419: 'the teardown. The handle stays '
10420: 'closing; call close() again to '
10421: 'resume waiting.')
+10422: wait_s = min(5.0, remaining)
__Pyx_INCREF(__pyx_v_remaining); __pyx_t_3 = __pyx_v_remaining; __pyx_t_7 = 5.0; __pyx_t_2 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10422, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = __Pyx_PyObject_CompareBoolLt_object_float(__pyx_t_3, __pyx_t_2, Py_LT); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 10422, __pyx_L54_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_6) { __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = __pyx_t_3; } else { __pyx_t_2 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10422, __pyx_L54_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __pyx_t_2; __pyx_t_2 = 0; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __pyx_t_4; __Pyx_INCREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF_SET(__pyx_v_wait_s, __pyx_t_3); __pyx_t_3 = 0;
+10423: if (not self._state_cond.wait(timeout=wait_s)
__pyx_t_4 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_wait_s};
#if CYTHON_VECTORCALL
__pyx_t_2 = __pyx_mstate_global->__pyx_tuple[34];
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10423, __pyx_L54_error)
__Pyx_INCREF(__pyx_t_2);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_timeout};
__pyx_t_2 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10423, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_2);
}
#endif
__pyx_t_3 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_wait, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_2);
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10423, __pyx_L54_error)
__Pyx_GOTREF(__pyx_t_3);
}
__pyx_t_21 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_21 < 0))) __PYX_ERR(0, 10423, __pyx_L54_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_10 = (!__pyx_t_21);
if (__pyx_t_10) {
} else {
__pyx_t_6 = __pyx_t_10;
goto __pyx_L61_bool_binop_done;
}
/* … */
if (__pyx_t_6) {
/* … */
}
}
+10424: and self._close_running):
__pyx_t_6 = __pyx_v_self->_close_running;
__pyx_L61_bool_binop_done:;
+10425: notice = True
__pyx_v_notice = 1;
10426: finally:
+10427: self._state_cond.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_2 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10427, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L55;
}
__pyx_L54_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
{
__pyx_t_2 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10427, __pyx_L66_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
}
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
goto __pyx_L1_error;
__pyx_L66_error:;
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
goto __pyx_L1_error;
}
__pyx_L53_return: {
__pyx_t_19 = __pyx_r;
__pyx_r = 0;
__pyx_t_2 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10427, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_r = __pyx_t_19;
__pyx_t_19 = 0;
goto __pyx_L0;
}
__pyx_L55:;
}
+10428: if notice:
if (__pyx_v_notice) {
/* … */
}
}
+10429: logging.getLogger('questdb').warning(
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10429, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__pyx_t_22 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 10429, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_22);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_22))) {
__pyx_t_1 = PyMethod_GET_SELF(__pyx_t_22);
assert(__pyx_t_1);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_22);
__Pyx_INCREF(__pyx_t_1);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_22, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_mstate_global->__pyx_n_u_questdb};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_22, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10429, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__pyx_t_2 = __pyx_t_4;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_QuestDB_close_is_still_waiting_f};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_warning, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10429, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
10430: 'QuestDB.close() is still waiting for '
10431: 'a concurrent close() on another '
10432: 'thread to finish.')
+10433: try:
/*try:*/ {
+10434: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
10435: # `questdb_db_close` drains both the writer and reader free
10436: # lists in one shot (see `db.rs::DbInner::Drop`).
+10437: questdb_db_close(db)
questdb_db_close(__pyx_v_db);
+10438: closed = True
__pyx_v_closed = 1; }
10439: finally:
+10440: _ensure_has_gil(&gs)
/*finally:*/ {
/*normal exit:*/{
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
10441: # The close is published as finished before the callbacks
10442: # are released. Releasing them can run their finalizers
10443: # right here, on this thread: a finalizer that calls
10444: # close() on this handle, or that waits for a lock held by
10445: # a thread waiting for this close, finds the close already
10446: # finished instead of waiting for it. Nothing needs the
10447: # callbacks by now: `questdb_db_close` has joined the
10448: # dispatchers, so no callback can run any more.
10449: #
10450: # No Python code runs from the claim of the pointer to the
10451: # moment the close is published. A Ctrl-C during the native
10452: # close, which runs without the GIL, or between the claim
10453: # and it, is held as a pending signal and raised at the
10454: # first Python function called after it. `with
10455: # self._state_cond:` would be that call --
10456: # `Condition.__enter__` is written in Python -- and every
10457: # later close() would then wait for this one for good, with
10458: # the callbacks still pinned. So the lock is taken through
10459: # `acquire`, which is the RLock's own C method, and the
10460: # state is written by plain attribute assignment. A blocked
10461: # acquire can still be interrupted by a further signal; it
10462: # is retried, and the first interrupt is raised once
10463: # everything here is done.
+10464: while not locked:
while (1) {
__pyx_t_6 = (!__pyx_v_locked);
if (!__pyx_t_6) break;
+10465: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
goto __pyx_L80_try_end;
__pyx_L73_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L75_except_error:;
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_ExceptionReset(__pyx_t_19, __pyx_t_18, __pyx_t_17);
goto __pyx_L1_error;
__pyx_L74_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_ExceptionReset(__pyx_t_19, __pyx_t_18, __pyx_t_17);
__pyx_L80_try_end:;
}
}
+10466: self._state_cond.acquire()
__pyx_t_4 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10466, __pyx_L73_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+10467: locked = True
__pyx_v_locked = 1;
+10468: except BaseException as exc:
__pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_12) { __Pyx_AddTraceback("questdb._client.QuestDB.close", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_4, &__pyx_t_2) < 0) __PYX_ERR(0, 10468, __pyx_L75_except_error) __Pyx_XGOTREF(__pyx_t_3); __Pyx_XGOTREF(__pyx_t_4); __Pyx_XGOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_v_exc = __pyx_t_4; /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; goto __pyx_L87; } __pyx_L87:; } __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L74_exception_handled; } goto __pyx_L75_except_error;
+10469: if interrupt is None:
__pyx_t_6 = (__pyx_v_interrupt == Py_None);
if (__pyx_t_6) {
/* … */
}
}
+10470: interrupt = exc
__Pyx_INCREF(__pyx_v_exc); __Pyx_DECREF_SET(__pyx_v_interrupt, __pyx_v_exc);
+10471: try:
/*try:*/ {
+10472: if closed:
if (__pyx_v_closed) {
/* … */
goto __pyx_L92;
}
+10473: self._conf_str = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_conf_str); __Pyx_DECREF(__pyx_v_self->_conf_str); __pyx_v_self->_conf_str = Py_None;
10474: else:
10475: # The native close did not run, so the pointer
10476: # goes back for a later close() to claim. The
10477: # handle stays closing either way.
+10478: self._db = db
/*else*/ {
__pyx_v_self->_db = __pyx_v_db;
}
__pyx_L92:;
+10479: self._close_running = False
__pyx_v_self->_close_running = 0;
10480: # The first Python code here, so a pending interrupt
10481: # fires in it before anyone is woken. The interrupt
10482: # has been taken by then, and a second call wakes the
10483: # waiters; one that is still not woken rechecks within
10484: # five seconds.
+10485: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
goto __pyx_L98_try_end;
__pyx_L93_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L95_except_error:;
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
goto __pyx_L90_error;
__pyx_L94_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__pyx_L98_try_end:;
}
}
+10486: self._state_cond.notify_all()
__pyx_t_4 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_notify_all, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10486, __pyx_L93_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+10487: except BaseException as exc:
__pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_12) { __Pyx_AddTraceback("questdb._client.QuestDB.close", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 10487, __pyx_L95_except_error) __Pyx_XGOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_t_4); __Pyx_XGOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_v_exc = __pyx_t_4; /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; goto __pyx_L105; } __pyx_L104_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_ExceptionSwap(&__pyx_t_25, &__pyx_t_26, &__pyx_t_27); if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16); __Pyx_XGOTREF(__pyx_t_14); __Pyx_XGOTREF(__pyx_t_15); __Pyx_XGOTREF(__pyx_t_16); __Pyx_XGOTREF(__pyx_t_25); __Pyx_XGOTREF(__pyx_t_26); __Pyx_XGOTREF(__pyx_t_27); __pyx_t_12 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_13 = __pyx_filename; { __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; } __Pyx_XGIVEREF(__pyx_t_25); __Pyx_XGIVEREF(__pyx_t_26); __Pyx_XGIVEREF(__pyx_t_27); __Pyx_ExceptionReset(__pyx_t_25, __pyx_t_26, __pyx_t_27); __Pyx_XGIVEREF(__pyx_t_14); __Pyx_XGIVEREF(__pyx_t_15); __Pyx_XGIVEREF(__pyx_t_16); __Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16); __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_13; goto __pyx_L95_except_error; } __pyx_L105:; } __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L94_exception_handled; } goto __pyx_L95_except_error;
+10488: if interrupt is None:
__pyx_t_6 = (__pyx_v_interrupt == Py_None);
if (__pyx_t_6) {
/* … */
}
+10489: interrupt = exc
__Pyx_INCREF(__pyx_v_exc); __Pyx_DECREF_SET(__pyx_v_interrupt, __pyx_v_exc);
+10490: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
goto __pyx_L114_try_end;
__pyx_L107_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L109_except_error:;
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_15, __pyx_t_14);
goto __pyx_L104_error;
__pyx_L108_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_15, __pyx_t_14);
__pyx_L114_try_end:;
}
}
+10491: self._state_cond.notify_all()
__pyx_t_1 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL};
__pyx_t_22 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_notify_all, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 10491, __pyx_L107_error)
__Pyx_GOTREF(__pyx_t_22);
}
__Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
+10492: except BaseException:
__pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_12) { __Pyx_ErrRestore(0,0,0); goto __pyx_L108_exception_handled; } goto __pyx_L109_except_error;
10493: pass
10494: finally:
+10495: self._state_cond.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_4 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10495, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
__pyx_t_4 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_4);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10495, __pyx_L123_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+10496: if closed:
if (__pyx_v_closed) {
/* … */
}
goto __pyx_L91;
}
__pyx_L90_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_27 = 0; __pyx_t_26 = 0; __pyx_t_25 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_ExceptionSwap(&__pyx_t_27, &__pyx_t_26, &__pyx_t_25);
if ( unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_19);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_27);
__Pyx_XGOTREF(__pyx_t_26);
__Pyx_XGOTREF(__pyx_t_25);
__pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
{
/* … */
if (__pyx_v_closed) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_27);
__Pyx_XGIVEREF(__pyx_t_26);
__Pyx_XGIVEREF(__pyx_t_25);
__Pyx_ExceptionReset(__pyx_t_27, __pyx_t_26, __pyx_t_25);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_ErrRestore(__pyx_t_19, __pyx_t_18, __pyx_t_17);
__pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_27 = 0; __pyx_t_26 = 0; __pyx_t_25 = 0;
__pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
goto __pyx_L1_error;
__pyx_L123_error:;
__Pyx_XGIVEREF(__pyx_t_27);
__Pyx_XGIVEREF(__pyx_t_26);
__Pyx_XGIVEREF(__pyx_t_25);
__Pyx_ExceptionReset(__pyx_t_27, __pyx_t_26, __pyx_t_25);
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__pyx_t_27 = 0; __pyx_t_26 = 0; __pyx_t_25 = 0;
goto __pyx_L1_error;
}
__pyx_L91:;
}
+10497: _release_callback_refs(self._cb_refs_key)
__pyx_t_3 = __pyx_f_7questdb_7_client__release_callback_refs(__pyx_v_self->_cb_refs_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10497, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* … */ __pyx_t_3 = __pyx_f_7questdb_7_client__release_callback_refs(__pyx_v_self->_cb_refs_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10497, __pyx_L123_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+10498: self._cb_refs_key = 0
__pyx_v_self->_cb_refs_key = 0;
/* … */
__pyx_v_self->_cb_refs_key = 0;
+10499: self._dispatch_context = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_dispatch_context); __Pyx_DECREF(__pyx_v_self->_dispatch_context); __pyx_v_self->_dispatch_context = Py_None; /* … */ __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_dispatch_context); __Pyx_DECREF(__pyx_v_self->_dispatch_context); __pyx_v_self->_dispatch_context = Py_None;
+10500: self._error_handler = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_error_handler); __Pyx_DECREF(__pyx_v_self->_error_handler); __pyx_v_self->_error_handler = Py_None; /* … */ __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_error_handler); __Pyx_DECREF(__pyx_v_self->_error_handler); __pyx_v_self->_error_handler = Py_None;
+10501: self._connection_listener = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_connection_listener); __Pyx_DECREF(__pyx_v_self->_connection_listener); __pyx_v_self->_connection_listener = Py_None; /* … */ __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_connection_listener); __Pyx_DECREF(__pyx_v_self->_connection_listener); __pyx_v_self->_connection_listener = Py_None;
+10502: if interrupt is not None:
__pyx_t_6 = (__pyx_v_interrupt != Py_None);
if (unlikely(__pyx_t_6)) {
/* … */
}
goto __pyx_L70;
}
__pyx_L70:;
}
+10503: raise interrupt
__Pyx_Raise(__pyx_v_interrupt, 0, 0, 0); __PYX_ERR(0, 10503, __pyx_L1_error)
10504:
+10505: def __exit__(self, exc_type, exc_val, exc_tb):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_23__exit__(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_7QuestDB_22__exit__, "\n Close the handle at the end of a ``with`` block.\n\n When the most recent :meth:`close` on the handle was given a\n number of seconds, this close waits only for what is left of\n that budget; otherwise it closes with the limits of a\n :meth:`close` with no arguments.\n\n Leaving the block on an exception still closes, but a close\n that cannot finish is reported through the ``questdb`` logger\n instead of raised: the frames unwinding here are often the\n ones holding the leases the close is waiting for, so raising\n would replace the exception being reported with a complaint\n that follows from it. Leaving the block normally raises as\n :meth:`close` does -- a lease left open there is a leak worth\n hearing about.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_23__exit__ = {"__exit__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_23__exit__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_22__exit__}; static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_23__exit__(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_exc_type = 0; CYTHON_UNUSED PyObject *__pyx_v_exc_val = 0; CYTHON_UNUSED PyObject *__pyx_v_exc_tb = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__exit__ (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_exc_type,&__pyx_mstate_global->__pyx_n_u_exc_val,&__pyx_mstate_global->__pyx_n_u_exc_tb,0}; PyObject* values[3] = {0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 10505, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 3: values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 10505, __pyx_L3_error) CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 10505, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 10505, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__exit__", 0) < (0)) __PYX_ERR(0, 10505, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 3; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, i); __PYX_ERR(0, 10505, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 10505, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 10505, __pyx_L3_error) values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 10505, __pyx_L3_error) } __pyx_v_exc_type = values[0]; __pyx_v_exc_val = values[1]; __pyx_v_exc_tb = values[2]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 10505, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.QuestDB.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_22__exit__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self), __pyx_v_exc_type, __pyx_v_exc_val, __pyx_v_exc_tb); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_22__exit__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, PyObject *__pyx_v_exc_type, CYTHON_UNUSED PyObject *__pyx_v_exc_val, CYTHON_UNUSED PyObject *__pyx_v_exc_tb) { PyObject *__pyx_v_deadline = NULL; PyObject *__pyx_v_timeout = NULL; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_13); __Pyx_XDECREF(__pyx_t_14); __Pyx_XDECREF(__pyx_t_15); __Pyx_XDECREF(__pyx_t_16); __Pyx_XDECREF(__pyx_t_17); __Pyx_AddTraceback("questdb._client.QuestDB.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_deadline); __Pyx_XDECREF(__pyx_v_timeout); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_23__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB___exit, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[132])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 10505, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_exit, __pyx_t_17) < (0)) __PYX_ERR(0, 10505, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
10506: """
10507: Close the handle at the end of a ``with`` block.
10508:
10509: When the most recent :meth:`close` on the handle was given a
10510: number of seconds, this close waits only for what is left of
10511: that budget; otherwise it closes with the limits of a
10512: :meth:`close` with no arguments.
10513:
10514: Leaving the block on an exception still closes, but a close
10515: that cannot finish is reported through the ``questdb`` logger
10516: instead of raised: the frames unwinding here are often the
10517: ones holding the leases the close is waiting for, so raising
10518: would replace the exception being reported with a complaint
10519: that follows from it. Leaving the block normally raises as
10520: :meth:`close` does -- a lease left open there is a leak worth
10521: hearing about.
10522: """
10523: # Held through `acquire` and `release`, as in `close()`.
+10524: self._state_cond.acquire()
__pyx_t_2 = __pyx_v_self->_state_cond; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10524, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+10525: try:
/*try:*/ {
+10526: deadline = self._close_deadline
__pyx_t_1 = __pyx_v_self->_close_deadline;
__Pyx_INCREF(__pyx_t_1);
__pyx_v_deadline = __pyx_t_1;
__pyx_t_1 = 0;
}
10527: finally:
+10528: self._state_cond.release()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_2 = __pyx_v_self->_state_cond;
__Pyx_INCREF(__pyx_t_2);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10528, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L5;
}
__pyx_L5:;
}
+10529: if deadline is None:
__pyx_t_4 = (__pyx_v_deadline == Py_None);
if (__pyx_t_4) {
/* … */
goto __pyx_L6;
}
+10530: timeout = _CLOSE_TIMEOUT_DEFAULT
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_CLOSE_TIMEOUT_DEFAULT); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10530, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_timeout = __pyx_t_1; __pyx_t_1 = 0;
10531: else:
+10532: timeout = max(deadline - time.monotonic(), 0.0)
/*else*/ {
__pyx_t_5 = 0.0;
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 10532, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10532, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_t_3 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_7))) {
__pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7);
assert(__pyx_t_2);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
__Pyx_INCREF(__pyx_t_2);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
__pyx_t_3 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10532, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_t_7 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_deadline, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10532, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_2 = PyFloat_FromDouble(__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10532, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_4 = __Pyx_PyObject_CompareBoolGt_float_object(__pyx_t_2, __pyx_t_7, Py_GT); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 10532, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_4) {
__pyx_t_2 = PyFloat_FromDouble(__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10532, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_1 = __pyx_t_2;
__pyx_t_2 = 0;
} else {
__Pyx_INCREF(__pyx_t_7);
__pyx_t_1 = __pyx_t_7;
}
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_7 = __pyx_t_1;
__Pyx_INCREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_v_timeout = __pyx_t_7;
__pyx_t_7 = 0;
}
__pyx_L6:;
+10533: if exc_type is None:
__pyx_t_4 = (__pyx_v_exc_type == Py_None);
if (__pyx_t_4) {
/* … */
}
+10534: self.close(timeout)
__pyx_t_8.__pyx_n = 1;
__pyx_t_8.timeout = __pyx_v_timeout;
__pyx_t_7 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0, &__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10534, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+10535: return
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+10536: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
goto __pyx_L13_try_end;
__pyx_L8_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
__pyx_L10_except_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
goto __pyx_L1_error;
__pyx_L9_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__pyx_L13_try_end:;
}
+10537: self.close(timeout)
__pyx_t_8.__pyx_n = 1;
__pyx_t_8.timeout = __pyx_v_timeout;
__pyx_t_7 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0, &__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10537, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+10538: except QuestDBError:
__Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_1, &__pyx_t_2); __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 10538, __pyx_L10_except_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_12 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_7, __pyx_t_6); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_ErrRestore(__pyx_t_7, __pyx_t_1, __pyx_t_2); __pyx_t_7 = 0; __pyx_t_1 = 0; __pyx_t_2 = 0; if (__pyx_t_12) { __Pyx_AddTraceback("questdb._client.QuestDB.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(0, 10538, __pyx_L10_except_error) __Pyx_XGOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_7);
+10539: logging.getLogger('questdb').exception(
__pyx_t_15 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 10539, __pyx_L10_except_error)
__Pyx_GOTREF(__pyx_t_16);
__pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 10539, __pyx_L10_except_error)
__Pyx_GOTREF(__pyx_t_17);
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
__pyx_t_3 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_17))) {
__pyx_t_15 = PyMethod_GET_SELF(__pyx_t_17);
assert(__pyx_t_15);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_17);
__Pyx_INCREF(__pyx_t_15);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_17, __pyx__function);
__pyx_t_3 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_mstate_global->__pyx_n_u_questdb};
__pyx_t_14 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 10539, __pyx_L10_except_error)
__Pyx_GOTREF(__pyx_t_14);
}
__pyx_t_13 = __pyx_t_14;
__Pyx_INCREF(__pyx_t_13);
__pyx_t_3 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_mstate_global->__pyx_kp_u_QuestDB_close_could_not_finish_w};
__pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_exception, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 10539, __pyx_L10_except_error)
__Pyx_GOTREF(__pyx_t_6);
}
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L9_exception_handled;
}
goto __pyx_L10_except_error;
10540: 'QuestDB.close() could not finish while leaving a '
10541: '`with` block that was already raising. The handle '
10542: 'stays closing; the original exception follows.')
10543:
+10544: def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_7QuestDB_25__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_7QuestDB_25__dealloc__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_pf_7questdb_7_client_7QuestDB_24__dealloc__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
}
static void __pyx_pf_7questdb_7_client_7QuestDB_24__dealloc__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
struct questdb_db *__pyx_v_db;
PyThreadState *__pyx_v_gs;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_WriteUnraisable("questdb._client.QuestDB.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
10545: cdef questdb_db* db
+10546: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+10547: if self._db != NULL:
__pyx_t_1 = (__pyx_v_self->_db != NULL);
if (__pyx_t_1) {
/* … */
}
+10548: db = self._db
__pyx_t_2 = __pyx_v_self->_db;
__pyx_v_db = __pyx_t_2;
+10549: self._db = NULL
__pyx_v_self->_db = NULL;
+10550: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+10551: questdb_db_close(db)
questdb_db_close(__pyx_v_db);
+10552: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+10553: _release_callback_refs(self._cb_refs_key)
__pyx_t_3 = __pyx_f_7questdb_7_client__release_callback_refs(__pyx_v_self->_cb_refs_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10553, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+10554: self._cb_refs_key = 0
__pyx_v_self->_cb_refs_key = 0;
10555:
10556:
+10557: @cython.no_gc_clear
struct __pyx_vtabstruct_7questdb_7_client_Sender {
__pyx_t_7questdb_7_client_void_int (*_set_sender_fields)(struct __pyx_obj_7questdb_7_client_Sender *, struct qdb_pystr_buf *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *);
PyObject *(*_new_buffer_for_sender)(struct __pyx_obj_7questdb_7_client_Sender *);
PyObject *(*flush)(struct __pyx_obj_7questdb_7_client_Sender *, int __pyx_skip_dispatch, struct __pyx_opt_args_7questdb_7_client_6Sender_flush *__pyx_optional_args);
__pyx_t_7questdb_7_client_void_int (*_flush_c_buf)(struct __pyx_obj_7questdb_7_client_Sender *, struct line_sender_buffer *, int, int, int);
__pyx_t_7questdb_7_client_void_int (*_check_not_in_own_callback)(struct __pyx_obj_7questdb_7_client_Sender *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_check_qwp_ws)(struct __pyx_obj_7questdb_7_client_Sender *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_check_buffer_protocol)(struct __pyx_obj_7questdb_7_client_Sender *, struct __pyx_obj_7questdb_7_client_Buffer *);
PyObject *(*_close)(struct __pyx_obj_7questdb_7_client_Sender *);
PyObject *(*close)(struct __pyx_obj_7questdb_7_client_Sender *, int __pyx_skip_dispatch, struct __pyx_opt_args_7questdb_7_client_6Sender_close *__pyx_optional_args);
};
static struct __pyx_vtabstruct_7questdb_7_client_Sender *__pyx_vtabptr_7questdb_7_client_Sender;
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Sender__new_buffer_for_sender(struct __pyx_obj_7questdb_7_client_Sender *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(struct __pyx_obj_7questdb_7_client_Sender *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(struct __pyx_obj_7questdb_7_client_Sender *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__check_buffer_protocol(struct __pyx_obj_7questdb_7_client_Sender *, struct __pyx_obj_7questdb_7_client_Buffer *);
10558: cdef class Sender:
10559: """
10560: Ingest data into QuestDB over a single connection.
10561:
10562: This is the connection-level API: one sender drives exactly one
10563: connection (ILP/HTTP, ILP/TCP, QWP/UDP, or a single QWP/WebSocket
10564: connection) and carries the point-to-point capabilities the
10565: deployment-level handle does not: HTTP transactions, UDP datagrams,
10566: and manual ws progress and buffer control. For pooled ingestion and
10567: queries, prefer :func:`questdb.connect`.
10568:
10569: See the :ref:`sender` documentation for more information.
10570: """
10571:
10572: # We need the Buffer held by a Sender can hold a weakref to its Sender.
10573: # This avoids a circular reference that requires the GC to clean up.
10574: cdef object __weakref__
10575:
10576: cdef line_sender_protocol _c_protocol
10577: cdef line_sender_opts* _opts
10578: cdef line_sender* _impl
10579: cdef Buffer _buffer
10580: cdef object _thread_owner_token
10581: cdef object _dispatch_context
10582: cdef object _error_handler
10583: cdef object _connection_listener
10584: cdef auto_flush_mode_t _auto_flush_mode
10585: cdef bint _auto_flush_bytes_dynamic
10586: cdef int64_t* _last_flush_ms
10587: cdef size_t _init_buf_size
10588: cdef bint _in_txn
10589: cdef int64_t _slot_id
10590: # A clone of the fully-configured opts for QWP/WebSocket senders, retained
10591: # so dataframe() can open a poolless direct columnar connection per call
10592: # (carrying auth/TLS). NULL for other protocols.
10593: cdef line_sender_opts* _qwp_ws_opts
10594: cdef size_t _cb_refs_key
10595:
+10596: cdef void_int _set_sender_fields(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__set_sender_fields(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_protocol, PyObject *__pyx_v_bind_interface, PyObject *__pyx_v_username, PyObject *__pyx_v_password, PyObject *__pyx_v_token, PyObject *__pyx_v_token_x, PyObject *__pyx_v_token_y, PyObject *__pyx_v_auth_timeout, PyObject *__pyx_v_tls_verify, PyObject *__pyx_v_tls_ca, PyObject *__pyx_v_tls_roots, PyObject *__pyx_v_tls_roots_password, PyObject *__pyx_v_max_buf_size, PyObject *__pyx_v_retry_timeout, PyObject *__pyx_v_retry_max_backoff, PyObject *__pyx_v_request_min_throughput, PyObject *__pyx_v_request_timeout, PyObject *__pyx_v_auto_flush, PyObject *__pyx_v_auto_flush_rows, PyObject *__pyx_v_auto_flush_bytes, PyObject *__pyx_v_auto_flush_interval, PyObject *__pyx_v_max_datagram_size, PyObject *__pyx_v_multicast_ttl, PyObject *__pyx_v_protocol_version, PyObject *__pyx_v_qwp_ws_progress, PyObject *__pyx_v_error_handler, PyObject *__pyx_v_connection_listener, PyObject *__pyx_v_connection_event_inbox_capacity, PyObject *__pyx_v_init_buf_size, PyObject *__pyx_v_max_name_len) {
struct line_sender_error *__pyx_v_err;
PyObject *__pyx_v_user_agent = 0;
struct line_sender_utf8 __pyx_v_c_user_agent;
struct line_sender_utf8 __pyx_v_c_bind_interface;
struct line_sender_utf8 __pyx_v_c_username;
struct line_sender_utf8 __pyx_v_c_password;
struct line_sender_utf8 __pyx_v_c_token;
struct line_sender_utf8 __pyx_v_c_token_x;
struct line_sender_utf8 __pyx_v_c_token_y;
uint64_t __pyx_v_c_auth_timeout;
int __pyx_v_c_tls_verify;
enum line_sender_ca __pyx_v_c_tls_ca;
struct line_sender_utf8 __pyx_v_c_tls_roots;
struct line_sender_utf8 __pyx_v_c_tls_roots_password;
uint64_t __pyx_v_c_max_buf_size;
uint64_t __pyx_v_c_retry_timeout;
uint64_t __pyx_v_c_retry_max_backoff;
uint64_t __pyx_v_c_request_min_throughput;
uint64_t __pyx_v_c_request_timeout;
size_t __pyx_v_c_max_name_len;
size_t __pyx_v_c_max_datagram_size;
uint32_t __pyx_v_c_multicast_ttl;
enum line_sender_qwpws_progress __pyx_v_c_qwp_ws_progress;
__pyx_t_7questdb_7_client_void_int __pyx_r;
__Pyx_INCREF(__pyx_v_tls_roots);
__Pyx_INCREF(__pyx_v_auto_flush_bytes);
__Pyx_INCREF(__pyx_v_error_handler);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_18);
__Pyx_XDECREF(__pyx_t_19);
__Pyx_XDECREF(__pyx_t_20);
__Pyx_XDECREF(__pyx_t_21);
__Pyx_AddTraceback("questdb._client.Sender._set_sender_fields", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_user_agent);
__Pyx_XDECREF(__pyx_v_tls_roots);
__Pyx_XDECREF(__pyx_v_auto_flush_bytes);
__Pyx_XDECREF(__pyx_v_error_handler);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
10597: self,
10598: qdb_pystr_buf* b,
10599: object protocol,
10600: str bind_interface,
10601: str username,
10602: str password,
10603: str token,
10604: str token_x,
10605: str token_y,
10606: object auth_timeout,
10607: object tls_verify,
10608: object tls_ca,
10609: object tls_roots,
10610: object tls_roots_password,
10611: object max_buf_size,
10612: object retry_timeout,
10613: object retry_max_backoff,
10614: object request_min_throughput,
10615: object request_timeout,
10616: object auto_flush,
10617: object auto_flush_rows,
10618: object auto_flush_bytes,
10619: object auto_flush_interval,
10620: object max_datagram_size,
10621: object multicast_ttl,
10622: object protocol_version,
10623: object qwp_ws_progress,
10624: object error_handler,
10625: object connection_listener,
10626: object connection_event_inbox_capacity,
10627: object init_buf_size,
10628: object max_name_len) except -1:
10629: """
10630: Set optional parameters for the sender.
10631: """
+10632: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+10633: cdef str user_agent = 'questdb/python/' + VERSION
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_VERSION); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10633, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Add(__pyx_mstate_global->__pyx_kp_u_questdb_python, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10633, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_2))) __PYX_ERR(0, 10633, __pyx_L1_error) __pyx_v_user_agent = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
10634: cdef line_sender_utf8 c_user_agent
10635: cdef line_sender_utf8 c_bind_interface
10636: cdef line_sender_utf8 c_username
10637: cdef line_sender_utf8 c_password
10638: cdef line_sender_utf8 c_token
10639: cdef line_sender_utf8 c_token_x
10640: cdef line_sender_utf8 c_token_y
10641: cdef uint64_t c_auth_timeout
10642: cdef bint c_tls_verify
10643: cdef line_sender_ca c_tls_ca
10644: cdef line_sender_utf8 c_tls_roots
10645: cdef line_sender_utf8 c_tls_roots_password
10646: cdef uint64_t c_max_buf_size
10647: cdef uint64_t c_retry_timeout
10648: cdef uint64_t c_retry_max_backoff
10649: cdef uint64_t c_request_min_throughput
10650: cdef uint64_t c_request_timeout
10651: cdef size_t c_max_name_len
+10652: cdef size_t c_max_datagram_size = 0
__pyx_v_c_max_datagram_size = 0;
+10653: cdef uint32_t c_multicast_ttl = 0
__pyx_v_c_multicast_ttl = 0;
10654: cdef line_sender_qwpws_progress c_qwp_ws_progress
10655:
+10656: self._c_protocol = protocol.c_value
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_protocol, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10656, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = ((enum line_sender_protocol)__Pyx_PyLong_As_enum__line_sender_protocol(__pyx_t_2)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10656, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_self->_c_protocol = __pyx_t_3;
10657:
10658: # It's OK to override this setting.
+10659: str_to_utf8(b, <PyObject*>user_agent, &c_user_agent)
__pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_user_agent), (&__pyx_v_c_user_agent)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10659, __pyx_L1_error)
+10660: if not line_sender_opts_user_agent(self._opts, c_user_agent, &err):
__pyx_t_5 = (!line_sender_opts_user_agent(__pyx_v_self->_opts, __pyx_v_c_user_agent, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+10661: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10661, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 10661, __pyx_L1_error)
10662:
+10663: if bind_interface is not None:
__pyx_t_5 = (__pyx_v_bind_interface != ((PyObject*)Py_None));
if (__pyx_t_5) {
/* … */
}
+10664: str_to_utf8(b, <PyObject*>bind_interface, &c_bind_interface)
__pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_bind_interface), (&__pyx_v_c_bind_interface)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10664, __pyx_L1_error)
+10665: if not line_sender_opts_bind_interface(
__pyx_t_5 = (!line_sender_opts_bind_interface(__pyx_v_self->_opts, __pyx_v_c_bind_interface, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
10666: self._opts, c_bind_interface, &err):
+10667: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 10667, __pyx_L1_error)
10668:
+10669: if max_datagram_size is not None:
__pyx_t_5 = (__pyx_v_max_datagram_size != Py_None);
if (__pyx_t_5) {
/* … */
}
+10670: if not _is_qwp_udp_protocol(self._c_protocol):
__pyx_t_5 = __pyx_f_7questdb_7_client__is_qwp_udp_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10670, __pyx_L1_error) __pyx_t_6 = (!__pyx_t_5); if (unlikely(__pyx_t_6)) { /* … */ }
+10671: raise QuestDBError(
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10671, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
+10672: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10672, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10672, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_9, __pyx_mstate_global->__pyx_kp_u_max_datagram_size_is_only_suppo}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10671, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 10671, __pyx_L1_error)
10673: '"max_datagram_size" is only supported for QWP/UDP senders.')
+10674: if not isinstance(max_datagram_size, int) or isinstance(max_datagram_size, bool):
__pyx_t_5 = PyLong_Check(__pyx_v_max_datagram_size); __pyx_t_11 = (!__pyx_t_5); if (!__pyx_t_11) { } else { __pyx_t_6 = __pyx_t_11; goto __pyx_L9_bool_binop_done; } __pyx_t_11 = __Pyx_TypeCheck(__pyx_v_max_datagram_size, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); __pyx_t_6 = __pyx_t_11; __pyx_L9_bool_binop_done:; if (unlikely(__pyx_t_6)) { /* … */ }
+10675: raise TypeError(
__pyx_t_7 = NULL;
+10676: '"max_datagram_size" must be a positive int, '
__pyx_t_9 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_max_datagram_size_must_be_a_pos, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10676, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_9}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10675, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 10675, __pyx_L1_error)
+10677: f'not {_fqn(type(max_datagram_size))}')
__pyx_t_9 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_max_datagram_size)))); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+10678: if max_datagram_size <= 0 or max_datagram_size > 65507:
__pyx_t_11 = __Pyx_PyObject_CompareBoolLe_object_int(__pyx_v_max_datagram_size, __pyx_mstate_global->__pyx_int_0, Py_LE); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10678, __pyx_L1_error) if (!__pyx_t_11) { } else { __pyx_t_6 = __pyx_t_11; goto __pyx_L12_bool_binop_done; } __pyx_t_11 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_max_datagram_size, __pyx_mstate_global->__pyx_int_65507, Py_GT); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10678, __pyx_L1_error) __pyx_t_6 = __pyx_t_11; __pyx_L12_bool_binop_done:; if (unlikely(__pyx_t_6)) { /* … */ }
+10679: raise ValueError(
__pyx_t_9 = NULL;
+10680: '"max_datagram_size" must be an int between 1 and 65507, '
__pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_max_datagram_size_must_be_an_in, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10680, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_1}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10679, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 10679, __pyx_L1_error)
+10681: f'not {max_datagram_size!r}')
__pyx_t_7 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_max_datagram_size), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10681, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7);
+10682: c_max_datagram_size = max_datagram_size
__pyx_t_10 = __Pyx_PyLong_As_size_t(__pyx_v_max_datagram_size); if (unlikely((__pyx_t_10 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 10682, __pyx_L1_error) __pyx_v_c_max_datagram_size = __pyx_t_10;
+10683: if not line_sender_opts_max_datagram_size(
__pyx_t_6 = (!line_sender_opts_max_datagram_size(__pyx_v_self->_opts, __pyx_v_c_max_datagram_size, (&__pyx_v_err)));
if (unlikely(__pyx_t_6)) {
/* … */
}
10684: self._opts, c_max_datagram_size, &err):
+10685: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10685, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 10685, __pyx_L1_error)
10686:
+10687: if multicast_ttl is not None:
__pyx_t_6 = (__pyx_v_multicast_ttl != Py_None);
if (__pyx_t_6) {
/* … */
}
+10688: if not _is_qwp_udp_protocol(self._c_protocol):
__pyx_t_6 = __pyx_f_7questdb_7_client__is_qwp_udp_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10688, __pyx_L1_error) __pyx_t_11 = (!__pyx_t_6); if (unlikely(__pyx_t_11)) { /* … */ }
+10689: raise QuestDBError(
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10689, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
+10690: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10690, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10690, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_9); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_9, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_8, __pyx_mstate_global->__pyx_kp_u_multicast_ttl_is_only_supported}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 10689, __pyx_L1_error)
10691: '"multicast_ttl" is only supported for QWP/UDP senders.')
+10692: if not isinstance(multicast_ttl, int) or isinstance(multicast_ttl, bool):
__pyx_t_6 = PyLong_Check(__pyx_v_multicast_ttl); __pyx_t_5 = (!__pyx_t_6); if (!__pyx_t_5) { } else { __pyx_t_11 = __pyx_t_5; goto __pyx_L18_bool_binop_done; } __pyx_t_5 = __Pyx_TypeCheck(__pyx_v_multicast_ttl, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); __pyx_t_11 = __pyx_t_5; __pyx_L18_bool_binop_done:; if (unlikely(__pyx_t_11)) { /* … */ }
+10693: raise TypeError(
__pyx_t_9 = NULL;
+10694: '"multicast_ttl" must be an int (0-255), '
__pyx_t_8 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_multicast_ttl_must_be_an_int_0, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_8}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 10693, __pyx_L1_error)
+10695: f'not {_fqn(type(multicast_ttl))}')
__pyx_t_8 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_multicast_ttl)))); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10695, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10695, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+10696: if multicast_ttl < 0 or multicast_ttl > 255:
__pyx_t_5 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_multicast_ttl, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 10696, __pyx_L1_error) if (!__pyx_t_5) { } else { __pyx_t_11 = __pyx_t_5; goto __pyx_L21_bool_binop_done; } __pyx_t_5 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_multicast_ttl, __pyx_mstate_global->__pyx_int_255, Py_GT); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 10696, __pyx_L1_error) __pyx_t_11 = __pyx_t_5; __pyx_L21_bool_binop_done:; if (unlikely(__pyx_t_11)) { /* … */ }
+10697: raise ValueError(
__pyx_t_8 = NULL;
+10698: '"multicast_ttl" must be an int (0-255), '
__pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_multicast_ttl_must_be_an_int_0, __pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10698, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_1}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10697, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 10697, __pyx_L1_error)
+10699: f'not {multicast_ttl!r}')
__pyx_t_9 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_multicast_ttl), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9);
+10700: c_multicast_ttl = multicast_ttl
__pyx_t_12 = __Pyx_PyLong_As_uint32_t(__pyx_v_multicast_ttl); if (unlikely((__pyx_t_12 == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 10700, __pyx_L1_error) __pyx_v_c_multicast_ttl = __pyx_t_12;
+10701: if not line_sender_opts_multicast_ttl(
__pyx_t_11 = (!line_sender_opts_multicast_ttl(__pyx_v_self->_opts, __pyx_v_c_multicast_ttl, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
10702: self._opts, c_multicast_ttl, &err):
+10703: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 10703, __pyx_L1_error)
10704:
+10705: if qwp_ws_progress is not None:
__pyx_t_11 = (__pyx_v_qwp_ws_progress != Py_None);
if (__pyx_t_11) {
/* … */
}
+10706: if not _is_qwp_ws_protocol(self._c_protocol):
__pyx_t_11 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10706, __pyx_L1_error) __pyx_t_5 = (!__pyx_t_11); if (unlikely(__pyx_t_5)) { /* … */ }
+10707: raise QuestDBError(
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10707, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
+10708: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10708, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10708, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_8))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_8, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_qwp_ws_progress_is_only_support}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10707, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 10707, __pyx_L1_error)
10709: '"qwp_ws_progress" is only supported for QWP/WebSocket senders.')
+10710: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
goto __pyx_L31_try_end;
__pyx_L26_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L28_except_error:;
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15);
goto __pyx_L1_error;
__pyx_L31_try_end:;
}
+10711: c_qwp_ws_progress = QwpWsProgress.parse(qwp_ws_progress).c_value
__pyx_t_8 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QwpWsProgress); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10711, __pyx_L26_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_parse); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10711, __pyx_L26_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_10 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_1))) {
__pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
assert(__pyx_t_8);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
__Pyx_INCREF(__pyx_t_8);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
__pyx_t_10 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_qwp_ws_progress};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10711, __pyx_L26_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10711, __pyx_L26_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_16 = ((enum line_sender_qwpws_progress)__Pyx_PyLong_As_enum__line_sender_qwpws_progress(__pyx_t_1)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10711, __pyx_L26_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_v_c_qwp_ws_progress = __pyx_t_16;
+10712: except ValueError:
__pyx_t_17 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_ValueError)))); if (__pyx_t_17) { __Pyx_AddTraceback("questdb._client.Sender._set_sender_fields", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_8) < 0) __PYX_ERR(0, 10712, __pyx_L28_except_error) __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_t_8);
+10713: raise QuestDBError(
__pyx_t_9 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10713, __pyx_L28_except_error)
__Pyx_GOTREF(__pyx_t_18);
+10714: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 10714, __pyx_L28_except_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 10714, __pyx_L28_except_error) __Pyx_GOTREF(__pyx_t_20); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+10715: f'"qwp_ws_progress" has invalid value: {qwp_ws_progress!r}')
__pyx_t_19 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_qwp_ws_progress), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 10715, __pyx_L28_except_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_21 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_qwp_ws_progress_has_invalid_val, __pyx_t_19); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 10715, __pyx_L28_except_error) __Pyx_GOTREF(__pyx_t_21); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_18))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_18); assert(__pyx_t_9); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_18); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_18, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_9, __pyx_t_20, __pyx_t_21}; __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_18, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10713, __pyx_L28_except_error) __Pyx_GOTREF(__pyx_t_7); } __Pyx_Raise(__pyx_t_7, 0, 0, 0); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __PYX_ERR(0, 10713, __pyx_L28_except_error) } goto __pyx_L28_except_error;
+10716: if not line_sender_opts_qwpws_progress(
__pyx_t_5 = (!line_sender_opts_qwpws_progress(__pyx_v_self->_opts, __pyx_v_c_qwp_ws_progress, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
10717: self._opts, c_qwp_ws_progress, &err):
+10718: raise c_err_to_py(err)
__pyx_t_8 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10718, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 10718, __pyx_L1_error)
10719:
+10720: if error_handler is not None and not callable(error_handler):
__pyx_t_11 = (__pyx_v_error_handler != Py_None);
if (__pyx_t_11) {
} else {
__pyx_t_5 = __pyx_t_11;
goto __pyx_L36_bool_binop_done;
}
__pyx_t_11 = __Pyx_PyCallable_Check(__pyx_v_error_handler); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 10720, __pyx_L1_error)
__pyx_t_6 = (!__pyx_t_11);
__pyx_t_5 = __pyx_t_6;
__pyx_L36_bool_binop_done:;
if (unlikely(__pyx_t_5)) {
/* … */
}
+10721: raise TypeError(
__pyx_t_2 = NULL;
+10722: '"error_handler" must be callable or None, '
__pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_error_handler_must_be_callable, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10722, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_1}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10721, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 10721, __pyx_L1_error)
+10723: f'not {_fqn(type(error_handler))}')
__pyx_t_1 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_error_handler)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10723, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10723, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+10724: if error_handler is not None and not _is_qwp_ws_protocol(self._c_protocol):
__pyx_t_6 = (__pyx_v_error_handler != Py_None);
if (__pyx_t_6) {
} else {
__pyx_t_5 = __pyx_t_6;
goto __pyx_L39_bool_binop_done;
}
__pyx_t_6 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10724, __pyx_L1_error)
__pyx_t_11 = (!__pyx_t_6);
__pyx_t_5 = __pyx_t_11;
__pyx_L39_bool_binop_done:;
if (unlikely(__pyx_t_5)) {
/* … */
}
+10725: raise QuestDBError(
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10725, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
+10726: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10726, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10726, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_1); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_18, __pyx_mstate_global->__pyx_kp_u_error_handler_is_only_supported}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10725, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 10725, __pyx_L1_error)
10727: 'error_handler is only supported for QWP/WebSocket senders.')
+10728: if connection_listener is not None and not callable(
__pyx_t_11 = (__pyx_v_connection_listener != Py_None);
if (__pyx_t_11) {
} else {
__pyx_t_5 = __pyx_t_11;
goto __pyx_L42_bool_binop_done;
}
/* … */
__pyx_t_11 = __Pyx_PyCallable_Check(__pyx_v_connection_listener); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 10728, __pyx_L1_error)
/* … */
__pyx_t_6 = (!__pyx_t_11);
__pyx_t_5 = __pyx_t_6;
__pyx_L42_bool_binop_done:;
if (unlikely(__pyx_t_5)) {
/* … */
}
10729: connection_listener):
+10730: raise TypeError(
__pyx_t_2 = NULL;
+10731: '"connection_listener" must be callable or None, '
__pyx_t_18 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_connection_listener_must_be_cal, __pyx_t_1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10731, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_18}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10730, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 10730, __pyx_L1_error)
+10732: f'not {_fqn(type(connection_listener))}')
__pyx_t_18 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_connection_listener)))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10732, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_t_18); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10732, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+10733: if connection_listener is not None and not _is_qwp_ws_protocol(
__pyx_t_6 = (__pyx_v_connection_listener != Py_None);
if (__pyx_t_6) {
} else {
__pyx_t_5 = __pyx_t_6;
goto __pyx_L45_bool_binop_done;
}
/* … */
__pyx_t_6 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10733, __pyx_L1_error)
/* … */
__pyx_t_11 = (!__pyx_t_6);
__pyx_t_5 = __pyx_t_11;
__pyx_L45_bool_binop_done:;
if (unlikely(__pyx_t_5)) {
/* … */
}
10734: self._c_protocol):
+10735: raise QuestDBError(
__pyx_t_18 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10735, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
+10736: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10736, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10736, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_18); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_18); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_18, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_connection_listener_is_only_supp}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10735, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 10735, __pyx_L1_error)
10737: 'connection_listener is only supported for QWP/WebSocket '
10738: 'senders.')
10739:
+10740: if _is_qwp_ws_protocol(self._c_protocol):
__pyx_t_5 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10740, __pyx_L1_error) if (__pyx_t_5) { /* … */ }
+10741: if error_handler is None:
__pyx_t_5 = (__pyx_v_error_handler == Py_None);
if (__pyx_t_5) {
/* … */
}
+10742: error_handler = _default_error_handler
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_default_error_handler); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10742, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF_SET(__pyx_v_error_handler, __pyx_t_8); __pyx_t_8 = 0;
+10743: self._error_handler = error_handler
__Pyx_INCREF(__pyx_v_error_handler); __Pyx_GIVEREF(__pyx_v_error_handler); __Pyx_GOTREF(__pyx_v_self->_error_handler); __Pyx_DECREF(__pyx_v_self->_error_handler); __pyx_v_self->_error_handler = __pyx_v_error_handler;
+10744: self._connection_listener = connection_listener
__Pyx_INCREF(__pyx_v_connection_listener); __Pyx_GIVEREF(__pyx_v_connection_listener); __Pyx_GOTREF(__pyx_v_self->_connection_listener); __Pyx_DECREF(__pyx_v_self->_connection_listener); __pyx_v_self->_connection_listener = __pyx_v_connection_listener;
+10745: self._dispatch_context = _new_dispatch_context(
__pyx_t_18 = ((PyObject *)__pyx_f_7questdb_7_client__new_dispatch_context(__pyx_t_8, __pyx_t_2, __pyx_t_7)); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10745, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_GIVEREF(__pyx_t_18); __Pyx_GOTREF(__pyx_v_self->_dispatch_context); __Pyx_DECREF(__pyx_v_self->_dispatch_context); __pyx_v_self->_dispatch_context = __pyx_t_18; __pyx_t_18 = 0;
+10746: self._thread_owner_token,
__pyx_t_8 = __pyx_v_self->_thread_owner_token;
__Pyx_INCREF(__pyx_t_8);
+10747: self._error_handler,
__pyx_t_2 = __pyx_v_self->_error_handler;
__Pyx_INCREF(__pyx_t_2);
+10748: self._connection_listener)
__pyx_t_7 = __pyx_v_self->_connection_listener;
__Pyx_INCREF(__pyx_t_7);
+10749: if not line_sender_opts_qwpws_error_handler(
__pyx_t_5 = (!line_sender_opts_qwpws_error_handler(__pyx_v_self->_opts, __pyx_f_7questdb_7_client__sender_error_trampoline, ((void *)__pyx_v_self->_dispatch_context), (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
10750: self._opts,
10751: _sender_error_trampoline,
10752: <void*>self._dispatch_context,
10753: &err):
+10754: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10754, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 10754, __pyx_L1_error)
+10755: if connection_listener is not None:
__pyx_t_5 = (__pyx_v_connection_listener != Py_None);
if (__pyx_t_5) {
/* … */
}
+10756: if not line_sender_opts_connection_event_handler(
__pyx_t_5 = (!line_sender_opts_connection_event_handler(__pyx_v_self->_opts, __pyx_f_7questdb_7_client__connection_event_trampoline, ((void *)__pyx_v_self->_dispatch_context), ((size_t)__pyx_t_10), (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
10757: self._opts,
10758: _connection_event_trampoline,
10759: <void*>self._dispatch_context,
+10760: <size_t>(connection_event_inbox_capacity or 0),
__pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_connection_event_inbox_capacity); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 10760, __pyx_L1_error) if (!__pyx_t_5) { } else { __pyx_t_22 = __Pyx_PyLong_As_size_t(__pyx_v_connection_event_inbox_capacity); if (unlikely((__pyx_t_22 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 10760, __pyx_L1_error) __pyx_t_10 = __pyx_t_22; goto __pyx_L52_bool_binop_done; } __pyx_t_10 = 0; __pyx_L52_bool_binop_done:;
10761: &err):
+10762: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10762, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 10762, __pyx_L1_error)
10763:
+10764: if username is not None:
__pyx_t_5 = (__pyx_v_username != ((PyObject*)Py_None));
if (__pyx_t_5) {
/* … */
}
+10765: str_to_utf8(b, <PyObject*>username, &c_username)
__pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_username), (&__pyx_v_c_username)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10765, __pyx_L1_error)
+10766: if not line_sender_opts_username(self._opts, c_username, &err):
__pyx_t_5 = (!line_sender_opts_username(__pyx_v_self->_opts, __pyx_v_c_username, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+10767: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10767, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 10767, __pyx_L1_error)
10768:
+10769: if password is not None:
__pyx_t_5 = (__pyx_v_password != ((PyObject*)Py_None));
if (__pyx_t_5) {
/* … */
}
+10770: str_to_utf8(b, <PyObject*>password, &c_password)
__pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_password), (&__pyx_v_c_password)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10770, __pyx_L1_error)
+10771: if not line_sender_opts_password(self._opts, c_password, &err):
__pyx_t_5 = (!line_sender_opts_password(__pyx_v_self->_opts, __pyx_v_c_password, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+10772: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10772, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 10772, __pyx_L1_error)
10773:
+10774: if token is not None:
__pyx_t_5 = (__pyx_v_token != ((PyObject*)Py_None));
if (__pyx_t_5) {
/* … */
}
+10775: str_to_utf8(b, <PyObject*>token, &c_token)
__pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_token), (&__pyx_v_c_token)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10775, __pyx_L1_error)
+10776: if not line_sender_opts_token(self._opts, c_token, &err):
__pyx_t_5 = (!line_sender_opts_token(__pyx_v_self->_opts, __pyx_v_c_token, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+10777: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10777, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 10777, __pyx_L1_error)
10778:
+10779: if token_x is not None:
__pyx_t_5 = (__pyx_v_token_x != ((PyObject*)Py_None));
if (__pyx_t_5) {
/* … */
}
+10780: str_to_utf8(b, <PyObject*>token_x, &c_token_x)
__pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_token_x), (&__pyx_v_c_token_x)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10780, __pyx_L1_error)
+10781: if not line_sender_opts_token_x(self._opts, c_token_x, &err):
__pyx_t_5 = (!line_sender_opts_token_x(__pyx_v_self->_opts, __pyx_v_c_token_x, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+10782: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10782, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 10782, __pyx_L1_error)
10783:
+10784: if token_y is not None:
__pyx_t_5 = (__pyx_v_token_y != ((PyObject*)Py_None));
if (__pyx_t_5) {
/* … */
}
+10785: str_to_utf8(b, <PyObject*>token_y, &c_token_y)
__pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_token_y), (&__pyx_v_c_token_y)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10785, __pyx_L1_error)
+10786: if not line_sender_opts_token_y(self._opts, c_token_y, &err):
__pyx_t_5 = (!line_sender_opts_token_y(__pyx_v_self->_opts, __pyx_v_c_token_y, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+10787: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10787, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 10787, __pyx_L1_error)
10788:
+10789: if protocol_version is not None:
__pyx_t_5 = (__pyx_v_protocol_version != Py_None);
if (__pyx_t_5) {
/* … */
}
+10790: if protocol_version == 'auto':
__pyx_t_5 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_n_u_auto, Py_EQ); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 10790, __pyx_L1_error) if (__pyx_t_5) { goto __pyx_L65; }
10791: pass
+10792: elif (protocol_version == 1) or (protocol_version == '1'):
__pyx_t_11 = (__Pyx_PyLong_BoolEqObjC(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_int_1, 1, 0)); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10792, __pyx_L1_error) if (!__pyx_t_11) { } else { __pyx_t_5 = __pyx_t_11; goto __pyx_L66_bool_binop_done; } __pyx_t_11 = (__Pyx_PyObject_Equals_obj_ch49(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_kp_u_1, Py_EQ)); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10792, __pyx_L1_error) __pyx_t_5 = __pyx_t_11; __pyx_L66_bool_binop_done:; if (__pyx_t_5) { /* … */ goto __pyx_L65; }
+10793: if not line_sender_opts_protocol_version(
__pyx_t_5 = (!line_sender_opts_protocol_version(__pyx_v_self->_opts, line_sender_protocol_version_1, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
10794: self._opts, line_sender_protocol_version_1, &err):
+10795: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10795, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 10795, __pyx_L1_error)
+10796: elif (protocol_version == 2) or (protocol_version == '2'):
__pyx_t_11 = (__Pyx_PyLong_BoolEqObjC(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_int_2, 2, 0)); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10796, __pyx_L1_error) if (!__pyx_t_11) { } else { __pyx_t_5 = __pyx_t_11; goto __pyx_L69_bool_binop_done; } __pyx_t_11 = (__Pyx_PyObject_Equals_obj_ch50(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_kp_u_2, Py_EQ)); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10796, __pyx_L1_error) __pyx_t_5 = __pyx_t_11; __pyx_L69_bool_binop_done:; if (__pyx_t_5) { /* … */ goto __pyx_L65; }
+10797: if not line_sender_opts_protocol_version(
__pyx_t_5 = (!line_sender_opts_protocol_version(__pyx_v_self->_opts, line_sender_protocol_version_2, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
10798: self._opts, line_sender_protocol_version_2, &err):
+10799: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10799, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 10799, __pyx_L1_error)
+10800: elif (protocol_version == 3) or (protocol_version == '3'):
__pyx_t_11 = (__Pyx_PyLong_BoolEqObjC(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_int_3, 3, 0)); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10800, __pyx_L1_error) if (!__pyx_t_11) { } else { __pyx_t_5 = __pyx_t_11; goto __pyx_L72_bool_binop_done; } __pyx_t_11 = (__Pyx_PyObject_Equals_obj_ch51(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_kp_u_3, Py_EQ)); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10800, __pyx_L1_error) __pyx_t_5 = __pyx_t_11; __pyx_L72_bool_binop_done:; if (likely(__pyx_t_5)) { /* … */ goto __pyx_L65; }
+10801: if not line_sender_opts_protocol_version(
__pyx_t_5 = (!line_sender_opts_protocol_version(__pyx_v_self->_opts, line_sender_protocol_version_3, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
10802: self._opts, line_sender_protocol_version_3, &err):
+10803: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10803, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 10803, __pyx_L1_error)
10804: else:
+10805: raise QuestDBError(
/*else*/ {
__pyx_t_7 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10805, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
+10806: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10806, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10806, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+10807: '"protocol_version" must be None, "auto", 1-3' +
__pyx_t_8 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_protocol_version_must_be_None_a, __pyx_t_21); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10807, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_1, __pyx_t_8}; __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10805, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 10805, __pyx_L1_error) } __pyx_L65:;
+10808: f' not {protocol_version!r}')
__pyx_t_8 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_protocol_version), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10808, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_21 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_not_2, __pyx_t_8); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 10808, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_21); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
10809:
+10810: if auth_timeout is not None:
__pyx_t_5 = (__pyx_v_auth_timeout != Py_None);
if (__pyx_t_5) {
/* … */
}
+10811: if _is_int_not_bool(auth_timeout):
__pyx_t_5 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_auth_timeout); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10811, __pyx_L1_error) if (__pyx_t_5) { /* … */ goto __pyx_L76; }
+10812: c_auth_timeout = auth_timeout
__pyx_t_23 = __Pyx_PyLong_As_uint64_t(__pyx_v_auth_timeout); if (unlikely((__pyx_t_23 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 10812, __pyx_L1_error) __pyx_v_c_auth_timeout = __pyx_t_23;
+10813: elif isinstance(auth_timeout, cp_timedelta):
__pyx_t_5 = __Pyx_TypeCheck(__pyx_v_auth_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta);
if (likely(__pyx_t_5)) {
/* … */
goto __pyx_L76;
}
+10814: c_auth_timeout = _timedelta_to_millis(auth_timeout)
if (!(likely(((__pyx_v_auth_timeout) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_auth_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta))))) __PYX_ERR(0, 10814, __pyx_L1_error) __pyx_t_23 = __pyx_f_7questdb_7_client__timedelta_to_millis(((PyDateTime_Delta *)__pyx_v_auth_timeout)); if (unlikely(__pyx_t_23 == ((uint64_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 10814, __pyx_L1_error) __pyx_v_c_auth_timeout = __pyx_t_23;
10815: else:
+10816: raise TypeError(
/*else*/ {
__pyx_t_2 = NULL;
+10817: '"auth_timeout" must be an int or a timedelta, '
__pyx_t_8 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auth_timeout_must_be_an_int_or, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10817, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_8}; __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10816, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 10816, __pyx_L1_error) } __pyx_L76:;
+10818: f'not {_fqn(type(auth_timeout))}')
__pyx_t_8 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_auth_timeout)))); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10818, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10818, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+10819: if not line_sender_opts_auth_timeout(self._opts, c_auth_timeout, &err):
__pyx_t_5 = (!line_sender_opts_auth_timeout(__pyx_v_self->_opts, __pyx_v_c_auth_timeout, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+10820: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10820, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 10820, __pyx_L1_error)
10821:
+10822: if tls_verify is not None:
__pyx_t_5 = (__pyx_v_tls_verify != Py_None);
if (__pyx_t_5) {
/* … */
}
+10823: if (tls_verify is True) or (tls_verify == 'on'):
__pyx_t_11 = (__pyx_v_tls_verify == Py_True);
if (!__pyx_t_11) {
} else {
__pyx_t_5 = __pyx_t_11;
goto __pyx_L80_bool_binop_done;
}
__pyx_t_11 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_tls_verify, __pyx_mstate_global->__pyx_n_u_on, Py_EQ); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10823, __pyx_L1_error)
__pyx_t_5 = __pyx_t_11;
__pyx_L80_bool_binop_done:;
if (__pyx_t_5) {
/* … */
goto __pyx_L79;
}
+10824: c_tls_verify = True
__pyx_v_c_tls_verify = 1;
+10825: elif (tls_verify is False) or (tls_verify == 'unsafe_off'):
__pyx_t_11 = (__pyx_v_tls_verify == Py_False);
if (!__pyx_t_11) {
} else {
__pyx_t_5 = __pyx_t_11;
goto __pyx_L82_bool_binop_done;
}
__pyx_t_11 = __Pyx_PyObject_CompareBoolEq_object_str(__pyx_v_tls_verify, __pyx_mstate_global->__pyx_n_u_unsafe_off, Py_EQ); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10825, __pyx_L1_error)
__pyx_t_5 = __pyx_t_11;
__pyx_L82_bool_binop_done:;
if (likely(__pyx_t_5)) {
/* … */
goto __pyx_L79;
}
+10826: c_tls_verify = False
__pyx_v_c_tls_verify = 0;
10827: else:
+10828: raise ValueError(
/*else*/ {
__pyx_t_8 = NULL;
+10829: '"tls_verify" must be a bool, "on" or "unsafe_off", '
__pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_tls_verify_must_be_a_bool_on_or, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10829, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_1}; __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10828, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); } __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 10828, __pyx_L1_error) } __pyx_L79:;
+10830: f'not {tls_verify!r}')
__pyx_t_2 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_tls_verify), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10830, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2);
+10831: if not line_sender_opts_tls_verify(self._opts, c_tls_verify, &err):
__pyx_t_5 = (!line_sender_opts_tls_verify(__pyx_v_self->_opts, __pyx_v_c_tls_verify, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+10832: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10832, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 10832, __pyx_L1_error)
10833:
+10834: if tls_roots is not None:
__pyx_t_5 = (__pyx_v_tls_roots != Py_None);
if (__pyx_t_5) {
/* … */
}
+10835: tls_roots = str(tls_roots)
__pyx_t_18 = __Pyx_PyObject_Unicode(__pyx_v_tls_roots); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10835, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF_SET(__pyx_v_tls_roots, __pyx_t_18); __pyx_t_18 = 0;
+10836: str_to_utf8(b, <PyObject*>tls_roots, &c_tls_roots)
__pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_tls_roots), (&__pyx_v_c_tls_roots)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10836, __pyx_L1_error)
+10837: if not line_sender_opts_tls_roots(self._opts, c_tls_roots, &err):
__pyx_t_5 = (!line_sender_opts_tls_roots(__pyx_v_self->_opts, __pyx_v_c_tls_roots, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+10838: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10838, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 10838, __pyx_L1_error)
10839:
+10840: if tls_roots_password is not None:
__pyx_t_5 = (__pyx_v_tls_roots_password != Py_None);
if (__pyx_t_5) {
/* … */
}
+10841: str_to_utf8(b, <PyObject*>tls_roots_password, &c_tls_roots_password)
__pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_tls_roots_password), (&__pyx_v_c_tls_roots_password)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10841, __pyx_L1_error)
+10842: if not line_sender_opts_tls_roots_password(
__pyx_t_5 = (!line_sender_opts_tls_roots_password(__pyx_v_self->_opts, __pyx_v_c_tls_roots_password, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
10843: self._opts, c_tls_roots_password, &err):
+10844: raise c_err_to_py(err)
__pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10844, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_Raise(__pyx_t_18, 0, 0, 0); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __PYX_ERR(0, 10844, __pyx_L1_error)
10845:
+10846: if tls_ca is not None:
__pyx_t_5 = (__pyx_v_tls_ca != Py_None);
if (__pyx_t_5) {
/* … */
goto __pyx_L89;
}
+10847: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
goto __pyx_L95_try_end;
__pyx_L90_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
__Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L92_except_error:;
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_15, __pyx_t_14, __pyx_t_13);
goto __pyx_L1_error;
__pyx_L95_try_end:;
}
+10848: c_tls_ca = TlsCa.parse(tls_ca).c_value
__pyx_t_1 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_TlsCa); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10848, __pyx_L90_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_parse); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10848, __pyx_L90_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_10 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_2))) {
__pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
assert(__pyx_t_1);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
__Pyx_INCREF(__pyx_t_1);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
__pyx_t_10 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_tls_ca};
__pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10848, __pyx_L90_error)
__Pyx_GOTREF(__pyx_t_18);
}
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10848, __pyx_L90_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
__pyx_t_24 = ((enum line_sender_ca)__Pyx_PyLong_As_enum__line_sender_ca(__pyx_t_2)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10848, __pyx_L90_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_v_c_tls_ca = __pyx_t_24;
+10849: except ValueError:
__pyx_t_17 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_ValueError)))); if (__pyx_t_17) { __Pyx_AddTraceback("questdb._client.Sender._set_sender_fields", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_18, &__pyx_t_1) < 0) __PYX_ERR(0, 10849, __pyx_L92_except_error) __Pyx_XGOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_t_18); __Pyx_XGOTREF(__pyx_t_1);
+10850: raise QuestDBError(
__pyx_t_7 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 10850, __pyx_L92_except_error)
__Pyx_GOTREF(__pyx_t_21);
+10851: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 10851, __pyx_L92_except_error) __Pyx_GOTREF(__pyx_t_20); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10851, __pyx_L92_except_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+10852: f'"tls_ca" has invalid value: {tls_ca!r}')
__pyx_t_20 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_tls_ca), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 10852, __pyx_L92_except_error) __Pyx_GOTREF(__pyx_t_20); __pyx_t_19 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_tls_ca_has_invalid_value, __pyx_t_20); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 10852, __pyx_L92_except_error) __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_21))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_21); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_21); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_21, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_9, __pyx_t_19}; __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_21, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10850, __pyx_L92_except_error) __Pyx_GOTREF(__pyx_t_8); } __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(0, 10850, __pyx_L92_except_error) } goto __pyx_L92_except_error;
+10853: if not line_sender_opts_tls_ca(self._opts, c_tls_ca, &err):
__pyx_t_5 = (!line_sender_opts_tls_ca(__pyx_v_self->_opts, __pyx_v_c_tls_ca, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+10854: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10854, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 10854, __pyx_L1_error)
+10855: elif protocol.tls_enabled and tls_roots is None:
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_protocol, __pyx_mstate_global->__pyx_n_u_tls_enabled); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10855, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10855, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_11) { } else { __pyx_t_5 = __pyx_t_11; goto __pyx_L99_bool_binop_done; } __pyx_t_11 = (__pyx_v_tls_roots == Py_None); __pyx_t_5 = __pyx_t_11; __pyx_L99_bool_binop_done:; if (__pyx_t_5) { /* … */ } __pyx_L89:;
10856: # Set different default for Python than the the Rust default.
10857: # We don't set it if `tls_roots` is set, as it would override it.
+10858: c_tls_ca = line_sender_ca_webpki_and_os_roots
__pyx_v_c_tls_ca = line_sender_ca_webpki_and_os_roots;
+10859: if not line_sender_opts_tls_ca(self._opts, c_tls_ca, &err):
__pyx_t_5 = (!line_sender_opts_tls_ca(__pyx_v_self->_opts, __pyx_v_c_tls_ca, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+10860: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10860, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 10860, __pyx_L1_error)
10861:
+10862: if max_buf_size is not None:
__pyx_t_5 = (__pyx_v_max_buf_size != Py_None);
if (__pyx_t_5) {
/* … */
}
+10863: if not _is_int_not_bool(max_buf_size):
__pyx_t_5 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_max_buf_size); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10863, __pyx_L1_error) __pyx_t_11 = (!__pyx_t_5); if (unlikely(__pyx_t_11)) { /* … */ }
+10864: raise TypeError(
__pyx_t_18 = NULL;
+10865: '"max_buf_size" must be an int, '
__pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_max_buf_size_must_be_an_int_not, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10865, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_18, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10864, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 10864, __pyx_L1_error)
+10866: f'not {_fqn(type(max_buf_size))}')
__pyx_t_2 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_max_buf_size)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10866, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10866, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+10867: c_max_buf_size = max_buf_size
__pyx_t_23 = __Pyx_PyLong_As_uint64_t(__pyx_v_max_buf_size); if (unlikely((__pyx_t_23 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 10867, __pyx_L1_error) __pyx_v_c_max_buf_size = __pyx_t_23;
+10868: if not line_sender_opts_max_buf_size(self._opts, c_max_buf_size, &err):
__pyx_t_11 = (!line_sender_opts_max_buf_size(__pyx_v_self->_opts, __pyx_v_c_max_buf_size, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
+10869: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10869, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 10869, __pyx_L1_error)
10870:
+10871: if retry_timeout is not None:
__pyx_t_11 = (__pyx_v_retry_timeout != Py_None);
if (__pyx_t_11) {
/* … */
}
+10872: if _is_int_not_bool(retry_timeout):
__pyx_t_11 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_retry_timeout); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10872, __pyx_L1_error) if (__pyx_t_11) { /* … */ goto __pyx_L106; }
+10873: c_retry_timeout = retry_timeout
__pyx_t_23 = __Pyx_PyLong_As_uint64_t(__pyx_v_retry_timeout); if (unlikely((__pyx_t_23 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 10873, __pyx_L1_error) __pyx_v_c_retry_timeout = __pyx_t_23;
+10874: if not line_sender_opts_retry_timeout(self._opts, c_retry_timeout, &err):
__pyx_t_11 = (!line_sender_opts_retry_timeout(__pyx_v_self->_opts, __pyx_v_c_retry_timeout, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
+10875: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10875, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 10875, __pyx_L1_error)
+10876: elif isinstance(retry_timeout, cp_timedelta):
__pyx_t_11 = __Pyx_TypeCheck(__pyx_v_retry_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta);
if (likely(__pyx_t_11)) {
/* … */
goto __pyx_L106;
}
+10877: c_retry_timeout = _timedelta_to_millis(retry_timeout)
if (!(likely(((__pyx_v_retry_timeout) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_retry_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta))))) __PYX_ERR(0, 10877, __pyx_L1_error) __pyx_t_23 = __pyx_f_7questdb_7_client__timedelta_to_millis(((PyDateTime_Delta *)__pyx_v_retry_timeout)); if (unlikely(__pyx_t_23 == ((uint64_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 10877, __pyx_L1_error) __pyx_v_c_retry_timeout = __pyx_t_23;
+10878: if not line_sender_opts_retry_timeout(self._opts, c_retry_timeout, &err):
__pyx_t_11 = (!line_sender_opts_retry_timeout(__pyx_v_self->_opts, __pyx_v_c_retry_timeout, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
+10879: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10879, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 10879, __pyx_L1_error)
10880: else:
+10881: raise TypeError(
/*else*/ {
__pyx_t_2 = NULL;
+10882: '"retry_timeout" must be an int or a timedelta, '
__pyx_t_18 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_retry_timeout_must_be_an_int_or, __pyx_t_8); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10882, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_18}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10881, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 10881, __pyx_L1_error) } __pyx_L106:;
+10883: f'not {_fqn(type(retry_timeout))}')
__pyx_t_18 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_retry_timeout)))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10883, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_18); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10883, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
10884:
+10885: if retry_max_backoff is not None:
__pyx_t_11 = (__pyx_v_retry_max_backoff != Py_None);
if (__pyx_t_11) {
/* … */
}
+10886: if _is_int_not_bool(retry_max_backoff):
__pyx_t_11 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_retry_max_backoff); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10886, __pyx_L1_error) if (__pyx_t_11) { /* … */ goto __pyx_L110; }
+10887: c_retry_max_backoff = retry_max_backoff
__pyx_t_23 = __Pyx_PyLong_As_uint64_t(__pyx_v_retry_max_backoff); if (unlikely((__pyx_t_23 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 10887, __pyx_L1_error) __pyx_v_c_retry_max_backoff = __pyx_t_23;
+10888: if not line_sender_opts_retry_max_backoff(
__pyx_t_11 = (!line_sender_opts_retry_max_backoff(__pyx_v_self->_opts, __pyx_v_c_retry_max_backoff, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
10889: self._opts, c_retry_max_backoff, &err):
+10890: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10890, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 10890, __pyx_L1_error)
+10891: elif isinstance(retry_max_backoff, cp_timedelta):
__pyx_t_11 = __Pyx_TypeCheck(__pyx_v_retry_max_backoff, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta);
if (likely(__pyx_t_11)) {
/* … */
goto __pyx_L110;
}
+10892: c_retry_max_backoff = _timedelta_to_millis(retry_max_backoff)
if (!(likely(((__pyx_v_retry_max_backoff) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_retry_max_backoff, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta))))) __PYX_ERR(0, 10892, __pyx_L1_error) __pyx_t_23 = __pyx_f_7questdb_7_client__timedelta_to_millis(((PyDateTime_Delta *)__pyx_v_retry_max_backoff)); if (unlikely(__pyx_t_23 == ((uint64_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 10892, __pyx_L1_error) __pyx_v_c_retry_max_backoff = __pyx_t_23;
+10893: if not line_sender_opts_retry_max_backoff(
__pyx_t_11 = (!line_sender_opts_retry_max_backoff(__pyx_v_self->_opts, __pyx_v_c_retry_max_backoff, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
10894: self._opts, c_retry_max_backoff, &err):
+10895: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10895, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 10895, __pyx_L1_error)
10896: else:
+10897: raise TypeError(
/*else*/ {
__pyx_t_18 = NULL;
+10898: '"retry_max_backoff" must be an int or a timedelta, '
__pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_retry_max_backoff_must_be_an_in, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10898, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_18, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10897, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 10897, __pyx_L1_error) } __pyx_L110:;
+10899: f'not {_fqn(type(retry_max_backoff))}')
__pyx_t_2 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_retry_max_backoff)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10899, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10899, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
10900:
+10901: if request_min_throughput is not None:
__pyx_t_11 = (__pyx_v_request_min_throughput != Py_None);
if (__pyx_t_11) {
/* … */
}
+10902: if not _is_int_not_bool(request_min_throughput):
__pyx_t_11 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_request_min_throughput); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10902, __pyx_L1_error) __pyx_t_5 = (!__pyx_t_11); if (unlikely(__pyx_t_5)) { /* … */ }
+10903: raise TypeError(
__pyx_t_2 = NULL;
+10904: '"request_min_throughput" must be an int, '
__pyx_t_18 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_request_min_throughput_must_be, __pyx_t_8); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10904, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_18}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10903, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 10903, __pyx_L1_error)
+10905: f'not {_fqn(type(request_min_throughput))}')
__pyx_t_18 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_request_min_throughput)))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10905, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_18); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10905, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+10906: c_request_min_throughput = request_min_throughput
__pyx_t_23 = __Pyx_PyLong_As_uint64_t(__pyx_v_request_min_throughput); if (unlikely((__pyx_t_23 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 10906, __pyx_L1_error) __pyx_v_c_request_min_throughput = __pyx_t_23;
+10907: if not line_sender_opts_request_min_throughput(self._opts, c_request_min_throughput, &err):
__pyx_t_5 = (!line_sender_opts_request_min_throughput(__pyx_v_self->_opts, __pyx_v_c_request_min_throughput, (&__pyx_v_err)));
if (unlikely(__pyx_t_5)) {
/* … */
}
+10908: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10908, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 10908, __pyx_L1_error)
10909:
+10910: if max_name_len is not None:
__pyx_t_5 = (__pyx_v_max_name_len != Py_None);
if (__pyx_t_5) {
/* … */
}
+10911: if not _is_int_not_bool(max_name_len):
__pyx_t_5 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_max_name_len); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10911, __pyx_L1_error) __pyx_t_11 = (!__pyx_t_5); if (unlikely(__pyx_t_11)) { /* … */ }
+10912: raise TypeError(
__pyx_t_18 = NULL;
+10913: '"max_name_len" must be an int, '
__pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_max_name_len_must_be_an_int_not, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10913, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_18, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10912, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 10912, __pyx_L1_error)
+10914: f'not {_fqn(type(max_name_len))}')
__pyx_t_2 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_max_name_len)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10914, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10914, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+10915: c_max_name_len = max_name_len
__pyx_t_10 = __Pyx_PyLong_As_size_t(__pyx_v_max_name_len); if (unlikely((__pyx_t_10 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 10915, __pyx_L1_error) __pyx_v_c_max_name_len = __pyx_t_10;
+10916: if not line_sender_opts_max_name_len(self._opts, c_max_name_len, &err):
__pyx_t_11 = (!line_sender_opts_max_name_len(__pyx_v_self->_opts, __pyx_v_c_max_name_len, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
+10917: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10917, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 10917, __pyx_L1_error)
10918:
+10919: if request_timeout is not None:
__pyx_t_11 = (__pyx_v_request_timeout != Py_None);
if (__pyx_t_11) {
/* … */
}
+10920: if _is_int_not_bool(request_timeout):
__pyx_t_11 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_request_timeout); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10920, __pyx_L1_error) if (__pyx_t_11) { /* … */ goto __pyx_L120; }
+10921: c_request_timeout = request_timeout
__pyx_t_23 = __Pyx_PyLong_As_uint64_t(__pyx_v_request_timeout); if (unlikely((__pyx_t_23 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 10921, __pyx_L1_error) __pyx_v_c_request_timeout = __pyx_t_23;
+10922: if not line_sender_opts_request_timeout(self._opts, c_request_timeout, &err):
__pyx_t_11 = (!line_sender_opts_request_timeout(__pyx_v_self->_opts, __pyx_v_c_request_timeout, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
+10923: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10923, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 10923, __pyx_L1_error)
+10924: elif isinstance(request_timeout, cp_timedelta):
__pyx_t_11 = __Pyx_TypeCheck(__pyx_v_request_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta);
if (likely(__pyx_t_11)) {
/* … */
goto __pyx_L120;
}
+10925: c_request_timeout = _timedelta_to_millis(request_timeout)
if (!(likely(((__pyx_v_request_timeout) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_request_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta))))) __PYX_ERR(0, 10925, __pyx_L1_error) __pyx_t_23 = __pyx_f_7questdb_7_client__timedelta_to_millis(((PyDateTime_Delta *)__pyx_v_request_timeout)); if (unlikely(__pyx_t_23 == ((uint64_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 10925, __pyx_L1_error) __pyx_v_c_request_timeout = __pyx_t_23;
+10926: if not line_sender_opts_request_timeout(self._opts, c_request_timeout, &err):
__pyx_t_11 = (!line_sender_opts_request_timeout(__pyx_v_self->_opts, __pyx_v_c_request_timeout, (&__pyx_v_err)));
if (unlikely(__pyx_t_11)) {
/* … */
}
+10927: raise c_err_to_py(err)
__pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10927, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 10927, __pyx_L1_error)
10928: else:
+10929: raise TypeError(
/*else*/ {
__pyx_t_2 = NULL;
+10930: '"request_timeout" must be an int or a timedelta, '
__pyx_t_18 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_request_timeout_must_be_an_int, __pyx_t_8); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10930, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_10 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_18}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10929, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 10929, __pyx_L1_error) } __pyx_L120:;
+10931: f'not {_fqn(type(request_timeout))}')
__pyx_t_18 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_request_timeout)))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 10931, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_18); __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_18); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10931, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
10932:
+10933: if _is_qwp_ws_protocol(self._c_protocol) and auto_flush_bytes is None:
__pyx_t_5 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10933, __pyx_L1_error) if (__pyx_t_5) { } else { __pyx_t_11 = __pyx_t_5; goto __pyx_L124_bool_binop_done; } __pyx_t_5 = (__pyx_v_auto_flush_bytes == Py_None); __pyx_t_11 = __pyx_t_5; __pyx_L124_bool_binop_done:; if (__pyx_t_11) { /* … */ }
10934: # As on a pooled lease, the byte threshold derives from the
10935: # connection's frame cap, read on every check. The placeholder
10936: # lets the byte trigger alone turn auto-flush on.
+10937: auto_flush_bytes = 1
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_1); __Pyx_DECREF_SET(__pyx_v_auto_flush_bytes, __pyx_mstate_global->__pyx_int_1);
+10938: self._auto_flush_bytes_dynamic = True
__pyx_v_self->_auto_flush_bytes_dynamic = 1;
+10939: _parse_auto_flush(
__pyx_t_4 = __pyx_f_7questdb_7_client__parse_auto_flush(__pyx_v_self->_c_protocol, __pyx_v_auto_flush, __pyx_v_auto_flush_rows, __pyx_v_auto_flush_bytes, __pyx_v_auto_flush_interval, (&__pyx_v_self->_auto_flush_mode), __pyx_v_c_max_datagram_size); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10939, __pyx_L1_error)
10940: self._c_protocol,
10941: auto_flush,
10942: auto_flush_rows,
10943: auto_flush_bytes,
10944: auto_flush_interval,
10945: &self._auto_flush_mode,
10946: c_max_datagram_size)
10947:
+10948: self._init_buf_size = init_buf_size or 65536
__pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_v_init_buf_size); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 10948, __pyx_L1_error) if (!__pyx_t_11) { } else { __pyx_t_22 = __Pyx_PyLong_As_size_t(__pyx_v_init_buf_size); if (unlikely((__pyx_t_22 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 10948, __pyx_L1_error) __pyx_t_10 = __pyx_t_22; goto __pyx_L126_bool_binop_done; } __pyx_t_10 = 0x10000; __pyx_L126_bool_binop_done:; __pyx_v_self->_init_buf_size = __pyx_t_10;
+10949: self._last_flush_ms = <int64_t*>calloc(1, sizeof(int64_t))
__pyx_v_self->_last_flush_ms = ((int64_t *)calloc(1, (sizeof(int64_t))));
+10950: if self._last_flush_ms == NULL:
__pyx_t_11 = (__pyx_v_self->_last_flush_ms == NULL);
if (unlikely(__pyx_t_11)) {
/* … */
}
+10951: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 10951, __pyx_L1_error)
10952:
10953: # Retain a clone of the fully-configured opts (auth/TLS included) so a
10954: # ws sender's dataframe() can open a poolless direct columnar
10955: # connection per call, independent of how it was built.
+10956: if _is_qwp_ws_protocol(self._c_protocol) and self._opts != NULL:
__pyx_t_5 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10956, __pyx_L1_error) if (__pyx_t_5) { } else { __pyx_t_11 = __pyx_t_5; goto __pyx_L130_bool_binop_done; } __pyx_t_5 = (__pyx_v_self->_opts != NULL); __pyx_t_11 = __pyx_t_5; __pyx_L130_bool_binop_done:; if (__pyx_t_11) { /* … */ }
+10957: self._qwp_ws_opts = line_sender_opts_clone(self._opts)
__pyx_v_self->_qwp_ws_opts = line_sender_opts_clone(__pyx_v_self->_opts);
10958:
+10959: def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_6Sender_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_6Sender_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
#if !CYTHON_VECTORCALL_TPNEW
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
#if !CYTHON_VECTORCALL_TPNEW
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__pyx_args, __pyx_nargs);
if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL_TPNEW(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) return -1;
if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
__pyx_r = __pyx_pf_7questdb_7_client_6Sender___cinit__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_6Sender___cinit__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Sender.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+10960: self._c_protocol = line_sender_protocol_tcp
__pyx_v_self->_c_protocol = line_sender_protocol_tcp;
+10961: self._opts = NULL
__pyx_v_self->_opts = NULL;
+10962: self._impl = NULL
__pyx_v_self->_impl = NULL;
+10963: self._buffer = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_buffer); __Pyx_DECREF((PyObject *)__pyx_v_self->_buffer); __pyx_v_self->_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None);
+10964: self._thread_owner_token = object()
__pyx_t_2 = NULL;
__pyx_t_3 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_object, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10964, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_GIVEREF(__pyx_t_1);
__Pyx_GOTREF(__pyx_v_self->_thread_owner_token);
__Pyx_DECREF(__pyx_v_self->_thread_owner_token);
__pyx_v_self->_thread_owner_token = __pyx_t_1;
__pyx_t_1 = 0;
+10965: self._dispatch_context = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_dispatch_context); __Pyx_DECREF(__pyx_v_self->_dispatch_context); __pyx_v_self->_dispatch_context = Py_None;
+10966: self._error_handler = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_error_handler); __Pyx_DECREF(__pyx_v_self->_error_handler); __pyx_v_self->_error_handler = Py_None;
+10967: self._connection_listener = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_connection_listener); __Pyx_DECREF(__pyx_v_self->_connection_listener); __pyx_v_self->_connection_listener = Py_None;
+10968: self._auto_flush_mode.enabled = False
__pyx_v_self->_auto_flush_mode.enabled = 0;
+10969: self._auto_flush_bytes_dynamic = False
__pyx_v_self->_auto_flush_bytes_dynamic = 0;
+10970: self._last_flush_ms = NULL
__pyx_v_self->_last_flush_ms = NULL;
+10971: self._init_buf_size = 0
__pyx_v_self->_init_buf_size = 0;
+10972: self._in_txn = False
__pyx_v_self->_in_txn = 0;
+10973: self._slot_id = -1
__pyx_v_self->_slot_id = -1L;
+10974: self._qwp_ws_opts = NULL
__pyx_v_self->_qwp_ws_opts = NULL;
+10975: self._cb_refs_key = 0
__pyx_v_self->_cb_refs_key = 0;
10976:
+10977: def __init__(
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_6Sender_3__init__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_6Sender_3__init__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_protocol = 0;
PyObject *__pyx_v_host = 0;
PyObject *__pyx_v_port = 0;
PyObject *__pyx_v_bind_interface = 0;
PyObject *__pyx_v_username = 0;
PyObject *__pyx_v_password = 0;
PyObject *__pyx_v_token = 0;
PyObject *__pyx_v_token_x = 0;
PyObject *__pyx_v_token_y = 0;
PyObject *__pyx_v_auth_timeout = 0;
PyObject *__pyx_v_tls_verify = 0;
PyObject *__pyx_v_tls_ca = 0;
PyObject *__pyx_v_tls_roots = 0;
PyObject *__pyx_v_tls_roots_password = 0;
PyObject *__pyx_v_max_buf_size = 0;
PyObject *__pyx_v_retry_timeout = 0;
PyObject *__pyx_v_retry_max_backoff = 0;
PyObject *__pyx_v_request_min_throughput = 0;
PyObject *__pyx_v_request_timeout = 0;
PyObject *__pyx_v_auto_flush = 0;
PyObject *__pyx_v_auto_flush_rows = 0;
PyObject *__pyx_v_auto_flush_bytes = 0;
PyObject *__pyx_v_auto_flush_interval = 0;
PyObject *__pyx_v_max_datagram_size = 0;
PyObject *__pyx_v_multicast_ttl = 0;
PyObject *__pyx_v_qwp_ws_progress = 0;
PyObject *__pyx_v_error_handler = 0;
PyObject *__pyx_v_connection_listener = 0;
PyObject *__pyx_v_connection_event_inbox_capacity = 0;
PyObject *__pyx_v_protocol_version = 0;
PyObject *__pyx_v_init_buf_size = 0;
PyObject *__pyx_v_max_name_len = 0;
#if !CYTHON_VECTORCALL_TPNEW
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
#if !CYTHON_VECTORCALL_TPNEW
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_protocol,&__pyx_mstate_global->__pyx_n_u_host,&__pyx_mstate_global->__pyx_n_u_port,&__pyx_mstate_global->__pyx_n_u_bind_interface,&__pyx_mstate_global->__pyx_n_u_username,&__pyx_mstate_global->__pyx_n_u_password,&__pyx_mstate_global->__pyx_n_u_token,&__pyx_mstate_global->__pyx_n_u_token_x,&__pyx_mstate_global->__pyx_n_u_token_y,&__pyx_mstate_global->__pyx_n_u_auth_timeout,&__pyx_mstate_global->__pyx_n_u_tls_verify,&__pyx_mstate_global->__pyx_n_u_tls_ca,&__pyx_mstate_global->__pyx_n_u_tls_roots,&__pyx_mstate_global->__pyx_n_u_tls_roots_password,&__pyx_mstate_global->__pyx_n_u_max_buf_size,&__pyx_mstate_global->__pyx_n_u_retry_timeout,&__pyx_mstate_global->__pyx_n_u_retry_max_backoff,&__pyx_mstate_global->__pyx_n_u_request_min_throughput,&__pyx_mstate_global->__pyx_n_u_request_timeout,&__pyx_mstate_global->__pyx_n_u_auto_flush,&__pyx_mstate_global->__pyx_n_u_auto_flush_rows,&__pyx_mstate_global->__pyx_n_u_auto_flush_bytes,&__pyx_mstate_global->__pyx_n_u_auto_flush_interval,&__pyx_mstate_global->__pyx_n_u_max_datagram_size,&__pyx_mstate_global->__pyx_n_u_multicast_ttl,&__pyx_mstate_global->__pyx_n_u_qwp_ws_progress,&__pyx_mstate_global->__pyx_n_u_error_handler,&__pyx_mstate_global->__pyx_n_u_connection_listener,&__pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity,&__pyx_mstate_global->__pyx_n_u_protocol_version,&__pyx_mstate_global->__pyx_n_u_init_buf_size,&__pyx_mstate_global->__pyx_n_u_max_name_len,0};
PyObject* values[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL_TPNEW(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 10977, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 3:
values[2] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 10977, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 10977, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 10977, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__init__", 0) < (0)) __PYX_ERR(0, 10977, __pyx_L3_error)
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = -1;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
goto __pyx_L7_cleaned_up;
__pyx_L0:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__pyx_L7_cleaned_up:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_6Sender_2__init__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_protocol, PyObject *__pyx_v_host, PyObject *__pyx_v_port, PyObject *__pyx_v_bind_interface, PyObject *__pyx_v_username, PyObject *__pyx_v_password, PyObject *__pyx_v_token, PyObject *__pyx_v_token_x, PyObject *__pyx_v_token_y, PyObject *__pyx_v_auth_timeout, PyObject *__pyx_v_tls_verify, PyObject *__pyx_v_tls_ca, PyObject *__pyx_v_tls_roots, PyObject *__pyx_v_tls_roots_password, PyObject *__pyx_v_max_buf_size, PyObject *__pyx_v_retry_timeout, PyObject *__pyx_v_retry_max_backoff, PyObject *__pyx_v_request_min_throughput, PyObject *__pyx_v_request_timeout, PyObject *__pyx_v_auto_flush, PyObject *__pyx_v_auto_flush_rows, PyObject *__pyx_v_auto_flush_bytes, PyObject *__pyx_v_auto_flush_interval, PyObject *__pyx_v_max_datagram_size, PyObject *__pyx_v_multicast_ttl, PyObject *__pyx_v_qwp_ws_progress, PyObject *__pyx_v_error_handler, PyObject *__pyx_v_connection_listener, PyObject *__pyx_v_connection_event_inbox_capacity, PyObject *__pyx_v_protocol_version, PyObject *__pyx_v_init_buf_size, PyObject *__pyx_v_max_name_len) {
struct line_sender_utf8 __pyx_v_c_host;
PyObject *__pyx_v_port_str = 0;
enum line_sender_protocol __pyx_v_c_protocol;
struct line_sender_utf8 __pyx_v_c_port;
struct qdb_pystr_buf *__pyx_v_b;
int __pyx_r;
__Pyx_INCREF(__pyx_v_protocol);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.Sender.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_port_str);
__Pyx_XDECREF(__pyx_v_protocol);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
10978: self,
10979: object protocol,
10980: str host,
10981: object port,
10982: *,
+10983: str bind_interface=None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None));
+10984: str username=None,
if (!values[4]) values[4] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[4]) values[4] = __Pyx_NewRef(((PyObject*)Py_None));
+10985: str password=None,
if (!values[5]) values[5] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[5]) values[5] = __Pyx_NewRef(((PyObject*)Py_None));
+10986: str token=None,
if (!values[6]) values[6] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[6]) values[6] = __Pyx_NewRef(((PyObject*)Py_None));
+10987: str token_x=None,
if (!values[7]) values[7] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[7]) values[7] = __Pyx_NewRef(((PyObject*)Py_None));
+10988: str token_y=None,
if (!values[8]) values[8] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[8]) values[8] = __Pyx_NewRef(((PyObject*)Py_None));
+10989: object auth_timeout=None, # default: 15000 milliseconds
if (!values[9]) values[9] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[9]) values[9] = __Pyx_NewRef(((PyObject *)Py_None));
+10990: object tls_verify=None, # default: True
if (!values[10]) values[10] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[10]) values[10] = __Pyx_NewRef(((PyObject *)Py_None));
+10991: object tls_ca=None, # TLS default: TlsCa.WebpkiAndOsRoots
if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_None));
+10992: object tls_roots=None,
if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_None));
+10993: str tls_roots_password=None,
if (!values[13]) values[13] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[13]) values[13] = __Pyx_NewRef(((PyObject*)Py_None));
+10994: object max_buf_size=None, # 100 * 1024 * 1024 - 100MiB
if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)Py_None));
+10995: object retry_timeout=None, # default: 10000 milliseconds
if (!values[15]) values[15] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[15]) values[15] = __Pyx_NewRef(((PyObject *)Py_None));
+10996: object retry_max_backoff=None, # default: 1000 milliseconds
if (!values[16]) values[16] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[16]) values[16] = __Pyx_NewRef(((PyObject *)Py_None));
+10997: object request_min_throughput=None, # default: 100 * 1024 - 100KiB/s
if (!values[17]) values[17] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[17]) values[17] = __Pyx_NewRef(((PyObject *)Py_None));
+10998: object request_timeout=None,
if (!values[18]) values[18] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[18]) values[18] = __Pyx_NewRef(((PyObject *)Py_None));
+10999: object auto_flush=None, # Default True
if (!values[19]) values[19] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[19]) values[19] = __Pyx_NewRef(((PyObject *)Py_None));
+11000: object auto_flush_rows=None, # Default 75000 (HTTP) or 600 (TCP)
if (!values[20]) values[20] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[20]) values[20] = __Pyx_NewRef(((PyObject *)Py_None));
+11001: object auto_flush_bytes=None, # Default off (90% of the frame cap for ws and wss)
if (!values[21]) values[21] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[21]) values[21] = __Pyx_NewRef(((PyObject *)Py_None));
+11002: object auto_flush_interval=None, # Default 1000 milliseconds
if (!values[22]) values[22] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[22]) values[22] = __Pyx_NewRef(((PyObject *)Py_None));
+11003: object max_datagram_size=None, # Default 1400 for QWP/UDP
if (!values[23]) values[23] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[23]) values[23] = __Pyx_NewRef(((PyObject *)Py_None));
+11004: object multicast_ttl=None, # Default 1 for QWP/UDP
if (!values[24]) values[24] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[24]) values[24] = __Pyx_NewRef(((PyObject *)Py_None));
+11005: object qwp_ws_progress=None, # Default background for QWP/WebSocket
if (!values[25]) values[25] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[25]) values[25] = __Pyx_NewRef(((PyObject *)Py_None));
+11006: object error_handler=None,
if (!values[26]) values[26] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[26]) values[26] = __Pyx_NewRef(((PyObject *)Py_None));
+11007: object connection_listener=None,
if (!values[27]) values[27] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[28]) values[28] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); /* … */ if (!values[27]) values[27] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[28]) values[28] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
11008: object connection_event_inbox_capacity=0,
+11009: object protocol_version=None, # Default auto
if (!values[29]) values[29] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[29]) values[29] = __Pyx_NewRef(((PyObject *)Py_None));
+11010: object init_buf_size=None, # 64KiB
if (!values[30]) values[30] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[30]) values[30] = __Pyx_NewRef(((PyObject *)Py_None));
+11011: object max_name_len=None): # 127
if (!values[31]) values[31] = __Pyx_NewRef(((PyObject *)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 3; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, i); __PYX_ERR(0, 10977, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 10977, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 10977, __pyx_L3_error) values[2] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 10977, __pyx_L3_error) /* … */ if (!values[31]) values[31] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_protocol = values[0]; __pyx_v_host = ((PyObject*)values[1]); __pyx_v_port = values[2]; __pyx_v_bind_interface = ((PyObject*)values[3]); __pyx_v_username = ((PyObject*)values[4]); __pyx_v_password = ((PyObject*)values[5]); __pyx_v_token = ((PyObject*)values[6]); __pyx_v_token_x = ((PyObject*)values[7]); __pyx_v_token_y = ((PyObject*)values[8]); __pyx_v_auth_timeout = values[9]; __pyx_v_tls_verify = values[10]; __pyx_v_tls_ca = values[11]; __pyx_v_tls_roots = values[12]; __pyx_v_tls_roots_password = ((PyObject*)values[13]); __pyx_v_max_buf_size = values[14]; __pyx_v_retry_timeout = values[15]; __pyx_v_retry_max_backoff = values[16]; __pyx_v_request_min_throughput = values[17]; __pyx_v_request_timeout = values[18]; __pyx_v_auto_flush = values[19]; __pyx_v_auto_flush_rows = values[20]; __pyx_v_auto_flush_bytes = values[21]; __pyx_v_auto_flush_interval = values[22]; __pyx_v_max_datagram_size = values[23]; __pyx_v_multicast_ttl = values[24]; __pyx_v_qwp_ws_progress = values[25]; __pyx_v_error_handler = values[26]; __pyx_v_connection_listener = values[27]; __pyx_v_connection_event_inbox_capacity = values[28]; __pyx_v_protocol_version = values[29]; __pyx_v_init_buf_size = values[30]; __pyx_v_max_name_len = values[31]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 10977, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Sender.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_host), (&PyUnicode_Type), 1, "host", 1))) __PYX_ERR(0, 10980, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_bind_interface), (&PyUnicode_Type), 1, "bind_interface", 1))) __PYX_ERR(0, 10983, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_username), (&PyUnicode_Type), 1, "username", 1))) __PYX_ERR(0, 10984, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_password), (&PyUnicode_Type), 1, "password", 1))) __PYX_ERR(0, 10985, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 1, "token", 1))) __PYX_ERR(0, 10986, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_x), (&PyUnicode_Type), 1, "token_x", 1))) __PYX_ERR(0, 10987, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_y), (&PyUnicode_Type), 1, "token_y", 1))) __PYX_ERR(0, 10988, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tls_roots_password), (&PyUnicode_Type), 1, "tls_roots_password", 1))) __PYX_ERR(0, 10993, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_6Sender_2__init__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_protocol, __pyx_v_host, __pyx_v_port, __pyx_v_bind_interface, __pyx_v_username, __pyx_v_password, __pyx_v_token, __pyx_v_token_x, __pyx_v_token_y, __pyx_v_auth_timeout, __pyx_v_tls_verify, __pyx_v_tls_ca, __pyx_v_tls_roots, __pyx_v_tls_roots_password, __pyx_v_max_buf_size, __pyx_v_retry_timeout, __pyx_v_retry_max_backoff, __pyx_v_request_min_throughput, __pyx_v_request_timeout, __pyx_v_auto_flush, __pyx_v_auto_flush_rows, __pyx_v_auto_flush_bytes, __pyx_v_auto_flush_interval, __pyx_v_max_datagram_size, __pyx_v_multicast_ttl, __pyx_v_qwp_ws_progress, __pyx_v_error_handler, __pyx_v_connection_listener, __pyx_v_connection_event_inbox_capacity, __pyx_v_protocol_version, __pyx_v_init_buf_size, __pyx_v_max_name_len);
11012:
11013: cdef line_sender_utf8 c_host
11014: cdef str port_str
11015: cdef line_sender_protocol c_protocol
11016: cdef line_sender_utf8 c_port
11017: cdef qdb_pystr_buf* b
+11018: if (self._opts != NULL or self._impl != NULL or
__pyx_t_2 = (__pyx_v_self->_opts != NULL);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_self->_impl != NULL);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
/* … */
if (unlikely(__pyx_t_1)) {
/* … */
}
+11019: self._last_flush_ms != NULL):
__pyx_t_2 = (__pyx_v_self->_last_flush_ms != NULL); __pyx_t_1 = __pyx_t_2; __pyx_L4_bool_binop_done:;
+11020: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11020, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+11021: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11021, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11021, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Sender_is_already_initialized}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11020, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 11020, __pyx_L1_error)
11022: 'Sender is already initialized.')
+11023: b = qdb_pystr_buf_new()
__pyx_v_b = qdb_pystr_buf_new();
+11024: try:
/*try:*/ {
+11025: protocol = Protocol.parse(protocol)
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11025, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_parse); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11025, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_8 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_5);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_5);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_8 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_protocol};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11025, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF_SET(__pyx_v_protocol, __pyx_t_3);
__pyx_t_3 = 0;
+11026: if protocol is None:
__pyx_t_1 = (__pyx_v_protocol == Py_None);
if (unlikely(__pyx_t_1)) {
/* … */
}
+11027: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11027, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_5);
+11028: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11028, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11028, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_protocol_is_required_and_cannot}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11027, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 11027, __pyx_L8_error)
11029: '"protocol" is required and cannot be None.')
+11030: c_protocol = protocol.c_value
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_protocol, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11030, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_9 = ((enum line_sender_protocol)__Pyx_PyLong_As_enum__line_sender_protocol(__pyx_t_3)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 11030, __pyx_L8_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_c_protocol = __pyx_t_9;
+11031: if PyLong_CheckExact(<PyObject*>port):
__pyx_t_1 = PyLong_CheckExact(((PyObject *)__pyx_v_port));
if (__pyx_t_1) {
/* … */
goto __pyx_L11;
}
+11032: port_str = str(port)
__pyx_t_3 = __Pyx_PyObject_Unicode(__pyx_v_port); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11032, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_port_str = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
+11033: elif PyUnicode_CheckExact(<PyObject*>port):
__pyx_t_1 = PyUnicode_CheckExact(((PyObject *)__pyx_v_port));
if (likely(__pyx_t_1)) {
/* … */
goto __pyx_L11;
}
+11034: port_str = port
__pyx_t_3 = __pyx_v_port;
__Pyx_INCREF(__pyx_t_3);
if (!(likely(PyUnicode_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_3))) __PYX_ERR(0, 11034, __pyx_L8_error)
__pyx_v_port_str = ((PyObject*)__pyx_t_3);
__pyx_t_3 = 0;
11035: else:
+11036: raise TypeError(
/*else*/ {
__pyx_t_5 = NULL;
+11037: f'port must be an int or a str, not {_fqn(type(port))}')
__pyx_t_6 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_port)))); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11037, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = __Pyx_PyUnicode_Unicode(__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11037, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_port_must_be_an_int_or_a_str_not, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11037, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11036, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 11036, __pyx_L8_error) } __pyx_L11:;
+11038: str_to_utf8(b, <PyObject*>host, &c_host)
__pyx_t_10 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_host), (&__pyx_v_c_host)); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11038, __pyx_L8_error)
+11039: str_to_utf8(b, <PyObject*>port_str, &c_port)
__pyx_t_10 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_port_str), (&__pyx_v_c_port)); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11039, __pyx_L8_error)
+11040: self._opts = line_sender_opts_new_service(c_protocol, c_host, c_port)
__pyx_v_self->_opts = line_sender_opts_new_service(__pyx_v_c_protocol, __pyx_v_c_host, __pyx_v_c_port);
11041:
+11042: self._set_sender_fields(
__pyx_t_10 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->__pyx_vtab)->_set_sender_fields(__pyx_v_self, __pyx_v_b, __pyx_v_protocol, __pyx_v_bind_interface, __pyx_v_username, __pyx_v_password, __pyx_v_token, __pyx_v_token_x, __pyx_v_token_y, __pyx_v_auth_timeout, __pyx_v_tls_verify, __pyx_v_tls_ca, __pyx_v_tls_roots, __pyx_v_tls_roots_password, __pyx_v_max_buf_size, __pyx_v_retry_timeout, __pyx_v_retry_max_backoff, __pyx_v_request_min_throughput, __pyx_v_request_timeout, __pyx_v_auto_flush, __pyx_v_auto_flush_rows, __pyx_v_auto_flush_bytes, __pyx_v_auto_flush_interval, __pyx_v_max_datagram_size, __pyx_v_multicast_ttl, __pyx_v_protocol_version, __pyx_v_qwp_ws_progress, __pyx_v_error_handler, __pyx_v_connection_listener, __pyx_v_connection_event_inbox_capacity, __pyx_v_init_buf_size, __pyx_v_max_name_len); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11042, __pyx_L8_error)
}
11043: b,
11044: protocol,
11045: bind_interface,
11046: username,
11047: password,
11048: token,
11049: token_x,
11050: token_y,
11051: auth_timeout,
11052: tls_verify,
11053: tls_ca,
11054: tls_roots,
11055: tls_roots_password,
11056: max_buf_size,
11057: retry_timeout,
11058: retry_max_backoff,
11059: request_min_throughput,
11060: request_timeout,
11061: auto_flush,
11062: auto_flush_rows,
11063: auto_flush_bytes,
11064: auto_flush_interval,
11065: max_datagram_size,
11066: multicast_ttl,
11067: protocol_version,
11068: qwp_ws_progress,
11069: error_handler,
11070: connection_listener,
11071: connection_event_inbox_capacity,
11072: init_buf_size,
11073: max_name_len)
11074: finally:
+11075: qdb_pystr_buf_free(b)
/*finally:*/ {
/*normal exit:*/{
qdb_pystr_buf_free(__pyx_v_b);
goto __pyx_L9;
}
__pyx_L8_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
{
qdb_pystr_buf_free(__pyx_v_b);
}
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
goto __pyx_L1_error;
}
__pyx_L9:;
}
11076:
+11077: @staticmethod
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_5from_conf(CYTHON_UNUSED PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_4from_conf, "\n Construct a sender from a :ref:`configuration string <sender_conf>`.\n\n The additional arguments are used to specify additional parameters\n which are not present in the configuration string.\n\n Note that any parameters already present in the configuration string\n cannot be overridden.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_5from_conf = {"from_conf", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_5from_conf, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_4from_conf}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_5from_conf(CYTHON_UNUSED PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_conf_str = 0; PyObject *__pyx_v_bind_interface = 0; PyObject *__pyx_v_username = 0; PyObject *__pyx_v_password = 0; PyObject *__pyx_v_token = 0; PyObject *__pyx_v_token_x = 0; PyObject *__pyx_v_token_y = 0; PyObject *__pyx_v_auth_timeout = 0; PyObject *__pyx_v_tls_verify = 0; PyObject *__pyx_v_tls_ca = 0; PyObject *__pyx_v_tls_roots = 0; PyObject *__pyx_v_tls_roots_password = 0; PyObject *__pyx_v_max_buf_size = 0; PyObject *__pyx_v_retry_timeout = 0; PyObject *__pyx_v_retry_max_backoff = 0; PyObject *__pyx_v_request_min_throughput = 0; PyObject *__pyx_v_request_timeout = 0; PyObject *__pyx_v_auto_flush = 0; PyObject *__pyx_v_auto_flush_rows = 0; PyObject *__pyx_v_auto_flush_bytes = 0; PyObject *__pyx_v_auto_flush_interval = 0; PyObject *__pyx_v_max_datagram_size = 0; PyObject *__pyx_v_multicast_ttl = 0; PyObject *__pyx_v_qwp_ws_progress = 0; PyObject *__pyx_v_error_handler = 0; PyObject *__pyx_v_connection_listener = 0; PyObject *__pyx_v_connection_event_inbox_capacity = 0; PyObject *__pyx_v_protocol_version = 0; PyObject *__pyx_v_init_buf_size = 0; PyObject *__pyx_v_max_name_len = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("from_conf (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_conf_str,&__pyx_mstate_global->__pyx_n_u_bind_interface,&__pyx_mstate_global->__pyx_n_u_username,&__pyx_mstate_global->__pyx_n_u_password,&__pyx_mstate_global->__pyx_n_u_token,&__pyx_mstate_global->__pyx_n_u_token_x,&__pyx_mstate_global->__pyx_n_u_token_y,&__pyx_mstate_global->__pyx_n_u_auth_timeout,&__pyx_mstate_global->__pyx_n_u_tls_verify,&__pyx_mstate_global->__pyx_n_u_tls_ca,&__pyx_mstate_global->__pyx_n_u_tls_roots,&__pyx_mstate_global->__pyx_n_u_tls_roots_password,&__pyx_mstate_global->__pyx_n_u_max_buf_size,&__pyx_mstate_global->__pyx_n_u_retry_timeout,&__pyx_mstate_global->__pyx_n_u_retry_max_backoff,&__pyx_mstate_global->__pyx_n_u_request_min_throughput,&__pyx_mstate_global->__pyx_n_u_request_timeout,&__pyx_mstate_global->__pyx_n_u_auto_flush,&__pyx_mstate_global->__pyx_n_u_auto_flush_rows,&__pyx_mstate_global->__pyx_n_u_auto_flush_bytes,&__pyx_mstate_global->__pyx_n_u_auto_flush_interval,&__pyx_mstate_global->__pyx_n_u_max_datagram_size,&__pyx_mstate_global->__pyx_n_u_multicast_ttl,&__pyx_mstate_global->__pyx_n_u_qwp_ws_progress,&__pyx_mstate_global->__pyx_n_u_error_handler,&__pyx_mstate_global->__pyx_n_u_connection_listener,&__pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity,&__pyx_mstate_global->__pyx_n_u_protocol_version,&__pyx_mstate_global->__pyx_n_u_init_buf_size,&__pyx_mstate_global->__pyx_n_u_max_name_len,0}; PyObject* values[30] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 11077, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 11077, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "from_conf", 0) < (0)) __PYX_ERR(0, 11077, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_gb_7questdb_7_client_6Sender_9from_conf_2generator9(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ /* … */ static PyObject *__pyx_pf_7questdb_7_client_6Sender_4from_conf(PyObject *__pyx_v_conf_str, PyObject *__pyx_v_bind_interface, PyObject *__pyx_v_username, PyObject *__pyx_v_password, PyObject *__pyx_v_token, PyObject *__pyx_v_token_x, PyObject *__pyx_v_token_y, PyObject *__pyx_v_auth_timeout, PyObject *__pyx_v_tls_verify, PyObject *__pyx_v_tls_ca, PyObject *__pyx_v_tls_roots, PyObject *__pyx_v_tls_roots_password, PyObject *__pyx_v_max_buf_size, PyObject *__pyx_v_retry_timeout, PyObject *__pyx_v_retry_max_backoff, PyObject *__pyx_v_request_min_throughput, PyObject *__pyx_v_request_timeout, PyObject *__pyx_v_auto_flush, PyObject *__pyx_v_auto_flush_rows, PyObject *__pyx_v_auto_flush_bytes, PyObject *__pyx_v_auto_flush_interval, PyObject *__pyx_v_max_datagram_size, PyObject *__pyx_v_multicast_ttl, PyObject *__pyx_v_qwp_ws_progress, PyObject *__pyx_v_error_handler, PyObject *__pyx_v_connection_listener, PyObject *__pyx_v_connection_event_inbox_capacity, PyObject *__pyx_v_protocol_version, PyObject *__pyx_v_init_buf_size, PyObject *__pyx_v_max_name_len) { struct line_sender_error *__pyx_v_err; PyObject *__pyx_v_protocol = 0; struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender = 0; PyObject *__pyx_v_synthetic_conf_str = 0; struct line_sender_utf8 __pyx_v_c_synthetic_conf_str; PyObject *__pyx_v_params = 0; struct qdb_pystr_buf *__pyx_v_b; PyObject *__pyx_v_addr = NULL; PyObject *__pyx_v_override_key = NULL; PyObject *__pyx_v_override_value = NULL; PyObject *__pyx_v_python_handled_keys = NULL; PyObject *__pyx_v_synthetic_params = NULL; PyObject *__pyx_v_key = NULL; PyObject *__pyx_v_value = NULL; PyObject *__pyx_gb_7questdb_7_client_6Sender_9from_conf_2generator9 = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_17); __Pyx_XDECREF(__pyx_t_18); __Pyx_XDECREF(__pyx_t_19); __Pyx_XDECREF(__pyx_t_20); __Pyx_XDECREF(__pyx_t_21); __Pyx_XDECREF(__pyx_t_22); __Pyx_XDECREF(__pyx_t_23); __Pyx_XDECREF(__pyx_t_24); __Pyx_XDECREF(__pyx_t_25); __Pyx_XDECREF(__pyx_t_26); __Pyx_XDECREF(__pyx_t_27); __Pyx_XDECREF(__pyx_t_28); __Pyx_XDECREF(__pyx_t_29); __Pyx_XDECREF(__pyx_t_30); __Pyx_XDECREF(__pyx_t_31); __Pyx_XDECREF(__pyx_t_32); __Pyx_XDECREF(__pyx_t_33); __Pyx_XDECREF(__pyx_t_34); __Pyx_XDECREF(__pyx_t_35); __Pyx_XDECREF(__pyx_t_36); __Pyx_XDECREF(__pyx_t_37); __Pyx_AddTraceback("questdb._client.Sender.from_conf", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_protocol); __Pyx_XDECREF((PyObject *)__pyx_v_sender); __Pyx_XDECREF(__pyx_v_synthetic_conf_str); __Pyx_XDECREF(__pyx_v_params); __Pyx_XDECREF(__pyx_v_addr); __Pyx_XDECREF(__pyx_v_override_key); __Pyx_XDECREF(__pyx_v_override_value); __Pyx_XDECREF(__pyx_v_python_handled_keys); __Pyx_XDECREF(__pyx_v_synthetic_params); __Pyx_XDECREF(__pyx_v_key); __Pyx_XDECREF(__pyx_v_value); __Pyx_XDECREF(__pyx_gb_7questdb_7_client_6Sender_9from_conf_2generator9); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_PyDict_NewPresized(29); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 11077, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); /* … */ __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_5from_conf, __Pyx_CYFUNCTION_STATICMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_from_conf, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[135])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 11077, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20); #endif __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_20, __pyx_t_17); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_from_conf, __pyx_t_20) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __pyx_t_17 = NULL; __Pyx_GetNameInClass(__pyx_t_19, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_from_conf); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11077, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_t_19}; __pyx_t_20 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_staticmethod, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 11077, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); } if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_from_conf, __pyx_t_20) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
11078: def from_conf(
11079: str conf_str,
11080: *,
+11081: str bind_interface=None,
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_bind_interface, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11082: str username=None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_username, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11083: str password=None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_password, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11084: str token=None,
if (!values[4]) values[4] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[4]) values[4] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_token, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11085: str token_x=None,
if (!values[5]) values[5] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[5]) values[5] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_token_x, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11086: str token_y=None,
if (!values[6]) values[6] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[6]) values[6] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_token_y, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11087: object auth_timeout=None, # default: 15000 milliseconds
if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_auth_timeout, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11088: object tls_verify=None, # default: True
if (!values[8]) values[8] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[8]) values[8] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_tls_verify, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11089: object tls_ca=None, # TLS default: TlsCa.WebpkiAndOsRoots
if (!values[9]) values[9] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[9]) values[9] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_tls_ca, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11090: object tls_roots=None,
if (!values[10]) values[10] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[10]) values[10] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_tls_roots, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11091: str tls_roots_password=None,
if (!values[11]) values[11] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[11]) values[11] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_tls_roots_password, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11092: object max_buf_size=None, # 100 * 1024 * 1024 - 100MiB
if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_max_buf_size, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11093: object retry_timeout=None, # default: 10000 milliseconds
if (!values[13]) values[13] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[13]) values[13] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_retry_timeout, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11094: object retry_max_backoff=None, # default: 1000 milliseconds
if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_retry_max_backoff, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11095: object request_min_throughput=None, # default: 100 * 1024 - 100KiB/s
if (!values[15]) values[15] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[15]) values[15] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_request_min_throughput, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11096: object request_timeout=None,
if (!values[16]) values[16] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[16]) values[16] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_request_timeout, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11097: object auto_flush=None, # Default True
if (!values[17]) values[17] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[17]) values[17] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_auto_flush, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11098: object auto_flush_rows=None, # Default 75000 (HTTP) or 600 (TCP)
if (!values[18]) values[18] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[18]) values[18] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11099: object auto_flush_bytes=None, # Default off (90% of the frame cap for ws and wss)
if (!values[19]) values[19] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[19]) values[19] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11100: object auto_flush_interval=None, # Default 1000 milliseconds
if (!values[20]) values[20] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[20]) values[20] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_auto_flush_interval, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11101: object max_datagram_size=None, # Default 1400 for QWP/UDP
if (!values[21]) values[21] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[21]) values[21] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_max_datagram_size, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11102: object multicast_ttl=None, # Default 1 for QWP/UDP
if (!values[22]) values[22] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[22]) values[22] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_multicast_ttl, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11103: object qwp_ws_progress=None, # Default background for QWP/WebSocket
if (!values[23]) values[23] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[23]) values[23] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11104: object error_handler=None,
if (!values[24]) values[24] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[24]) values[24] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_error_handler, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11105: object connection_listener=None,
if (!values[25]) values[25] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[26]) values[26] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); /* … */ if (!values[25]) values[25] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[26]) values[26] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_connection_listener, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
11106: object connection_event_inbox_capacity=0,
+11107: object protocol_version=None, # Default auto
if (!values[27]) values[27] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[27]) values[27] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_protocol_version, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11108: object init_buf_size=None, # 64KiB
if (!values[28]) values[28] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[28]) values[28] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_init_buf_size, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
+11109: object max_name_len=None): # 127
if (!values[29]) values[29] = __Pyx_NewRef(((PyObject *)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("from_conf", 1, 1, 1, i); __PYX_ERR(0, 11077, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 11077, __pyx_L3_error) /* … */ if (!values[29]) values[29] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_conf_str = ((PyObject*)values[0]); __pyx_v_bind_interface = ((PyObject*)values[1]); __pyx_v_username = ((PyObject*)values[2]); __pyx_v_password = ((PyObject*)values[3]); __pyx_v_token = ((PyObject*)values[4]); __pyx_v_token_x = ((PyObject*)values[5]); __pyx_v_token_y = ((PyObject*)values[6]); __pyx_v_auth_timeout = values[7]; __pyx_v_tls_verify = values[8]; __pyx_v_tls_ca = values[9]; __pyx_v_tls_roots = values[10]; __pyx_v_tls_roots_password = ((PyObject*)values[11]); __pyx_v_max_buf_size = values[12]; __pyx_v_retry_timeout = values[13]; __pyx_v_retry_max_backoff = values[14]; __pyx_v_request_min_throughput = values[15]; __pyx_v_request_timeout = values[16]; __pyx_v_auto_flush = values[17]; __pyx_v_auto_flush_rows = values[18]; __pyx_v_auto_flush_bytes = values[19]; __pyx_v_auto_flush_interval = values[20]; __pyx_v_max_datagram_size = values[21]; __pyx_v_multicast_ttl = values[22]; __pyx_v_qwp_ws_progress = values[23]; __pyx_v_error_handler = values[24]; __pyx_v_connection_listener = values[25]; __pyx_v_connection_event_inbox_capacity = values[26]; __pyx_v_protocol_version = values[27]; __pyx_v_init_buf_size = values[28]; __pyx_v_max_name_len = values[29]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("from_conf", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 11077, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Sender.from_conf", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_conf_str), (&PyUnicode_Type), 1, "conf_str", 1))) __PYX_ERR(0, 11079, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_bind_interface), (&PyUnicode_Type), 1, "bind_interface", 1))) __PYX_ERR(0, 11081, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_username), (&PyUnicode_Type), 1, "username", 1))) __PYX_ERR(0, 11082, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_password), (&PyUnicode_Type), 1, "password", 1))) __PYX_ERR(0, 11083, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 1, "token", 1))) __PYX_ERR(0, 11084, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_x), (&PyUnicode_Type), 1, "token_x", 1))) __PYX_ERR(0, 11085, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_y), (&PyUnicode_Type), 1, "token_y", 1))) __PYX_ERR(0, 11086, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tls_roots_password), (&PyUnicode_Type), 1, "tls_roots_password", 1))) __PYX_ERR(0, 11091, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_6Sender_4from_conf(__pyx_v_conf_str, __pyx_v_bind_interface, __pyx_v_username, __pyx_v_password, __pyx_v_token, __pyx_v_token_x, __pyx_v_token_y, __pyx_v_auth_timeout, __pyx_v_tls_verify, __pyx_v_tls_ca, __pyx_v_tls_roots, __pyx_v_tls_roots_password, __pyx_v_max_buf_size, __pyx_v_retry_timeout, __pyx_v_retry_max_backoff, __pyx_v_request_min_throughput, __pyx_v_request_timeout, __pyx_v_auto_flush, __pyx_v_auto_flush_rows, __pyx_v_auto_flush_bytes, __pyx_v_auto_flush_interval, __pyx_v_max_datagram_size, __pyx_v_multicast_ttl, __pyx_v_qwp_ws_progress, __pyx_v_error_handler, __pyx_v_connection_listener, __pyx_v_connection_event_inbox_capacity, __pyx_v_protocol_version, __pyx_v_init_buf_size, __pyx_v_max_name_len); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_max_name_len, Py_None) < (0)) __PYX_ERR(0, 11077, __pyx_L1_error)
11110: """
11111: Construct a sender from a :ref:`configuration string <sender_conf>`.
11112:
11113: The additional arguments are used to specify additional parameters
11114: which are not present in the configuration string.
11115:
11116: Note that any parameters already present in the configuration string
11117: cannot be overridden.
11118: """
11119:
+11120: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
11121: cdef object protocol
11122: cdef Sender sender
11123: cdef str synthetic_conf_str
11124: cdef line_sender_utf8 c_synthetic_conf_str
11125: cdef dict params
+11126: cdef qdb_pystr_buf* b = qdb_pystr_buf_new()
__pyx_v_b = qdb_pystr_buf_new();
+11127: try:
/*try:*/ {
+11128: protocol, params = parse_conf_str(b, conf_str)
__pyx_t_1 = __pyx_f_7questdb_7_client_parse_conf_str(__pyx_v_b, __pyx_v_conf_str); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11128, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 11128, __pyx_L4_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_3); } else { __pyx_t_2 = __Pyx_PyList_GET_ITEM_REF(sequence, 0, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11128, __pyx_L4_error) __Pyx_XGOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyList_GET_ITEM_REF(sequence, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11128, __pyx_L4_error) __Pyx_XGOTREF(__pyx_t_3); } #else __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11128, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11128, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11128, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < (0)) __PYX_ERR(0, 11128, __pyx_L4_error) __pyx_t_5 = NULL; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L7_unpacking_done; __pyx_L6_unpacking_failed:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 11128, __pyx_L4_error) __pyx_L7_unpacking_done:; } if (!(likely(PyDict_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_3))) __PYX_ERR(0, 11128, __pyx_L4_error) __pyx_v_protocol = __pyx_t_2; __pyx_t_2 = 0; __pyx_v_params = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
11129:
+11130: addr = params.get('addr')
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11130, __pyx_L4_error)
}
__pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_addr, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11130, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_v_addr = __pyx_t_1;
__pyx_t_1 = 0;
+11131: if addr is None:
__pyx_t_6 = (__pyx_v_addr == Py_None);
if (unlikely(__pyx_t_6)) {
/* … */
}
+11132: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11132, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
+11133: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11133, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11133, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Missing_addr_parameter_in_config}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11132, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11132, __pyx_L4_error)
11134: 'Missing "addr" parameter in config string')
11135:
11136: # add fields to the dictionary, so long as they aren't already
11137: # present in the params dictionary
+11138: for override_key, override_value in {
__pyx_t_9 = 0;
/* … */
while (1) {
/* … */
__Pyx_XDECREF_SET(__pyx_v_override_key, __pyx_t_7);
__pyx_t_7 = 0;
__Pyx_XDECREF_SET(__pyx_v_override_value, __pyx_t_2);
__pyx_t_2 = 0;
+11139: 'bind_interface': bind_interface,
__pyx_t_2 = __Pyx_PyDict_NewPresized(26); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11139, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_bind_interface, __pyx_v_bind_interface) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error) /* … */ __pyx_t_7 = __Pyx_dict_iterator(__pyx_t_2, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_10), (&__pyx_t_11)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11139, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = __pyx_t_7; __pyx_t_7 = 0; /* … */ __pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_10, &__pyx_t_9, &__pyx_t_7, &__pyx_t_2, NULL, __pyx_t_11); if (unlikely(__pyx_t_12 == 0)) break; if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 11139, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_GOTREF(__pyx_t_2);
+11140: 'username': username,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_username, __pyx_v_username) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11141: 'password': password,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_password, __pyx_v_password) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11142: 'token': token,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token, __pyx_v_token) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11143: 'token_x': token_x,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token_x, __pyx_v_token_x) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11144: 'token_y': token_y,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token_y, __pyx_v_token_y) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11145: 'auth_timeout': auth_timeout,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_auth_timeout, __pyx_v_auth_timeout) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11146: 'tls_verify': tls_verify,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_tls_verify, __pyx_v_tls_verify) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11147: 'tls_ca': tls_ca,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_tls_ca, __pyx_v_tls_ca) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11148: 'tls_roots': tls_roots,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_tls_roots, __pyx_v_tls_roots) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11149: 'tls_roots_password': tls_roots_password,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_tls_roots_password, __pyx_v_tls_roots_password) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11150: 'max_buf_size': max_buf_size,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_max_buf_size, __pyx_v_max_buf_size) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11151: 'retry_timeout': retry_timeout,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_retry_timeout, __pyx_v_retry_timeout) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11152: 'retry_max_backoff_millis': retry_max_backoff,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_retry_max_backoff_millis, __pyx_v_retry_max_backoff) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11153: 'request_min_throughput': request_min_throughput,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_request_min_throughput, __pyx_v_request_min_throughput) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11154: 'request_timeout': request_timeout,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_request_timeout, __pyx_v_request_timeout) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11155: 'auto_flush': auto_flush,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_auto_flush, __pyx_v_auto_flush) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11156: 'auto_flush_rows': auto_flush_rows,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, __pyx_v_auto_flush_rows) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11157: 'auto_flush_bytes': auto_flush_bytes,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, __pyx_v_auto_flush_bytes) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11158: 'auto_flush_interval': auto_flush_interval,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_auto_flush_interval, __pyx_v_auto_flush_interval) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11159: 'max_datagram_size': max_datagram_size,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_max_datagram_size, __pyx_v_max_datagram_size) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11160: 'multicast_ttl': multicast_ttl,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_multicast_ttl, __pyx_v_multicast_ttl) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11161: 'qwp_ws_progress': qwp_ws_progress,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress, __pyx_v_qwp_ws_progress) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11162: 'protocol_version': protocol_version,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_protocol_version, __pyx_v_protocol_version) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11163: 'init_buf_size': init_buf_size,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_init_buf_size, __pyx_v_init_buf_size) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
+11164: 'max_name_len': max_name_len,
if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_max_name_len, __pyx_v_max_name_len) < (0)) __PYX_ERR(0, 11139, __pyx_L4_error)
11165: }.items():
+11166: if override_value is None:
__pyx_t_6 = (__pyx_v_override_value == Py_None);
if (__pyx_t_6) {
/* … */
}
+11167: continue
goto __pyx_L9_continue;
+11168: if override_key in params:
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
__PYX_ERR(0, 11168, __pyx_L4_error)
}
__pyx_t_6 = (__Pyx_PyDict_ContainsTF(__pyx_v_override_key, __pyx_v_params, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 11168, __pyx_L4_error)
if (unlikely(__pyx_t_6)) {
/* … */
}
+11169: raise ValueError(
__pyx_t_7 = NULL;
+11170: f'"{override_key}" is already present in the conf_str '
__pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_override_key, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11170, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_13[0] = __pyx_mstate_global->__pyx_kp_u__38; __pyx_t_13[1] = __pyx_t_3; __pyx_t_13[2] = __pyx_mstate_global->__pyx_kp_u_is_already_present_in_the_conf; __pyx_t_14 = 63; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_14 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13[1]); #endif __pyx_t_12 = 0; #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH __pyx_t_12 |= __Pyx_PyUnicode_KIND_04(__pyx_t_13[1]); #endif __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_13, 3, __pyx_t_14, __pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11170, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_8 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_4}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11169, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 11169, __pyx_L4_error)
11171: 'and cannot be overridden.')
+11172: params[override_key] = override_value
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
__PYX_ERR(0, 11172, __pyx_L4_error)
}
if (unlikely((PyDict_SetItem(__pyx_v_params, __pyx_v_override_key, __pyx_v_override_value) < 0))) __PYX_ERR(0, 11172, __pyx_L4_error)
__pyx_L9_continue:;
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
11173:
+11174: sender = Sender.__new__(Sender)
__pyx_t_1 = ((PyObject *)__pyx_tp_new_7questdb_7_client_Sender(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11174, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_sender = ((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_t_1); __pyx_t_1 = 0;
11175:
11176: python_handled_keys = {
+11177: 'addr',
__pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11177, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_addr) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_bind_interface) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_username) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_password) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token_x) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token_y) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auth_timeout) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_verify) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_ca) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_roots) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_roots_password) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_max_buf_size) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_retry_timeout) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_retry_max_backoff_millis) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_request_min_throughput) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_request_timeout) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_rows) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_interval) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_max_datagram_size) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_multicast_ttl) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_protocol_version) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_init_buf_size) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_max_name_len) < (0)) __PYX_ERR(0, 11177, __pyx_L4_error) __pyx_v_python_handled_keys = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
11178: 'bind_interface',
11179: 'username',
11180: 'password',
11181: 'token',
11182: 'token_x',
11183: 'token_y',
11184: 'auth_timeout',
11185: 'tls_verify',
11186: 'tls_ca',
11187: 'tls_roots',
11188: 'tls_roots_password',
11189: 'max_buf_size',
11190: 'retry_timeout',
11191: 'retry_max_backoff_millis',
11192: 'request_min_throughput',
11193: 'request_timeout',
11194: 'auto_flush',
11195: 'auto_flush_rows',
11196: 'auto_flush_bytes',
11197: 'auto_flush_interval',
11198: 'max_datagram_size',
11199: 'multicast_ttl',
11200: 'qwp_ws_progress',
11201: 'protocol_version',
11202: 'init_buf_size',
11203: 'max_name_len',
11204: }
+11205: synthetic_params = {'addr': addr}
__pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11205, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_addr, __pyx_v_addr) < (0)) __PYX_ERR(0, 11205, __pyx_L4_error) __pyx_v_synthetic_params = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
+11206: if protocol in (Protocol.Ws, Protocol.Wss):
__Pyx_INCREF(__pyx_v_protocol); __pyx_t_1 = __pyx_v_protocol; __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11206, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_Ws); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11206, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_15 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_1, __pyx_t_4, Py_EQ); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 11206, __pyx_L4_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_15) { } else { __pyx_t_6 = __pyx_t_15; goto __pyx_L14_bool_binop_done; } __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11206, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_Wss); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11206, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_15 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_1, __pyx_t_2, Py_EQ); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 11206, __pyx_L4_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_6 = __pyx_t_15; __pyx_L14_bool_binop_done:; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_15 = __pyx_t_6; if (__pyx_t_15) { /* … */ }
+11207: for key, value in params.items():
__pyx_t_10 = 0;
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "items");
__PYX_ERR(0, 11207, __pyx_L4_error)
}
__pyx_t_2 = __Pyx_dict_iterator(__pyx_v_params, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_9), (&__pyx_t_11)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11207, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_1);
__pyx_t_1 = __pyx_t_2;
__pyx_t_2 = 0;
while (1) {
__pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_9, &__pyx_t_10, &__pyx_t_2, &__pyx_t_4, NULL, __pyx_t_11);
if (unlikely(__pyx_t_12 == 0)) break;
if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 11207, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_GOTREF(__pyx_t_4);
__Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_2);
__pyx_t_2 = 0;
__Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_4);
__pyx_t_4 = 0;
+11208: if key not in python_handled_keys:
__pyx_t_15 = (__Pyx_PySet_ContainsTF(__pyx_v_key, __pyx_v_python_handled_keys, Py_NE)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 11208, __pyx_L4_error) if (__pyx_t_15) { /* … */ } } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+11209: synthetic_params[key] = value
if (unlikely((PyDict_SetItem(__pyx_v_synthetic_params, __pyx_v_key, __pyx_v_value) < 0))) __PYX_ERR(0, 11209, __pyx_L4_error)
+11210: synthetic_conf_str = protocol.tag + '::' + ''.join(
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_protocol, __pyx_mstate_global->__pyx_n_u_tag); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11210, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyNumber_Add(__pyx_t_1, __pyx_mstate_global->__pyx_kp_u__35); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11210, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* … */ __pyx_t_2 = __Pyx_Generator_GetInlinedResult(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11210, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11210, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Add(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11210, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_2))) __PYX_ERR(0, 11210, __pyx_L4_error) __pyx_v_synthetic_conf_str = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
+11211: f'{key}={conf_str_value(value)};'
static PyObject *__pyx_pf_7questdb_7_client_6Sender_9from_conf_genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_14_genexpr *__pyx_cur_scope;
PyObject *__pyx_r = NULL;
__pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_14_genexpr *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_14_genexpr(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_14_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
if (unlikely(!__pyx_cur_scope)) {
__pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_14_genexpr *)Py_None);
__Pyx_INCREF(Py_None);
__PYX_ERR(0, 11211, __pyx_L1_error)
} else {
__Pyx_GOTREF((PyObject *)__pyx_cur_scope);
}
__pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
__Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
{
__pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7questdb_7_client_6Sender_9from_conf_2generator9, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[9]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_from_conf_locals_genexpr, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(0, 11211, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
}
/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client.Sender.from_conf.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__Pyx_DECREF((PyObject *)__pyx_cur_scope);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_6Sender_9from_conf_2generator9(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("genexpr", 0);
__pyx_L3_first_run:;
if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 11211, __pyx_L1_error)
__pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 11211, __pyx_L1_error)
__Pyx_GOTREF(__pyx_r);
/* … */
__pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_key, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11211, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_5 = __pyx_f_7questdb_7_client_conf_str_value(__pyx_cur_scope->__pyx_v_value); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11211, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11211, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_t_9[0] = __pyx_t_6;
__pyx_t_9[1] = __pyx_mstate_global->__pyx_kp_u__34;
__pyx_t_9[2] = __pyx_t_8;
__pyx_t_9[3] = __pyx_mstate_global->__pyx_kp_u__28;
__pyx_t_10 = 2;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9[0]) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9[2]);
#endif
__pyx_t_7 = 0;
#if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
__pyx_t_7 |= __Pyx_PyUnicode_KIND_04(__pyx_t_9[0]) | __Pyx_PyUnicode_KIND_04(__pyx_t_9[2]);
#endif
__pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_9, 4, __pyx_t_10, __pyx_t_7);
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11211, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_GIVEREF(__pyx_t_5);
if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_r, __pyx_t_5))) __PYX_ERR(0, 11211, __pyx_L1_error)
__pyx_t_5 = 0;
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_r); __pyx_r = 0;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_8);
if (__Pyx_PyErr_Occurred()) {
__Pyx_Generator_Replace_StopIteration(0);
__Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
}
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
#if !CYTHON_USE_EXC_INFO_STACK
__Pyx_Coroutine_ResetAndClearException(__pyx_generator);
#endif
__pyx_generator->resume_label = -1;
__Pyx_Coroutine_clear((PyObject*)__pyx_generator);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_1 = __pyx_pf_7questdb_7_client_6Sender_9from_conf_genexpr(NULL, __pyx_v_synthetic_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11211, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_1);
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_14_genexpr {
PyObject_HEAD
PyObject *__pyx_genexpr_arg_0;
PyObject *__pyx_v_key;
PyObject *__pyx_v_value;
};
+11212: for key, value in synthetic_params.items())
__pyx_t_2 = 0;
if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 11212, __pyx_L1_error) }
__pyx_t_5 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_genexpr_arg_0, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11212, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_1);
__pyx_t_1 = __pyx_t_5;
__pyx_t_5 = 0;
while (1) {
__pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, &__pyx_t_6, NULL, __pyx_t_4);
if (unlikely(__pyx_t_7 == 0)) break;
if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 11212, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_GOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_key);
__Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_key, __pyx_t_5);
__Pyx_GIVEREF(__pyx_t_5);
__pyx_t_5 = 0;
__Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_value);
__Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_value, __pyx_t_6);
__Pyx_GIVEREF(__pyx_t_6);
__pyx_t_6 = 0;
+11213: str_to_utf8(b, <PyObject*>synthetic_conf_str, &c_synthetic_conf_str)
__pyx_t_16 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_synthetic_conf_str), (&__pyx_v_c_synthetic_conf_str)); if (unlikely(__pyx_t_16 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11213, __pyx_L4_error)
+11214: sender._opts = line_sender_opts_from_conf(
__pyx_v_sender->_opts = line_sender_opts_from_conf(__pyx_v_c_synthetic_conf_str, (&__pyx_v_err));
11215: c_synthetic_conf_str, &err)
+11216: if sender._opts == NULL:
__pyx_t_15 = (__pyx_v_sender->_opts == NULL);
if (unlikely(__pyx_t_15)) {
/* … */
}
+11217: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11217, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 11217, __pyx_L4_error)
11218:
+11219: sender._set_sender_fields(
__pyx_t_16 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_sender->__pyx_vtab)->_set_sender_fields(__pyx_v_sender, __pyx_v_b, __pyx_v_protocol, ((PyObject*)__pyx_t_2), ((PyObject*)__pyx_t_1), ((PyObject*)__pyx_t_4), ((PyObject*)__pyx_t_7), ((PyObject*)__pyx_t_3), ((PyObject*)__pyx_t_17), __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_28, __pyx_t_29, __pyx_t_30, __pyx_t_31, __pyx_t_32, __pyx_t_33, __pyx_t_34, __pyx_t_35, __pyx_v_error_handler, __pyx_v_connection_listener, __pyx_v_connection_event_inbox_capacity, __pyx_t_36, __pyx_t_37); if (unlikely(__pyx_t_16 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11219, __pyx_L4_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0; __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0; __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0; __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0; __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0; __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0; __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0; __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0; __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0; __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0; __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0; __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0; __Pyx_DECREF(__pyx_t_34); __pyx_t_34 = 0; __Pyx_DECREF(__pyx_t_35); __pyx_t_35 = 0; __Pyx_DECREF(__pyx_t_36); __pyx_t_36 = 0; __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
11220: b,
11221: protocol,
+11222: params.get('bind_interface'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11222, __pyx_L4_error)
}
__pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_bind_interface, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11222, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_2))) __PYX_ERR(0, 11222, __pyx_L4_error)
+11223: params.get('username'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11223, __pyx_L4_error)
}
__pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_username, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11223, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_1);
if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(0, 11223, __pyx_L4_error)
+11224: params.get('password'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11224, __pyx_L4_error)
}
__pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_password, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11224, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_4);
if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_4))) __PYX_ERR(0, 11224, __pyx_L4_error)
+11225: params.get('token'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11225, __pyx_L4_error)
}
__pyx_t_7 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_token, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11225, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_7);
if (!(likely(PyUnicode_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_7))) __PYX_ERR(0, 11225, __pyx_L4_error)
+11226: params.get('token_x'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11226, __pyx_L4_error)
}
__pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_token_x, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11226, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_3);
if (!(likely(PyUnicode_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_3))) __PYX_ERR(0, 11226, __pyx_L4_error)
+11227: params.get('token_y'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11227, __pyx_L4_error)
}
__pyx_t_17 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_token_y, Py_None); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 11227, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_17);
if (!(likely(PyUnicode_CheckExact(__pyx_t_17))||((__pyx_t_17) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_17))) __PYX_ERR(0, 11227, __pyx_L4_error)
+11228: params.get('auth_timeout'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11228, __pyx_L4_error)
}
__pyx_t_18 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auth_timeout, Py_None); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11228, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_18);
+11229: params.get('tls_verify'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11229, __pyx_L4_error)
}
__pyx_t_19 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_tls_verify, Py_None); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11229, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_19);
+11230: params.get('tls_ca'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11230, __pyx_L4_error)
}
__pyx_t_20 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_tls_ca, Py_None); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 11230, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_20);
+11231: params.get('tls_roots'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11231, __pyx_L4_error)
}
__pyx_t_21 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_tls_roots, Py_None); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 11231, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_21);
+11232: params.get('tls_roots_password'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11232, __pyx_L4_error)
}
__pyx_t_22 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_tls_roots_password, Py_None); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 11232, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_22);
+11233: params.get('max_buf_size'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11233, __pyx_L4_error)
}
__pyx_t_23 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_max_buf_size, Py_None); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 11233, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_23);
+11234: params.get('retry_timeout'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11234, __pyx_L4_error)
}
__pyx_t_24 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_retry_timeout, Py_None); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 11234, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_24);
+11235: params.get('retry_max_backoff_millis'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11235, __pyx_L4_error)
}
__pyx_t_25 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_retry_max_backoff_millis, Py_None); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 11235, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_25);
+11236: params.get('request_min_throughput'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11236, __pyx_L4_error)
}
__pyx_t_26 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_request_min_throughput, Py_None); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 11236, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_26);
+11237: params.get('request_timeout'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11237, __pyx_L4_error)
}
__pyx_t_27 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_request_timeout, Py_None); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 11237, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_27);
+11238: params.get('auto_flush'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11238, __pyx_L4_error)
}
__pyx_t_28 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush, Py_None); if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 11238, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_28);
+11239: params.get('auto_flush_rows'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11239, __pyx_L4_error)
}
__pyx_t_29 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, Py_None); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 11239, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_29);
+11240: params.get('auto_flush_bytes'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11240, __pyx_L4_error)
}
__pyx_t_30 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, Py_None); if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 11240, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_30);
+11241: params.get('auto_flush_interval'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11241, __pyx_L4_error)
}
__pyx_t_31 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush_interval, Py_None); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 11241, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_31);
+11242: params.get('max_datagram_size'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11242, __pyx_L4_error)
}
__pyx_t_32 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_max_datagram_size, Py_None); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 11242, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_32);
+11243: params.get('multicast_ttl'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11243, __pyx_L4_error)
}
__pyx_t_33 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_multicast_ttl, Py_None); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 11243, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_33);
+11244: params.get('protocol_version'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11244, __pyx_L4_error)
}
__pyx_t_34 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_protocol_version, Py_None); if (unlikely(!__pyx_t_34)) __PYX_ERR(0, 11244, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_34);
+11245: params.get('qwp_ws_progress'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11245, __pyx_L4_error)
}
__pyx_t_35 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress, Py_None); if (unlikely(!__pyx_t_35)) __PYX_ERR(0, 11245, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_35);
11246: error_handler,
11247: connection_listener,
11248: connection_event_inbox_capacity,
+11249: params.get('init_buf_size'),
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11249, __pyx_L4_error)
}
__pyx_t_36 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_init_buf_size, Py_None); if (unlikely(!__pyx_t_36)) __PYX_ERR(0, 11249, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_36);
+11250: params.get('max_name_len'))
if (unlikely(__pyx_v_params == Py_None)) {
PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
__PYX_ERR(0, 11250, __pyx_L4_error)
}
__pyx_t_37 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_max_name_len, Py_None); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 11250, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_37);
11251:
+11252: return sender
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_sender);
__pyx_r = ((PyObject *)__pyx_v_sender);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L3_return;
}
11253: finally:
+11254: qdb_pystr_buf_free(b)
/*finally:*/ {
__pyx_L4_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_39 = 0; __pyx_t_40 = 0; __pyx_t_41 = 0; __pyx_t_42 = 0; __pyx_t_43 = 0; __pyx_t_44 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
__Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
__Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
__Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
__Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
__Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
__Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
__Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
__Pyx_XDECREF(__pyx_t_28); __pyx_t_28 = 0;
__Pyx_XDECREF(__pyx_t_29); __pyx_t_29 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_30); __pyx_t_30 = 0;
__Pyx_XDECREF(__pyx_t_31); __pyx_t_31 = 0;
__Pyx_XDECREF(__pyx_t_32); __pyx_t_32 = 0;
__Pyx_XDECREF(__pyx_t_33); __pyx_t_33 = 0;
__Pyx_XDECREF(__pyx_t_34); __pyx_t_34 = 0;
__Pyx_XDECREF(__pyx_t_35); __pyx_t_35 = 0;
__Pyx_XDECREF(__pyx_t_36); __pyx_t_36 = 0;
__Pyx_XDECREF(__pyx_t_37); __pyx_t_37 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_ExceptionSwap(&__pyx_t_42, &__pyx_t_43, &__pyx_t_44);
if ( unlikely(__Pyx_GetException(&__pyx_t_39, &__pyx_t_40, &__pyx_t_41) < 0)) __Pyx_ErrFetch(&__pyx_t_39, &__pyx_t_40, &__pyx_t_41);
__Pyx_XGOTREF(__pyx_t_39);
__Pyx_XGOTREF(__pyx_t_40);
__Pyx_XGOTREF(__pyx_t_41);
__Pyx_XGOTREF(__pyx_t_42);
__Pyx_XGOTREF(__pyx_t_43);
__Pyx_XGOTREF(__pyx_t_44);
__pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_38 = __pyx_filename;
{
qdb_pystr_buf_free(__pyx_v_b);
}
__Pyx_XGIVEREF(__pyx_t_42);
__Pyx_XGIVEREF(__pyx_t_43);
__Pyx_XGIVEREF(__pyx_t_44);
__Pyx_ExceptionReset(__pyx_t_42, __pyx_t_43, __pyx_t_44);
__Pyx_XGIVEREF(__pyx_t_39);
__Pyx_XGIVEREF(__pyx_t_40);
__Pyx_XGIVEREF(__pyx_t_41);
__Pyx_ErrRestore(__pyx_t_39, __pyx_t_40, __pyx_t_41);
__pyx_t_39 = 0; __pyx_t_40 = 0; __pyx_t_41 = 0; __pyx_t_42 = 0; __pyx_t_43 = 0; __pyx_t_44 = 0;
__pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_38;
goto __pyx_L1_error;
}
__pyx_L3_return: {
__pyx_t_44 = __pyx_r;
__pyx_r = 0;
qdb_pystr_buf_free(__pyx_v_b);
__pyx_r = __pyx_t_44;
__pyx_t_44 = 0;
goto __pyx_L0;
}
}
11255:
+11256: @staticmethod
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_7from_env(CYTHON_UNUSED PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_6from_env, "\n Construct a sender from the ``QDB_CLIENT_CONF`` environment variable.\n\n The environment variable must be set to a valid\n :ref:`configuration string <sender_conf>`.\n\n The additional arguments are used to specify additional parameters\n which are not present in the configuration string.\n\n Note that any parameters already present in the configuration string\n cannot be overridden.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_7from_env = {"from_env", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_7from_env, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_6from_env}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_7from_env(CYTHON_UNUSED PyObject *__pyx_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_bind_interface = 0; PyObject *__pyx_v_username = 0; PyObject *__pyx_v_password = 0; PyObject *__pyx_v_token = 0; PyObject *__pyx_v_token_x = 0; PyObject *__pyx_v_token_y = 0; PyObject *__pyx_v_auth_timeout = 0; PyObject *__pyx_v_tls_verify = 0; PyObject *__pyx_v_tls_ca = 0; PyObject *__pyx_v_tls_roots = 0; PyObject *__pyx_v_tls_roots_password = 0; PyObject *__pyx_v_max_buf_size = 0; PyObject *__pyx_v_retry_timeout = 0; PyObject *__pyx_v_retry_max_backoff = 0; PyObject *__pyx_v_request_min_throughput = 0; PyObject *__pyx_v_request_timeout = 0; PyObject *__pyx_v_auto_flush = 0; PyObject *__pyx_v_auto_flush_rows = 0; PyObject *__pyx_v_auto_flush_bytes = 0; PyObject *__pyx_v_auto_flush_interval = 0; PyObject *__pyx_v_max_datagram_size = 0; PyObject *__pyx_v_multicast_ttl = 0; PyObject *__pyx_v_qwp_ws_progress = 0; PyObject *__pyx_v_error_handler = 0; PyObject *__pyx_v_connection_listener = 0; PyObject *__pyx_v_connection_event_inbox_capacity = 0; PyObject *__pyx_v_protocol_version = 0; PyObject *__pyx_v_init_buf_size = 0; PyObject *__pyx_v_max_name_len = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("from_env (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_bind_interface,&__pyx_mstate_global->__pyx_n_u_username,&__pyx_mstate_global->__pyx_n_u_password,&__pyx_mstate_global->__pyx_n_u_token,&__pyx_mstate_global->__pyx_n_u_token_x,&__pyx_mstate_global->__pyx_n_u_token_y,&__pyx_mstate_global->__pyx_n_u_auth_timeout,&__pyx_mstate_global->__pyx_n_u_tls_verify,&__pyx_mstate_global->__pyx_n_u_tls_ca,&__pyx_mstate_global->__pyx_n_u_tls_roots,&__pyx_mstate_global->__pyx_n_u_tls_roots_password,&__pyx_mstate_global->__pyx_n_u_max_buf_size,&__pyx_mstate_global->__pyx_n_u_retry_timeout,&__pyx_mstate_global->__pyx_n_u_retry_max_backoff,&__pyx_mstate_global->__pyx_n_u_request_min_throughput,&__pyx_mstate_global->__pyx_n_u_request_timeout,&__pyx_mstate_global->__pyx_n_u_auto_flush,&__pyx_mstate_global->__pyx_n_u_auto_flush_rows,&__pyx_mstate_global->__pyx_n_u_auto_flush_bytes,&__pyx_mstate_global->__pyx_n_u_auto_flush_interval,&__pyx_mstate_global->__pyx_n_u_max_datagram_size,&__pyx_mstate_global->__pyx_n_u_multicast_ttl,&__pyx_mstate_global->__pyx_n_u_qwp_ws_progress,&__pyx_mstate_global->__pyx_n_u_error_handler,&__pyx_mstate_global->__pyx_n_u_connection_listener,&__pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity,&__pyx_mstate_global->__pyx_n_u_protocol_version,&__pyx_mstate_global->__pyx_n_u_init_buf_size,&__pyx_mstate_global->__pyx_n_u_max_name_len,0}; PyObject* values[29] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 11256, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 0: break; default: goto __pyx_L5_argtuple_error; } if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, 0, __pyx_kwds_len, "from_env", 0) < (0)) __PYX_ERR(0, 11256, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_6from_env(PyObject *__pyx_v_bind_interface, PyObject *__pyx_v_username, PyObject *__pyx_v_password, PyObject *__pyx_v_token, PyObject *__pyx_v_token_x, PyObject *__pyx_v_token_y, PyObject *__pyx_v_auth_timeout, PyObject *__pyx_v_tls_verify, PyObject *__pyx_v_tls_ca, PyObject *__pyx_v_tls_roots, PyObject *__pyx_v_tls_roots_password, PyObject *__pyx_v_max_buf_size, PyObject *__pyx_v_retry_timeout, PyObject *__pyx_v_retry_max_backoff, PyObject *__pyx_v_request_min_throughput, PyObject *__pyx_v_request_timeout, PyObject *__pyx_v_auto_flush, PyObject *__pyx_v_auto_flush_rows, PyObject *__pyx_v_auto_flush_bytes, PyObject *__pyx_v_auto_flush_interval, PyObject *__pyx_v_max_datagram_size, PyObject *__pyx_v_multicast_ttl, PyObject *__pyx_v_qwp_ws_progress, PyObject *__pyx_v_error_handler, PyObject *__pyx_v_connection_listener, PyObject *__pyx_v_connection_event_inbox_capacity, PyObject *__pyx_v_protocol_version, PyObject *__pyx_v_init_buf_size, PyObject *__pyx_v_max_name_len) { PyObject *__pyx_v_conf_str = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("questdb._client.Sender.from_env", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_conf_str); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_PyDict_NewPresized(29); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 11256, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); /* … */ __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_7from_env, __Pyx_CYFUNCTION_STATICMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_from_env, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[136])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11256, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19); #endif __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_19, __pyx_t_20); __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_from_env, __pyx_t_19) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __pyx_t_20 = NULL; __Pyx_GetNameInClass(__pyx_t_17, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_from_env); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 11256, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_20, __pyx_t_17}; __pyx_t_19 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_staticmethod, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11256, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); } if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_from_env, __pyx_t_19) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
11257: def from_env(
11258: *,
+11259: str bind_interface=None,
if (!values[0]) values[0] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[0]) values[0] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_bind_interface, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11260: str username=None,
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_username, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11261: str password=None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_password, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11262: str token=None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_token, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11263: str token_x=None,
if (!values[4]) values[4] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[4]) values[4] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_token_x, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11264: str token_y=None,
if (!values[5]) values[5] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[5]) values[5] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_token_y, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11265: object auth_timeout=None, # default: 15000 milliseconds
if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_auth_timeout, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11266: object tls_verify=None, # default: True
if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_tls_verify, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11267: object tls_ca=None, # TLS default: TlsCa.WebpkiAndOsRoots
if (!values[8]) values[8] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[8]) values[8] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_tls_ca, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11268: object tls_roots=None,
if (!values[9]) values[9] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[9]) values[9] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_tls_roots, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11269: str tls_roots_password=None,
if (!values[10]) values[10] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (!values[10]) values[10] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_tls_roots_password, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11270: object max_buf_size=None, # 100 * 1024 * 1024 - 100MiB
if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_max_buf_size, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11271: object retry_timeout=None, # default: 10000 milliseconds
if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_retry_timeout, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11272: object retry_max_backoff=None, # default: 1000 milliseconds
if (!values[13]) values[13] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[13]) values[13] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_retry_max_backoff, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11273: object request_min_throughput=None, # default: 100 * 1024 - 100KiB/s
if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_request_min_throughput, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11274: object request_timeout=None,
if (!values[15]) values[15] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[15]) values[15] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_request_timeout, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11275: object auto_flush=None, # Default True
if (!values[16]) values[16] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[16]) values[16] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_auto_flush, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11276: object auto_flush_rows=None, # Default 75000 (HTTP) or 600 (TCP)
if (!values[17]) values[17] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[17]) values[17] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11277: object auto_flush_bytes=None, # Default off (90% of the frame cap for ws and wss)
if (!values[18]) values[18] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[18]) values[18] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11278: object auto_flush_interval=None, # Default 1000 milliseconds
if (!values[19]) values[19] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[19]) values[19] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_auto_flush_interval, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11279: object max_datagram_size=None, # Default 1400 for QWP/UDP
if (!values[20]) values[20] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[20]) values[20] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_max_datagram_size, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11280: object multicast_ttl=None, # Default 1 for QWP/UDP
if (!values[21]) values[21] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[21]) values[21] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_multicast_ttl, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11281: object qwp_ws_progress=None, # Default background for QWP/WebSocket
if (!values[22]) values[22] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[22]) values[22] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11282: object error_handler=None,
if (!values[23]) values[23] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[23]) values[23] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_error_handler, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11283: object connection_listener=None,
if (!values[24]) values[24] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[25]) values[25] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); /* … */ if (!values[24]) values[24] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[25]) values[25] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_connection_listener, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
11284: object connection_event_inbox_capacity=0,
+11285: object protocol_version=None, # Default auto
if (!values[26]) values[26] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[26]) values[26] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_protocol_version, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11286: object init_buf_size=None, # 64KiB
if (!values[27]) values[27] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[27]) values[27] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_init_buf_size, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
+11287: object max_name_len=None): # 127
if (!values[28]) values[28] = __Pyx_NewRef(((PyObject *)Py_None)); } else if (unlikely(__pyx_nargs != 0)) { goto __pyx_L5_argtuple_error; } else { /* … */ if (!values[28]) values[28] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_bind_interface = ((PyObject*)values[0]); __pyx_v_username = ((PyObject*)values[1]); __pyx_v_password = ((PyObject*)values[2]); __pyx_v_token = ((PyObject*)values[3]); __pyx_v_token_x = ((PyObject*)values[4]); __pyx_v_token_y = ((PyObject*)values[5]); __pyx_v_auth_timeout = values[6]; __pyx_v_tls_verify = values[7]; __pyx_v_tls_ca = values[8]; __pyx_v_tls_roots = values[9]; __pyx_v_tls_roots_password = ((PyObject*)values[10]); __pyx_v_max_buf_size = values[11]; __pyx_v_retry_timeout = values[12]; __pyx_v_retry_max_backoff = values[13]; __pyx_v_request_min_throughput = values[14]; __pyx_v_request_timeout = values[15]; __pyx_v_auto_flush = values[16]; __pyx_v_auto_flush_rows = values[17]; __pyx_v_auto_flush_bytes = values[18]; __pyx_v_auto_flush_interval = values[19]; __pyx_v_max_datagram_size = values[20]; __pyx_v_multicast_ttl = values[21]; __pyx_v_qwp_ws_progress = values[22]; __pyx_v_error_handler = values[23]; __pyx_v_connection_listener = values[24]; __pyx_v_connection_event_inbox_capacity = values[25]; __pyx_v_protocol_version = values[26]; __pyx_v_init_buf_size = values[27]; __pyx_v_max_name_len = values[28]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("from_env", 1, 0, 0, __pyx_nargs); __PYX_ERR(0, 11256, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Sender.from_env", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_bind_interface), (&PyUnicode_Type), 1, "bind_interface", 1))) __PYX_ERR(0, 11259, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_username), (&PyUnicode_Type), 1, "username", 1))) __PYX_ERR(0, 11260, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_password), (&PyUnicode_Type), 1, "password", 1))) __PYX_ERR(0, 11261, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 1, "token", 1))) __PYX_ERR(0, 11262, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_x), (&PyUnicode_Type), 1, "token_x", 1))) __PYX_ERR(0, 11263, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_y), (&PyUnicode_Type), 1, "token_y", 1))) __PYX_ERR(0, 11264, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tls_roots_password), (&PyUnicode_Type), 1, "tls_roots_password", 1))) __PYX_ERR(0, 11269, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_6Sender_6from_env(__pyx_v_bind_interface, __pyx_v_username, __pyx_v_password, __pyx_v_token, __pyx_v_token_x, __pyx_v_token_y, __pyx_v_auth_timeout, __pyx_v_tls_verify, __pyx_v_tls_ca, __pyx_v_tls_roots, __pyx_v_tls_roots_password, __pyx_v_max_buf_size, __pyx_v_retry_timeout, __pyx_v_retry_max_backoff, __pyx_v_request_min_throughput, __pyx_v_request_timeout, __pyx_v_auto_flush, __pyx_v_auto_flush_rows, __pyx_v_auto_flush_bytes, __pyx_v_auto_flush_interval, __pyx_v_max_datagram_size, __pyx_v_multicast_ttl, __pyx_v_qwp_ws_progress, __pyx_v_error_handler, __pyx_v_connection_listener, __pyx_v_connection_event_inbox_capacity, __pyx_v_protocol_version, __pyx_v_init_buf_size, __pyx_v_max_name_len); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_max_name_len, Py_None) < (0)) __PYX_ERR(0, 11256, __pyx_L1_error)
11288: """
11289: Construct a sender from the ``QDB_CLIENT_CONF`` environment variable.
11290:
11291: The environment variable must be set to a valid
11292: :ref:`configuration string <sender_conf>`.
11293:
11294: The additional arguments are used to specify additional parameters
11295: which are not present in the configuration string.
11296:
11297: Note that any parameters already present in the configuration string
11298: cannot be overridden.
11299: """
+11300: cdef str conf_str = os.environ.get('QDB_CLIENT_CONF')
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_os); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11300, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_environ); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11300, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_2 = __pyx_t_4; __Pyx_INCREF(__pyx_t_2); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QDB_CLIENT_CONF}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11300, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(0, 11300, __pyx_L1_error) __pyx_v_conf_str = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
+11301: if conf_str is None:
__pyx_t_6 = (__pyx_v_conf_str == ((PyObject*)Py_None));
if (unlikely(__pyx_t_6)) {
/* … */
}
+11302: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11302, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
+11303: QuestDBErrorCode.ConfigError,
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11303, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_2, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Environment_variable_QDB_CLIENT}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11302, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11302, __pyx_L1_error)
11304: 'Environment variable QDB_CLIENT_CONF is not set.')
+11305: return Sender.from_conf(
__pyx_t_2 = ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender); __Pyx_INCREF(__pyx_t_2); /* … */ { PyObject* __pyx_temp[29] = {__pyx_mstate_global->__pyx_n_u_bind_interface, __pyx_mstate_global->__pyx_n_u_username, __pyx_mstate_global->__pyx_n_u_password, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_token_x, __pyx_mstate_global->__pyx_n_u_token_y, __pyx_mstate_global->__pyx_n_u_auth_timeout, __pyx_mstate_global->__pyx_n_u_tls_verify, __pyx_mstate_global->__pyx_n_u_tls_ca, __pyx_mstate_global->__pyx_n_u_tls_roots, __pyx_mstate_global->__pyx_n_u_tls_roots_password, __pyx_mstate_global->__pyx_n_u_max_buf_size, __pyx_mstate_global->__pyx_n_u_retry_timeout, __pyx_mstate_global->__pyx_n_u_retry_max_backoff, __pyx_mstate_global->__pyx_n_u_request_min_throughput, __pyx_mstate_global->__pyx_n_u_request_timeout, __pyx_mstate_global->__pyx_n_u_auto_flush, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, __pyx_mstate_global->__pyx_n_u_auto_flush_interval, __pyx_mstate_global->__pyx_n_u_max_datagram_size, __pyx_mstate_global->__pyx_n_u_multicast_ttl, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress, __pyx_mstate_global->__pyx_n_u_error_handler, __pyx_mstate_global->__pyx_n_u_connection_listener, __pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity, __pyx_mstate_global->__pyx_n_u_protocol_version, __pyx_mstate_global->__pyx_n_u_init_buf_size, __pyx_mstate_global->__pyx_n_u_max_name_len}; __pyx_mstate_global->__pyx_tuple[35] = __Pyx_PyTuple_FromArray(__pyx_temp, 29); if (unlikely(!__pyx_mstate_global->__pyx_tuple[35])) __PYX_ERR(0, 11305, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[35]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[35]);
11306: conf_str,
11307: bind_interface=bind_interface,
11308: username=username,
11309: password=password,
11310: token=token,
11311: token_x=token_x,
11312: token_y=token_y,
11313: auth_timeout=auth_timeout,
11314: tls_verify=tls_verify,
11315: tls_ca=tls_ca,
11316: tls_roots=tls_roots,
11317: tls_roots_password=tls_roots_password,
11318: max_buf_size=max_buf_size,
11319: retry_timeout=retry_timeout,
11320: retry_max_backoff=retry_max_backoff,
11321: request_min_throughput=request_min_throughput,
11322: request_timeout=request_timeout,
11323: auto_flush=auto_flush,
11324: auto_flush_rows=auto_flush_rows,
11325: auto_flush_bytes=auto_flush_bytes,
11326: auto_flush_interval=auto_flush_interval,
11327: max_datagram_size=max_datagram_size,
11328: multicast_ttl=multicast_ttl,
11329: qwp_ws_progress=qwp_ws_progress,
11330: error_handler=error_handler,
11331: connection_listener=connection_listener,
11332: connection_event_inbox_capacity=connection_event_inbox_capacity,
11333: protocol_version=protocol_version,
11334: init_buf_size=init_buf_size,
+11335: max_name_len=max_name_len)
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[31] = {__pyx_t_2, __pyx_v_conf_str, __pyx_v_bind_interface, __pyx_v_username, __pyx_v_password, __pyx_v_token, __pyx_v_token_x, __pyx_v_token_y, __pyx_v_auth_timeout, __pyx_v_tls_verify, __pyx_v_tls_ca, __pyx_v_tls_roots, __pyx_v_tls_roots_password, __pyx_v_max_buf_size, __pyx_v_retry_timeout, __pyx_v_retry_max_backoff, __pyx_v_request_min_throughput, __pyx_v_request_timeout, __pyx_v_auto_flush, __pyx_v_auto_flush_rows, __pyx_v_auto_flush_bytes, __pyx_v_auto_flush_interval, __pyx_v_max_datagram_size, __pyx_v_multicast_ttl, __pyx_v_qwp_ws_progress, __pyx_v_error_handler, __pyx_v_connection_listener, __pyx_v_connection_event_inbox_capacity, __pyx_v_protocol_version, __pyx_v_init_buf_size, __pyx_v_max_name_len};
#if CYTHON_VECTORCALL
__pyx_t_7 = __pyx_mstate_global->__pyx_tuple[35];
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11305, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_7);
#else
{
PyObject *__pyx_temp[29] = {__pyx_mstate_global->__pyx_n_u_bind_interface, __pyx_mstate_global->__pyx_n_u_username, __pyx_mstate_global->__pyx_n_u_password, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_token_x, __pyx_mstate_global->__pyx_n_u_token_y, __pyx_mstate_global->__pyx_n_u_auth_timeout, __pyx_mstate_global->__pyx_n_u_tls_verify, __pyx_mstate_global->__pyx_n_u_tls_ca, __pyx_mstate_global->__pyx_n_u_tls_roots, __pyx_mstate_global->__pyx_n_u_tls_roots_password, __pyx_mstate_global->__pyx_n_u_max_buf_size, __pyx_mstate_global->__pyx_n_u_retry_timeout, __pyx_mstate_global->__pyx_n_u_retry_max_backoff, __pyx_mstate_global->__pyx_n_u_request_min_throughput, __pyx_mstate_global->__pyx_n_u_request_timeout, __pyx_mstate_global->__pyx_n_u_auto_flush, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, __pyx_mstate_global->__pyx_n_u_auto_flush_interval, __pyx_mstate_global->__pyx_n_u_max_datagram_size, __pyx_mstate_global->__pyx_n_u_multicast_ttl, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress, __pyx_mstate_global->__pyx_n_u_error_handler, __pyx_mstate_global->__pyx_n_u_connection_listener, __pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity, __pyx_mstate_global->__pyx_n_u_protocol_version, __pyx_mstate_global->__pyx_n_u_init_buf_size, __pyx_mstate_global->__pyx_n_u_max_name_len};
__pyx_t_7 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 29);
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11305, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
}
#endif
__pyx_t_1 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_from_conf, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_7);
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11305, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_1;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_1 = 0;
goto __pyx_L0;
11336:
11337:
+11338: cdef inline object _new_buffer_for_sender(self):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Sender__new_buffer_for_sender(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf = 0;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.Sender._new_buffer_for_sender", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_buf);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+11339: cdef Buffer buf = Buffer.__new__(Buffer)
__pyx_t_1 = ((PyObject *)__pyx_tp_new_7questdb_7_client_Buffer(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11339, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_buf = ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_1); __pyx_t_1 = 0;
+11340: buf._impl = line_sender_buffer_new_for_sender(self._impl)
__pyx_v_buf->_impl = line_sender_buffer_new_for_sender(__pyx_v_self->_impl);
+11341: buf._b = qdb_pystr_buf_new()
__pyx_v_buf->_b = qdb_pystr_buf_new();
+11342: reserve_buffer(buf._impl, self._init_buf_size)
__pyx_t_2 = __pyx_f_7questdb_7_client_reserve_buffer(__pyx_v_buf->_impl, __pyx_v_self->_init_buf_size); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11342, __pyx_L1_error)
+11343: buf._init_buf_size = self._init_buf_size
__pyx_t_3 = __pyx_v_self->_init_buf_size; __pyx_v_buf->_init_buf_size = __pyx_t_3;
+11344: buf._max_name_len = line_sender_get_max_name_len(self._impl)
__pyx_v_buf->_max_name_len = line_sender_get_max_name_len(__pyx_v_self->_impl);
+11345: buf._qwp = (
__pyx_v_buf->_qwp = __pyx_t_4;
+11346: _is_qwp_udp_protocol(self._c_protocol) or
__pyx_t_5 = __pyx_f_7questdb_7_client__is_qwp_udp_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11346, __pyx_L1_error) if (!__pyx_t_5) { } else { __pyx_t_4 = __pyx_t_5; goto __pyx_L3_bool_binop_done; }
+11347: _is_qwp_ws_protocol(self._c_protocol))
__pyx_t_5 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11347, __pyx_L1_error) __pyx_t_4 = __pyx_t_5; __pyx_L3_bool_binop_done:;
+11348: return buf
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_buf);
__pyx_r = ((PyObject *)__pyx_v_buf);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
11349:
+11350: def new_buffer(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_9new_buffer(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_8new_buffer, "\n Make a new configured buffer.\n\n The buffer is set up with the configured `init_buf_size` and\n `max_name_len`, and matches the sender\047s protocol.\n\n Must be called after :func:`Sender.establish` and before\n :func:`Sender.close`; otherwise raises\n :class:`QuestDBError` (``InvalidApiCall``).\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_9new_buffer = {"new_buffer", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_9new_buffer, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_8new_buffer}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_9new_buffer(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("new_buffer (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("new_buffer", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("new_buffer", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_6Sender_8new_buffer(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_8new_buffer(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("questdb._client.Sender.new_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_9new_buffer, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_new_buffer, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[137])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11350, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_new_buffer, __pyx_t_19) < (0)) __PYX_ERR(0, 11350, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
11351: """
11352: Make a new configured buffer.
11353:
11354: The buffer is set up with the configured `init_buf_size` and
11355: `max_name_len`, and matches the sender's protocol.
11356:
11357: Must be called after :func:`Sender.establish` and before
11358: :func:`Sender.close`; otherwise raises
11359: :class:`QuestDBError` (``InvalidApiCall``).
11360: """
+11361: if self._impl == NULL:
__pyx_t_1 = (__pyx_v_self->_impl == NULL);
if (__pyx_t_1) {
/* … */
}
+11362: if self._opts == NULL:
__pyx_t_1 = (__pyx_v_self->_opts == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+11363: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11363, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+11364: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11364, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11364, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_new_buffer_can_t_be_called_Sende}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 11363, __pyx_L1_error)
11365: 'new_buffer() can\'t be called: Sender is closed.')
+11366: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11366, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
+11367: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11367, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11367, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_new_buffer_can_t_be_called_befor}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11366, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 11366, __pyx_L1_error)
11368: 'new_buffer() can\'t be called before establish().')
+11369: return self._new_buffer_for_sender()
__pyx_t_2 = __pyx_f_7questdb_7_client_6Sender__new_buffer_for_sender(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11369, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
11370:
+11371: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_13init_buf_size_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_13init_buf_size_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_6Sender_13init_buf_size___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Sender_13init_buf_size___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.Sender.init_buf_size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
11372: def init_buf_size(self) -> int:
11373: """The initial capacity of the sender's internal buffer."""
+11374: return self._init_buf_size
__pyx_t_1 = __Pyx_PyLong_FromSize_t(__pyx_v_self->_init_buf_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
11375:
+11376: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_12max_name_len_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_12max_name_len_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_6Sender_12max_name_len___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Sender_12max_name_len___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_AddTraceback("questdb._client.Sender.max_name_len.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
11377: def max_name_len(self) -> int:
11378: """Maximum length of a table or column name."""
+11379: if self._impl == NULL:
__pyx_t_1 = (__pyx_v_self->_impl == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+11380: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11380, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+11381: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11381, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11381, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_max_name_len_can_t_be_called_Sen}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11380, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 11380, __pyx_L1_error)
11382: 'max_name_len() can\'t be called: Sender is closed.')
+11383: return line_sender_get_max_name_len(self._impl)
__pyx_t_2 = __Pyx_PyLong_FromSize_t(line_sender_get_max_name_len(__pyx_v_self->_impl)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
11384:
+11385: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_10auto_flush_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_10auto_flush_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_6Sender_10auto_flush___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Sender_10auto_flush___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.Sender.auto_flush.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
11386: def auto_flush(self) -> bint:
11387: """
11388: Auto-flushing is enabled.
11389:
11390: Consult the `.auto_flush_rows`, `.auto_flush_bytes` and
11391: `.auto_flush_interval` properties for the current active thresholds.
11392:
11393: Over ``ws`` and ``wss`` the byte threshold is on by default, so
11394: auto-flush stays on with ``auto_flush_rows`` and
11395: ``auto_flush_interval`` both off. Pass ``auto_flush=off`` to batch
11396: by hand.
11397: """
+11398: return self._auto_flush_mode.enabled
__pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->_auto_flush_mode.enabled); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11398, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
11399:
+11400: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_15auto_flush_rows_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_15auto_flush_rows_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_6Sender_15auto_flush_rows___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Sender_15auto_flush_rows___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Sender.auto_flush_rows.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
11401: def auto_flush_rows(self) -> Optional[int]:
11402: """
11403: Row count threshold for the auto-flush logic, or None if disabled.
11404: """
+11405: if not self._auto_flush_mode.enabled:
__pyx_t_1 = (!__pyx_v_self->_auto_flush_mode.enabled);
if (__pyx_t_1) {
/* … */
}
+11406: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+11407: if self._auto_flush_mode.row_count == -1:
__pyx_t_1 = (__pyx_v_self->_auto_flush_mode.row_count == -1L);
if (__pyx_t_1) {
/* … */
}
+11408: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+11409: return self._auto_flush_mode.row_count
__pyx_t_2 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_auto_flush_mode.row_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11409, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
11410:
+11411: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_16auto_flush_bytes_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_16auto_flush_bytes_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_6Sender_16auto_flush_bytes___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Sender_16auto_flush_bytes___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
size_t __pyx_v_hard_cap;
bool __pyx_v_server_cap_known;
struct line_sender_error *__pyx_v_err;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.Sender.auto_flush_bytes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
11412: def auto_flush_bytes(self) -> Optional[int]:
11413: """
11414: Byte-count threshold for the auto-flush logic, or None if disabled or
11415: not yet known.
11416:
11417: Over ``ws`` and ``wss`` the threshold is at most 90% of the
11418: connection's frame cap, and by default it is 90% of that cap. The
11419: cap is known once :func:`Sender.establish` has connected, so before
11420: that the default reports ``None``. A server that does not advertise
11421: a cap counts as having QuestDB's default, 2 MiB less 14 bytes,
11422: unless the local limit is lower. An explicit threshold reads as
11423: configured before :func:`Sender.establish` and after
11424: :func:`Sender.close`; the cap lowers it only between the two.
11425:
11426: Raises :class:`QuestDBError <questdb.QuestDBError>`
11427: (``InvalidApiCall``) when read over ``ws`` or ``wss`` from this
11428: sender's own ``error_handler`` or ``connection_listener``.
11429: """
+11430: cdef size_t hard_cap = 0
__pyx_v_hard_cap = 0;
+11431: cdef cbool server_cap_known = False
__pyx_v_server_cap_known = 0;
+11432: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+11433: if not self._auto_flush_mode.enabled:
__pyx_t_1 = (!__pyx_v_self->_auto_flush_mode.enabled);
if (__pyx_t_1) {
/* … */
}
+11434: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+11435: if self._auto_flush_mode.byte_count == -1:
__pyx_t_1 = (__pyx_v_self->_auto_flush_mode.byte_count == -1L);
if (__pyx_t_1) {
/* … */
}
+11436: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+11437: if not _is_qwp_ws_protocol(self._c_protocol):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11437, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+11438: return self._auto_flush_mode.byte_count
__pyx_t_3 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_auto_flush_mode.byte_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11438, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
+11439: if self._impl == NULL:
__pyx_t_2 = (__pyx_v_self->_impl == NULL);
if (__pyx_t_2) {
/* … */
}
+11440: if self._auto_flush_bytes_dynamic:
if (__pyx_v_self->_auto_flush_bytes_dynamic) {
/* … */
}
+11441: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+11442: return self._auto_flush_mode.byte_count
__pyx_t_3 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_auto_flush_mode.byte_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11442, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
+11443: self._check_not_in_own_callback('auto_flush_bytes')
__pyx_t_4 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11443, __pyx_L1_error)
+11444: if not line_sender_qwpws_effective_frame_cap(
__pyx_t_2 = (!line_sender_qwpws_effective_frame_cap(__pyx_v_self->_impl, (&__pyx_v_hard_cap), (&__pyx_v_server_cap_known), (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
11445: self._impl, &hard_cap, &server_cap_known, &err):
+11446: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11446, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 11446, __pyx_L1_error)
+11447: return _qwp_row_byte_limit(
__pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_f_7questdb_7_client__qwp_row_byte_limit((&__pyx_v_self->_auto_flush_mode), __pyx_v_self->_auto_flush_bytes_dynamic, __pyx_f_7questdb_7_client__qwp_row_planning_cap(__pyx_v_hard_cap, __pyx_v_server_cap_known))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11447, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
11448: &self._auto_flush_mode,
11449: self._auto_flush_bytes_dynamic,
11450: _qwp_row_planning_cap(hard_cap, server_cap_known))
11451:
+11452: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_19auto_flush_interval_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_19auto_flush_interval_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_6Sender_19auto_flush_interval___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Sender_19auto_flush_interval___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_AddTraceback("questdb._client.Sender.auto_flush_interval.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
11453: def auto_flush_interval(self) -> Optional[datetime.timedelta]:
11454: """
11455: Time interval threshold for the auto-flush logic, or None if disabled.
11456: """
+11457: if not self._auto_flush_mode.enabled:
__pyx_t_1 = (!__pyx_v_self->_auto_flush_mode.enabled);
if (__pyx_t_1) {
/* … */
}
+11458: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+11459: if self._auto_flush_mode.interval == -1:
__pyx_t_1 = (__pyx_v_self->_auto_flush_mode.interval == -1L);
if (__pyx_t_1) {
/* … */
}
+11460: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+11461: return cp_timedelta(milliseconds=self._auto_flush_mode.interval)
__pyx_t_3 = NULL; __pyx_t_4 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_auto_flush_mode.interval); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11461, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_4}; #if CYTHON_VECTORCALL __pyx_t_6 = __pyx_mstate_global->__pyx_tuple[36]; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11461, __pyx_L1_error) __Pyx_INCREF(__pyx_t_6); #else { PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_milliseconds}; __pyx_t_6 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11461, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); } #endif __pyx_t_2 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11461, __pyx_L1_error) __Pyx_GOTREF((PyObject *)__pyx_t_2); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = ((PyObject *)__pyx_t_2); } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0; /* … */ { PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_milliseconds}; __pyx_mstate_global->__pyx_tuple[36] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[36])) __PYX_ERR(0, 11461, __pyx_L1_error) __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[36]); } __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[36]);
11462:
+11463: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_16protocol_version_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_16protocol_version_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_6Sender_16protocol_version___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Sender_16protocol_version___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_AddTraceback("questdb._client.Sender.protocol_version.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
11464: def protocol_version(self) -> int:
11465: """
11466: The protocol version used by the sender.
11467:
11468: Protocol version 1 is retained for backwards compatibility with
11469: older QuestDB versions.
11470:
11471: Protocol version 2 introduces binary floating point support and
11472: the array datatype.
11473: """
+11474: if self._impl == NULL:
__pyx_t_1 = (__pyx_v_self->_impl == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+11475: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11475, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+11476: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11476, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11476, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_protocol_version_can_t_be_called}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11475, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 11475, __pyx_L1_error)
11477: 'protocol_version() can\'t be called: Sender is closed.')
+11478: if _is_qwp_udp_protocol(self._c_protocol):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_qwp_udp_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11478, __pyx_L1_error) if (unlikely(__pyx_t_1)) { /* … */ }
+11479: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11479, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
+11480: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11480, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11480, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_protocol_version_is_not_applicab}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11479, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 11479, __pyx_L1_error)
11481: 'protocol_version is not applicable for QWP/UDP senders.')
+11482: return <int>line_sender_get_protocol_version(self._impl)
__pyx_t_2 = __Pyx_PyLong_From_int(((int)line_sender_get_protocol_version(__pyx_v_self->_impl))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11482, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
11483:
+11484: def establish(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_11establish(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_10establish, "\n Prepare the sender for use.\n\n If using ILP/HTTP this will initialize the HTTP connection pool.\n\n If using ILP/TCP this will cause connection to the server and \n block until the connection is established.\n\n If the TCP connection is set up with authentication and/or TLS, this\n method will return only *after* the handshake(s) is/are complete.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_11establish = {"establish", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_11establish, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_10establish}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_11establish(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("establish (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("establish", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("establish", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_6Sender_10establish(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_10establish(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) { struct line_sender_error *__pyx_v_err; PyThreadState *__pyx_v_gs; struct line_sender *__pyx_v_failed_impl; int __pyx_v_warn; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("questdb._client.Sender.establish", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_11establish, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_establish, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[138])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11484, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_establish, __pyx_t_19) < (0)) __PYX_ERR(0, 11484, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
11485: """
11486: Prepare the sender for use.
11487:
11488: If using ILP/HTTP this will initialize the HTTP connection pool.
11489:
11490: If using ILP/TCP this will cause connection to the server and
11491: block until the connection is established.
11492:
11493: If the TCP connection is set up with authentication and/or TLS, this
11494: method will return only *after* the handshake(s) is/are complete.
11495: """
+11496: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+11497: cdef PyThreadState * gs = NULL
__pyx_v_gs = NULL;
+11498: cdef line_sender* failed_impl = NULL
__pyx_v_failed_impl = NULL;
+11499: if self._opts == NULL:
__pyx_t_1 = (__pyx_v_self->_opts == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+11500: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11500, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+11501: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11501, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11501, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_establish_can_t_be_called_after}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11500, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 11500, __pyx_L1_error)
11502: 'establish() can\'t be called after close().')
11503:
11504: # We disable the GIL when calling `line_sender_build` since for HTTP
11505: # it can make HTTP requests to auto-detect the protocol version.
+11506: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+11507: self._impl = line_sender_build(self._opts, &err)
__pyx_v_self->_impl = line_sender_build(__pyx_v_self->_opts, (&__pyx_v_err));
+11508: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
11509:
+11510: if self._impl == NULL:
__pyx_t_1 = (__pyx_v_self->_impl == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+11511: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11511, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 11511, __pyx_L1_error)
11512:
+11513: if self._buffer is None:
__pyx_t_1 = (((PyObject *)__pyx_v_self->_buffer) == Py_None);
if (__pyx_t_1) {
/* … */
}
+11514: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
goto __pyx_L11_try_end;
__pyx_L6_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
__pyx_L8_except_error:;
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
goto __pyx_L1_error;
__pyx_L11_try_end:;
}
+11515: self._buffer = self._new_buffer_for_sender()
__pyx_t_2 = __pyx_f_7questdb_7_client_6Sender__new_buffer_for_sender(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11515, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_2); if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer))))) __PYX_ERR(0, 11515, __pyx_L6_error) __Pyx_GIVEREF(__pyx_t_2); __Pyx_GOTREF((PyObject *)__pyx_v_self->_buffer); __Pyx_DECREF((PyObject *)__pyx_v_self->_buffer); __pyx_v_self->_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_2); __pyx_t_2 = 0;
+11516: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client.Sender.establish", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_6) < 0) __PYX_ERR(0, 11516, __pyx_L8_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_6);
+11517: failed_impl = self._impl
__pyx_t_11 = __pyx_v_self->_impl;
__pyx_v_failed_impl = __pyx_t_11;
+11518: self._impl = NULL
__pyx_v_self->_impl = NULL;
+11519: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+11520: line_sender_close(failed_impl)
line_sender_close(__pyx_v_failed_impl);
+11521: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+11522: raise
__Pyx_GIVEREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_4); __Pyx_XGIVEREF(__pyx_t_6); __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_6); __pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_6 = 0; __PYX_ERR(0, 11522, __pyx_L8_except_error) }
11523:
+11524: line_sender_opts_free(self._opts)
line_sender_opts_free(__pyx_v_self->_opts);
+11525: self._opts = NULL
__pyx_v_self->_opts = NULL;
11526:
+11527: if self._dispatch_context is not None:
__pyx_t_1 = (__pyx_v_self->_dispatch_context != Py_None);
if (__pyx_t_1) {
/* … */
}
+11528: self._cb_refs_key = _retain_callback_refs(
__pyx_t_7 = __pyx_f_7questdb_7_client__retain_callback_refs(((PyObject *)__pyx_v_self), __pyx_t_6); if (unlikely(__pyx_t_7 == ((size_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 11528, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_self->_cb_refs_key = __pyx_t_7;
+11529: self, self._dispatch_context)
__pyx_t_6 = __pyx_v_self->_dispatch_context;
__Pyx_INCREF(__pyx_t_6);
11530:
11531: # Request callbacks when rows are complete.
+11532: self._buffer._row_complete_sender = PyWeakref_NewRef(self, None)
__pyx_t_6 = PyWeakref_NewRef(((PyObject *)__pyx_v_self), Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11532, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_6); __Pyx_GOTREF(__pyx_v_self->_buffer->_row_complete_sender); __Pyx_DECREF(__pyx_v_self->_buffer->_row_complete_sender); __pyx_v_self->_buffer->_row_complete_sender = __pyx_t_6; __pyx_t_6 = 0;
+11533: self._last_flush_ms[0] = line_sender_now_micros() // 1000
(__pyx_v_self->_last_flush_ms[0]) = __Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1);
11534:
11535: # Track and warn about overly quick reconnections to the server.
+11536: cdef bint warn = False
__pyx_v_warn = 0;
+11537: if WARN_HIGH_RECONNECTS:
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_WARN_HIGH_RECONNECTS); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11537, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 11537, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__pyx_t_1) { /* … */ }
+11538: self._slot_id = <int32_t> qdb_active_senders_track_established(&warn)
__pyx_v_self->_slot_id = ((int32_t)qdb_active_senders_track_established((&__pyx_v_warn)));
+11539: if warn:
if (__pyx_v_warn) {
/* … */
}
+11540: warnings.warn(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_warnings); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11540, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_warn); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11540, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_3))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_questdb_Sender_Detected_a_burst, ((PyObject *)(((PyTypeObject*)PyExc_UserWarning))), __pyx_mstate_global->__pyx_int_1};
#if CYTHON_VECTORCALL
__pyx_t_2 = __pyx_mstate_global->__pyx_tuple[20];
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11540, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_2);
#else
{
PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_stacklevel};
__pyx_t_2 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+3, 1);
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11540, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
#endif
__pyx_t_6 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_2);
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11540, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
}
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
11541: "questdb.Sender: "
11542: f"Detected a burst of reconnections. "
11543: "This may indicate an inefficient coding pattern where the sender is "
11544: "frequently created and destroyed. "
11545: "Consider reusing sender instance whenever possible."
11546: "See: https://py-questdb-client.readthedocs.io/en/latest/sender.html#reuse-sender-objects",
11547: UserWarning,
11548: stacklevel=1
11549: )
11550:
+11551: def __enter__(self) -> Sender:
/* Python wrapper */ static struct __pyx_obj_7questdb_7_client_Sender *__pyx_pw_7questdb_7_client_6Sender_13__enter__(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_12__enter__, "Call :func:`Sender.establish` at the start of a ``with`` block."); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_13__enter__ = {"__enter__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_13__enter__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_12__enter__}; static struct __pyx_obj_7questdb_7_client_Sender *__pyx_pw_7questdb_7_client_6Sender_13__enter__(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; struct __pyx_obj_7questdb_7_client_Sender *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__enter__ (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__enter__", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__enter__", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_6Sender_12__enter__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static struct __pyx_obj_7questdb_7_client_Sender *__pyx_pf_7questdb_7_client_6Sender_12__enter__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) { struct __pyx_obj_7questdb_7_client_Sender *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("questdb._client.Sender.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF((PyObject *)__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_19 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11551, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_Sender) < (0)) __PYX_ERR(0, 11551, __pyx_L1_error) __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_13__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender___enter, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[139])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 11551, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_17, __pyx_t_19); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_enter, __pyx_t_17) < (0)) __PYX_ERR(0, 11551, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
11552: """Call :func:`Sender.establish` at the start of a ``with`` block."""
+11553: self.establish()
__pyx_t_2 = ((PyObject *)__pyx_v_self); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_establish, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11553, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+11554: return self
{
struct __pyx_obj_7questdb_7_client_Sender *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_self);
__pyx_r = __pyx_v_self;
}
__Pyx_XDECREF((PyObject *)__pyx_temp);
}
goto __pyx_L0;
11555:
+11556: def __bytes__(self) -> bytes:
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_15__bytes__(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_14__bytes__, "\n Inspect the contents of the internal buffer.\n\n The ``bytes`` value returned represents the unsent data.\n\n For QWP/UDP senders this always returns ``b\047\047`` because encoding\n is deferred to flush. Use :func:`Sender.__len__` instead for a\n size estimate.\n\n Read from inside a part-written row this returns the buffer as\n it stands, with the last line unterminated; see\n :func:`Buffer.__bytes__` for why that is allowed where every\n call that acts on the buffer is refused.\n\n Also see :func:`Sender.__len__`.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_15__bytes__ = {"__bytes__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_15__bytes__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_14__bytes__}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_15__bytes__(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__bytes__ (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__bytes__", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__bytes__", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_6Sender_14__bytes__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_14__bytes__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client.Sender.__bytes__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 11556, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bytes) < (0)) __PYX_ERR(0, 11556, __pyx_L1_error) __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_15__bytes__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender___bytes, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[140])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11556, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19); #endif __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_19, __pyx_t_17); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_bytes_2, __pyx_t_19) < (0)) __PYX_ERR(0, 11556, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
11557: """
11558: Inspect the contents of the internal buffer.
11559:
11560: The ``bytes`` value returned represents the unsent data.
11561:
11562: For QWP/UDP senders this always returns ``b''`` because encoding
11563: is deferred to flush. Use :func:`Sender.__len__` instead for a
11564: size estimate.
11565:
11566: Read from inside a part-written row this returns the buffer as
11567: it stands, with the last line unterminated; see
11568: :func:`Buffer.__bytes__` for why that is allowed where every
11569: call that acts on the buffer is refused.
11570:
11571: Also see :func:`Sender.__len__`.
11572: """
+11573: if self._buffer is None:
__pyx_t_1 = (((PyObject *)__pyx_v_self->_buffer) == Py_None);
if (__pyx_t_1) {
/* … */
}
+11574: return b''
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_b__6);
__pyx_r = __pyx_mstate_global->__pyx_kp_b__6;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
11575: else:
+11576: return bytes(self._buffer)
/*else*/ {
__pyx_t_3 = NULL;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, ((PyObject *)__pyx_v_self->_buffer)};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(&PyBytes_Type), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11576, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = ((PyObject*)__pyx_t_2);
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_2 = 0;
goto __pyx_L0;
}
11577:
+11578: def __len__(self) -> int:
/* Python wrapper */ static Py_ssize_t __pyx_pw_7questdb_7_client_6Sender_17__len__(PyObject *__pyx_v_self); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_16__len__, "\n Number of bytes of unsent data in the internal buffer.\n\n Equivalent (but cheaper) to ``len(bytes(sender))`` over ILP.\n\n For QWP/UDP senders this returns an estimated size hint, not the\n exact serialized byte count. For QWP/WebSocket senders it is an\n estimate that is never below the size of the frame a flush\n encodes, unless store-and-forward has fallen back to sending full\n symbol dictionaries.\n "); #if CYTHON_UPDATE_DESCRIPTOR_DOC struct wrapperbase __pyx_wrapperbase_7questdb_7_client_6Sender_16__len__; #endif static Py_ssize_t __pyx_pw_7questdb_7_client_6Sender_17__len__(PyObject *__pyx_v_self) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; Py_ssize_t __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_7questdb_7_client_6Sender_16__len__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static Py_ssize_t __pyx_pf_7questdb_7_client_6Sender_16__len__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) { Py_ssize_t __pyx_r; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("questdb._client.Sender.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; }
11579: """
11580: Number of bytes of unsent data in the internal buffer.
11581:
11582: Equivalent (but cheaper) to ``len(bytes(sender))`` over ILP.
11583:
11584: For QWP/UDP senders this returns an estimated size hint, not the
11585: exact serialized byte count. For QWP/WebSocket senders it is an
11586: estimate that is never below the size of the frame a flush
11587: encodes, unless store-and-forward has fallen back to sending full
11588: symbol dictionaries.
11589: """
+11590: if self._buffer is None:
__pyx_t_1 = (((PyObject *)__pyx_v_self->_buffer) == Py_None);
if (__pyx_t_1) {
/* … */
}
+11591: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
11592: else:
+11593: return len(self._buffer)
/*else*/ {
__pyx_t_2 = ((PyObject *)__pyx_v_self->_buffer);
__Pyx_INCREF(__pyx_t_2);
__pyx_t_3 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(0, 11593, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
{
__pyx_r = __pyx_t_3;
}
goto __pyx_L0;
}
11594:
+11595: def transaction(self, table_name: str):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_19transaction(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_18transaction, "\n Start a :ref:`sender_transaction` block.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_19transaction = {"transaction", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_19transaction, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_18transaction}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_19transaction(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_table_name = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("transaction (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_table_name,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 11595, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 11595, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "transaction", 0) < (0)) __PYX_ERR(0, 11595, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("transaction", 1, 1, 1, i); __PYX_ERR(0, 11595, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 11595, __pyx_L3_error) } __pyx_v_table_name = ((PyObject*)values[0]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("transaction", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 11595, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Sender.transaction", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 0, "table_name", 2))) __PYX_ERR(0, 11595, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_6Sender_18transaction(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_table_name); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_18transaction(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_table_name) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("questdb._client.Sender.transaction", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_19 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11595, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 11595, __pyx_L1_error) __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_19transaction, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_transaction, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[141])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 11595, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_17, __pyx_t_19); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_transaction, __pyx_t_17) < (0)) __PYX_ERR(0, 11595, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
11596: """
11597: Start a :ref:`sender_transaction` block.
11598: """
11599: # The guard that protects a row in progress sits on
11600: # `SenderTransaction.__enter__` and `rollback()`, where the
11601: # transaction acts on the buffer: a transaction made earlier, or
11602: # constructed directly, reaches those without passing through
11603: # here. Refusing here as well names the call the caller made.
+11604: if self._buffer is not None:
__pyx_t_1 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
if (__pyx_t_1) {
/* … */
}
+11605: self._buffer._check_not_in_row('transaction')
__pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_buffer, __pyx_mstate_global->__pyx_n_u_transaction, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11605, __pyx_L1_error)
+11606: return SenderTransaction(self, table_name)
__pyx_t_4 = NULL;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[3] = {__pyx_t_4, ((PyObject *)__pyx_v_self), __pyx_v_table_name};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_SenderTransaction, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11606, __pyx_L1_error)
__Pyx_GOTREF((PyObject *)__pyx_t_3);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = ((PyObject *)__pyx_t_3);
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_3 = 0;
goto __pyx_L0;
11607:
+11608: def row(self,
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_21row(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_20row, "\n Write a row to the internal buffer.\n\n This may be sent automatically depending on the ``auto_flush`` setting\n in the constructor.\n\n See :func:`Buffer.row <questdb.ingress.Buffer.row>` for supported\n column types, protocol restrictions, server requirements, and\n ``NULL``-sentinel behavior.\n\n Raises :class:`QuestDBError <questdb.QuestDBError>`\n (``InvalidApiCall``) if called while another ``row()`` on this\n sender is still in progress, or a ``dataframe()`` over ``tcp``,\n ``http`` or ``udp``: from a column value whose conversion runs\n Python code, or from a logging handler that writes the ``questdb``\n logger\047s records through this sender. Such a ``dataframe()``\n writes the frame into this sender\047s buffer, and a row written while\n it runs could not be flushed until it returned. Over ``ws`` and\n ``wss`` the frame goes out on a connection of its own, so a row\n written from inside it is accepted and flushed as usual.\n\n Over ``ws`` and ``wss`` with auto-flush on, it also raises\n ``InvalidApiCall``, without adding the row, when called from this\n sender\047s own ``error_handler`` or ``connection_listener``. That\n includes a logging handler that writes the ``questdb`` logger\047s\n records through this sender while no ``error_handler`` is set, since\n server rejections are then logged from inside that callback.\n\n Over ``ws`` and ``wss``, auto-flush also publishes a buffer whose size\n estimate reaches the connection\047s frame cap, even with\n ``auto_flush_bytes=off``. Every published frame fits the frame cap:\n when the whole buffer does not, or its size estimate is past the\n cap, the rows buffered before this one go out as a frame of their\n own and this row starts the next batch, so one call publishes at\n most two frames. Re-adding the row"" converts its values a second\n time.\n\n Over ``ws`` and ``wss``, whatever this method raises, the row was not\n added. :class:`QuestDBError <questdb.QuestDBError>`\n (``BatchTooLarge``) means either it does not fit in a frame on its\n own, or the rows buffered before it do not fit even without it,\n which can happen after the frame cap shrinks, for example on\n reconnect; those rows are then discarded, and the error says how\n many. Any other error raised by a publish also clears the rows\n buffered before it, as :func:`Sender.flush` does.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_21row = {"row", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_21row, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_20row}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_21row(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_table_name = 0; PyObject *__pyx_v_symbols = 0; PyObject *__pyx_v_columns = 0; PyObject *__pyx_v_at = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("row (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_table_name,&__pyx_mstate_global->__pyx_n_u_at,&__pyx_mstate_global->__pyx_n_u_symbols,&__pyx_mstate_global->__pyx_n_u_columns,0}; PyObject* values[4] = {0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 11608, __pyx_L3_error) if (likely(__pyx_kwds_len > 0)) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 11608, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "row", 0) < (0)) __PYX_ERR(0, 11608, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_20row(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_table_name, PyObject *__pyx_v_symbols, PyObject *__pyx_v_columns, PyObject *__pyx_v_at) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("questdb._client.Sender.row", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 11608, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); /* … */ __pyx_t_19 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11608, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 11608, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Optional_str) < (0)) __PYX_ERR(0, 11608, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_columns, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Union_None_boo_2) < (0)) __PYX_ERR(0, 11608, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_TimestampNanos_datetime_da) < (0)) __PYX_ERR(0, 11608, __pyx_L1_error) __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_21row, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_row, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[142])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 11608, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20); #endif __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_20, __pyx_t_17); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_20, __pyx_t_19); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_row_2, __pyx_t_20) < (0)) __PYX_ERR(0, 11608, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
11609: table_name: str,
11610: *,
+11611: symbols: Optional[Dict[str, Optional[str]]]=None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_symbols, Py_None) < (0)) __PYX_ERR(0, 11608, __pyx_L1_error)
11612: columns: Optional[Dict[
11613: str,
11614: Union[None, bool, int, float, str, TimestampMicros,
11615: TimestampNanos, datetime.datetime, numpy.ndarray,
11616: Decimal, uuid.UUID, ipaddress.IPv4Address, bytes,
11617: bytearray, memoryview, Char, DateMillis, Long256,
+11618: Geohash]]]=None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("row", 1, 1, 1, i); __PYX_ERR(0, 11608, __pyx_L3_error) } } for (Py_ssize_t i = 1; i < 2; i++) { if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("row", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 11608, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { __Pyx_RaiseKeywordRequired("row", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 11608, __pyx_L3_error) } __pyx_v_table_name = ((PyObject*)values[0]); __pyx_v_at = values[1]; __pyx_v_symbols = ((PyObject*)values[2]); __pyx_v_columns = ((PyObject*)values[3]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("row", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 11608, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Sender.row", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 0, "table_name", 2))) __PYX_ERR(0, 11609, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_symbols), (&PyDict_Type), 1, "symbols", 2))) __PYX_ERR(0, 11611, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_columns), (&PyDict_Type), 1, "columns", 2))) __PYX_ERR(0, 11612, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_6Sender_20row(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_table_name, __pyx_v_symbols, __pyx_v_columns, __pyx_v_at); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_columns, Py_None) < (0)) __PYX_ERR(0, 11608, __pyx_L1_error)
11619: at: Union[TimestampNanos, datetime.datetime, ServerTimestampType]):
11620: """
11621: Write a row to the internal buffer.
11622:
11623: This may be sent automatically depending on the ``auto_flush`` setting
11624: in the constructor.
11625:
11626: See :func:`Buffer.row <questdb.ingress.Buffer.row>` for supported
11627: column types, protocol restrictions, server requirements, and
11628: ``NULL``-sentinel behavior.
11629:
11630: Raises :class:`QuestDBError <questdb.QuestDBError>`
11631: (``InvalidApiCall``) if called while another ``row()`` on this
11632: sender is still in progress, or a ``dataframe()`` over ``tcp``,
11633: ``http`` or ``udp``: from a column value whose conversion runs
11634: Python code, or from a logging handler that writes the ``questdb``
11635: logger's records through this sender. Such a ``dataframe()``
11636: writes the frame into this sender's buffer, and a row written while
11637: it runs could not be flushed until it returned. Over ``ws`` and
11638: ``wss`` the frame goes out on a connection of its own, so a row
11639: written from inside it is accepted and flushed as usual.
11640:
11641: Over ``ws`` and ``wss`` with auto-flush on, it also raises
11642: ``InvalidApiCall``, without adding the row, when called from this
11643: sender's own ``error_handler`` or ``connection_listener``. That
11644: includes a logging handler that writes the ``questdb`` logger's
11645: records through this sender while no ``error_handler`` is set, since
11646: server rejections are then logged from inside that callback.
11647:
11648: Over ``ws`` and ``wss``, auto-flush also publishes a buffer whose size
11649: estimate reaches the connection's frame cap, even with
11650: ``auto_flush_bytes=off``. Every published frame fits the frame cap:
11651: when the whole buffer does not, or its size estimate is past the
11652: cap, the rows buffered before this one go out as a frame of their
11653: own and this row starts the next batch, so one call publishes at
11654: most two frames. Re-adding the row converts its values a second
11655: time.
11656:
11657: Over ``ws`` and ``wss``, whatever this method raises, the row was not
11658: added. :class:`QuestDBError <questdb.QuestDBError>`
11659: (``BatchTooLarge``) means either it does not fit in a frame on its
11660: own, or the rows buffered before it do not fit even without it,
11661: which can happen after the frame cap shrinks, for example on
11662: reconnect; those rows are then discarded, and the error says how
11663: many. Any other error raised by a publish also clears the rows
11664: buffered before it, as :func:`Sender.flush` does.
11665: """
+11666: if self._in_txn:
if (unlikely(__pyx_v_self->_in_txn)) {
/* … */
}
+11667: raise QuestDBError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11667, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
+11668: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11668, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11668, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Cannot_append_rows_explicitly_in}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11667, __pyx_L1_error)
11669: 'Cannot append rows explicitly inside a transaction')
+11670: if at is None:
__pyx_t_7 = (__pyx_v_at == Py_None);
if (unlikely(__pyx_t_7)) {
/* … */
}
+11671: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11671, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+11672: QuestDBErrorCode.InvalidTimestamp,
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11672, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11672, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_4, __pyx_mstate_global->__pyx_kp_u_at_must_be_of_type_TimestampNan}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11671, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11671, __pyx_L1_error)
11673: "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
11674: )
+11675: if self._buffer is None:
__pyx_t_7 = (((PyObject *)__pyx_v_self->_buffer) == Py_None);
if (unlikely(__pyx_t_7)) {
/* … */
}
+11676: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11676, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+11677: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_2, __pyx_mstate_global->__pyx_kp_u_row_can_t_be_called_Sender_is_cl}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11676, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11676, __pyx_L1_error)
11678: "row() can\'t be called: Sender is closed."
11679: )
11680: # A row-serializing `dataframe()` holds this buffer from the
11681: # moment it starts and runs caller Python before its first row:
11682: # the `questdb` logger, an object column's sniff. A row written
11683: # there has an auto-flush that cannot run until that call
11684: # returns, so the row is refused before anything is written.
+11685: self._buffer._check_not_in_row(
__pyx_t_9.__pyx_n = 1;
__pyx_t_9.hint = __pyx_mstate_global->__pyx_kp_u_A_logging_handler_that_writes_th;
__pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_buffer, __pyx_mstate_global->__pyx_n_u_row_2, &__pyx_t_9); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11685, __pyx_L1_error)
11686: 'row',
11687: "A logging handler that writes the `questdb` logger's records "
11688: "through this same sender arrives here too; give it a Sender "
11689: "of its own.")
+11690: if _is_qwp_ws_protocol(self._c_protocol):
__pyx_t_7 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_7 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11690, __pyx_L1_error) if (__pyx_t_7) { /* … */ goto __pyx_L6; }
+11691: if self._auto_flush_mode.enabled:
if (__pyx_v_self->_auto_flush_mode.enabled) {
/* … */
}
11692: # Auto-flush reads the frame cap from the native sender on
11693: # every row, so a call from this sender's own callback is
11694: # refused before the row is added.
+11695: self._check_not_in_own_callback('row')
__pyx_t_8 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_row_2); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11695, __pyx_L1_error)
+11696: _qwp_row_append(
__pyx_t_8 = __pyx_f_7questdb_7_client__qwp_row_append(__pyx_v_self, ((struct __pyx_obj_7questdb_7_client_PooledSender *)Py_None), ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_1), __pyx_v_table_name, ((PyObject*)__pyx_v_symbols), __pyx_v_columns, __pyx_v_at); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11696, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+11697: self, None, self._buffer, table_name, symbols, columns, at)
__pyx_t_1 = ((PyObject *)__pyx_v_self->_buffer);
__Pyx_INCREF(__pyx_t_1);
11698: else:
+11699: self._buffer.row(
/*else*/ {
__pyx_t_4 = ((PyObject *)__pyx_v_self->_buffer);
__Pyx_INCREF(__pyx_t_4);
/* … */
{
PyObject* __pyx_temp[3] = {__pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_n_u_columns, __pyx_mstate_global->__pyx_n_u_at};
__pyx_mstate_global->__pyx_tuple[37] = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_mstate_global->__pyx_tuple[37])) __PYX_ERR(0, 11699, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[37]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[37]);
+11700: table_name, symbols=symbols, columns=columns, at=at)
__pyx_t_6 = 0;
{
PyObject *__pyx_callargs[5] = {__pyx_t_4, __pyx_v_table_name, __pyx_v_symbols, __pyx_v_columns, __pyx_v_at};
#if CYTHON_VECTORCALL
__pyx_t_2 = __pyx_mstate_global->__pyx_tuple[37];
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11699, __pyx_L1_error)
__Pyx_INCREF(__pyx_t_2);
#else
{
PyObject *__pyx_temp[3] = {__pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_n_u_columns, __pyx_mstate_global->__pyx_n_u_at};
__pyx_t_2 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 3);
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11699, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
#endif
__pyx_t_1 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_row_2, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_2);
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11699, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
}
__pyx_L6:;
+11701: return self
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_self);
__pyx_r = ((PyObject *)__pyx_v_self);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
11702:
+11703: def dataframe(
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_23dataframe(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_22dataframe, "\n Write a Pandas DataFrame to QuestDB.\n\n Over ILP/HTTP and ILP/TCP the frame is serialized into the internal\n row buffer; over QWP/UDP into fire-and-forget datagrams, with the\n same delivery caveats as ``row()``. Over QWP/WebSocket the frame is\n bulk-loaded through a poolless direct columnar connection opened from\n this sender\047s configuration for the call (the same direct path as\n :meth:`QuestDB.dataframe`, carrying the sender\047s auth/TLS regardless\n of how it was constructed); ``max_rows_per_batch`` applies only on\n that path, and passing ``schema_overrides`` on any other protocol\n raises. The direct load has no\n ordering relationship with rows buffered via :meth:`row` and does not\n flush them.\n\n ``table_name_col`` follows the same split. The row-serializing\n protocols accept it, because they can change table between rows.\n QWP/WebSocket writes one table per call and rejects it with\n :class:`UnsupportedDataFrameShapeError\n <questdb.UnsupportedDataFrameShapeError>`; split the frame and make\n one call per table, or send those rows with :meth:`row`.\n\n Example:\n\n .. code-block:: python\n\n import pandas as pd\n import questdb as qi\n\n df = pd.DataFrame({\n \047car\047: pd.Categorical([\047Nic 42\047, \047Eddi\047, \047Nic 42\047, \047Eddi\047]),\n \047position\047: [1, 2, 1, 2],\n \047speed\047: [89.3, 98.2, 3, 4],\n \047lat_gforce\047: [0.1, -0.2, -0.6, 0.4],\n \047accelleration\047: [0.1, -0.2, 0.6, 4.4],\n \047tyre_pressure\047: [2.6, 2.5, 2.6, 2.5],\n \047ts\047: [\n pd.Timestamp(\0472022-08-09 13:56:00\047),\n pd.Timestamp(\0472022-08-09 13:56:01\047),\n pd.Timestamp(\0472022-08-09 13:56:02\047),\n "" pd.Timestamp(\0472022-08-09 13:56:03\047)]})\n\n with qi.Sender.from_env() as sender:\n sender.dataframe(df, table_name=\047race_metrics\047, at=\047ts\047)\n\n Over QWP/WebSocket, supported column types and arguments mirror\n :meth:`QuestDB.dataframe <questdb.QuestDB.dataframe>`, including\n UUID, IPV4, BINARY, GEOHASH, LONG256, CHAR, DATE,\n ``schema_overrides`` and round-trip claims in\n ``df.attrs[\047questdb\047]``. Over ILP and QWP/UDP, see\n :func:`Buffer.dataframe <questdb.ingress.Buffer.dataframe>` for the\n row-serializing mappings; ``max_rows_per_batch`` and\n ``schema_overrides`` do not apply on those protocols.\n\n Additionally, this method also supports auto-flushing the buffer\n as specified in the ``Sender``\047s ``auto_flush`` constructor argument.\n Auto-flushing is implemented incrementally, meanting that when\n calling ``sender.dataframe(df)`` with a large ``df``, the sender may\n have sent some of the rows to the server already whist the rest of the\n rows are going to be sent at the next auto-flush or next explicit call\n to :func:`Sender.flush`.\n\n In case of data errors with auto-flushing enabled, some of the rows\n may have been transmitted to the server already.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_23dataframe = {"dataframe", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_23dataframe, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_22dataframe}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_23dataframe(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_df = 0; PyObject *__pyx_v_table_name = 0; PyObject *__pyx_v_table_name_col = 0; PyObject *__pyx_v_symbols = 0; PyObject *__pyx_v_at = 0; PyObject *__pyx_v_max_rows_per_batch = 0; PyObject *__pyx_v_schema_overrides = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("dataframe (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_df_2,&__pyx_mstate_global->__pyx_n_u_at,&__pyx_mstate_global->__pyx_n_u_table_name,&__pyx_mstate_global->__pyx_n_u_table_name_col,&__pyx_mstate_global->__pyx_n_u_symbols,&__pyx_mstate_global->__pyx_n_u_max_rows_per_batch,&__pyx_mstate_global->__pyx_n_u_schema_overrides_2,0}; PyObject* values[7] = {0,0,0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 11703, __pyx_L3_error) if (likely(__pyx_kwds_len > 0)) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 11703, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "dataframe", 0) < (0)) __PYX_ERR(0, 11703, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_22dataframe(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at, PyObject *__pyx_v_max_rows_per_batch, PyObject *__pyx_v_schema_overrides) { struct __pyx_t_7questdb_7_client_auto_flush_t __pyx_v_af; struct __pyx_t_7questdb_7_client_direct_conn_source_t __pyx_v_src; struct qdb_pystr_buf *__pyx_v_ws_b; struct __pyx_t_7questdb_7_client_dataframe_plan_t __pyx_v_ws_plan; struct line_sender_opts *__pyx_v_ws_opts; CYTHON_UNUSED PyObject *__pyx_v_ws_dispatch_context = 0; PyThreadState *__pyx_v_gs; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("questdb._client.Sender.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_ws_dispatch_context); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 11703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); /* … */ __pyx_t_19 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 11703, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_table_name_col, __pyx_mstate_global->__pyx_kp_u_Union_None_int_str) < (0)) __PYX_ERR(0, 11703, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Union_str_bool_List_int_List_str) < (0)) __PYX_ERR(0, 11703, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_int_st) < (0)) __PYX_ERR(0, 11703, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 11703, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_object) < (0)) __PYX_ERR(0, 11703, __pyx_L1_error) __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_23dataframe, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_dataframe, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[143])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 11703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_17, __pyx_t_20); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_17, __pyx_t_19); __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_dataframe, __pyx_t_17) < (0)) __PYX_ERR(0, 11703, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
11704: self,
11705: df, # : pd.DataFrame
11706: *,
+11707: table_name: Optional[str] = None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 11703, __pyx_L1_error)
+11708: table_name_col: Union[None, int, str] = None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_n_u_auto)); if (!values[5]) values[5] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__39); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_table_name_col, Py_None) < (0)) __PYX_ERR(0, 11703, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_n_u_auto) < (0)) __PYX_ERR(0, 11703, __pyx_L1_error)
11709: symbols: Union[str, bool, List[int], List[str]] = 'auto',
11710: at: Union[ServerTimestampType, int, str, TimestampNanos, datetime.datetime],
+11711: max_rows_per_batch: int = DEFAULT_MAX_CHUNK_ROWS,
__Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 11711, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); if (__Pyx_PyInt_FromNumber(&__pyx_t_20, NULL, 1) < (0)) __PYX_ERR(0, 11711, __pyx_L1_error) __pyx_mstate_global->__pyx_k__39 = ((PyObject*)__pyx_t_20); __Pyx_GIVEREF(__pyx_t_20); __pyx_t_20 = 0; /* … */ __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11711, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_PyInt_FromNumber(&__pyx_t_19, NULL, 1) < (0)) __PYX_ERR(0, 11711, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_t_19) < (0)) __PYX_ERR(0, 11703, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+11712: schema_overrides: Optional[Dict[str, object]] = None):
if (!values[6]) values[6] = __Pyx_NewRef(((PyObject*)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, i); __PYX_ERR(0, 11703, __pyx_L3_error) } } for (Py_ssize_t i = 1; i < 2; i++) { if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("dataframe", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 11703, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { __Pyx_RaiseKeywordRequired("dataframe", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 11703, __pyx_L3_error) } __pyx_v_df = values[0]; __pyx_v_at = values[1]; __pyx_v_table_name = ((PyObject*)values[2]); __pyx_v_table_name_col = values[3]; __pyx_v_symbols = values[4]; if (__Pyx_PyInt_FromNumber(&values[5], "max_rows_per_batch", 0) < (0)) __PYX_ERR(0, 11711, __pyx_L3_error) __pyx_v_max_rows_per_batch = ((PyObject*)values[5]); __pyx_v_schema_overrides = ((PyObject*)values[6]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 11703, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Sender.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 1, "table_name", 2))) __PYX_ERR(0, 11707, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_max_rows_per_batch), (&PyLong_Type), 0, "max_rows_per_batch", 2))) __PYX_ERR(0, 11711, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema_overrides), (&PyDict_Type), 1, "schema_overrides", 2))) __PYX_ERR(0, 11712, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_6Sender_22dataframe(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_v_max_rows_per_batch, __pyx_v_schema_overrides); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, Py_None) < (0)) __PYX_ERR(0, 11703, __pyx_L1_error)
11713: """
11714: Write a Pandas DataFrame to QuestDB.
11715:
11716: Over ILP/HTTP and ILP/TCP the frame is serialized into the internal
11717: row buffer; over QWP/UDP into fire-and-forget datagrams, with the
11718: same delivery caveats as ``row()``. Over QWP/WebSocket the frame is
11719: bulk-loaded through a poolless direct columnar connection opened from
11720: this sender's configuration for the call (the same direct path as
11721: :meth:`QuestDB.dataframe`, carrying the sender's auth/TLS regardless
11722: of how it was constructed); ``max_rows_per_batch`` applies only on
11723: that path, and passing ``schema_overrides`` on any other protocol
11724: raises. The direct load has no
11725: ordering relationship with rows buffered via :meth:`row` and does not
11726: flush them.
11727:
11728: ``table_name_col`` follows the same split. The row-serializing
11729: protocols accept it, because they can change table between rows.
11730: QWP/WebSocket writes one table per call and rejects it with
11731: :class:`UnsupportedDataFrameShapeError
11732: <questdb.UnsupportedDataFrameShapeError>`; split the frame and make
11733: one call per table, or send those rows with :meth:`row`.
11734:
11735: Example:
11736:
11737: .. code-block:: python
11738:
11739: import pandas as pd
11740: import questdb as qi
11741:
11742: df = pd.DataFrame({
11743: 'car': pd.Categorical(['Nic 42', 'Eddi', 'Nic 42', 'Eddi']),
11744: 'position': [1, 2, 1, 2],
11745: 'speed': [89.3, 98.2, 3, 4],
11746: 'lat_gforce': [0.1, -0.2, -0.6, 0.4],
11747: 'accelleration': [0.1, -0.2, 0.6, 4.4],
11748: 'tyre_pressure': [2.6, 2.5, 2.6, 2.5],
11749: 'ts': [
11750: pd.Timestamp('2022-08-09 13:56:00'),
11751: pd.Timestamp('2022-08-09 13:56:01'),
11752: pd.Timestamp('2022-08-09 13:56:02'),
11753: pd.Timestamp('2022-08-09 13:56:03')]})
11754:
11755: with qi.Sender.from_env() as sender:
11756: sender.dataframe(df, table_name='race_metrics', at='ts')
11757:
11758: Over QWP/WebSocket, supported column types and arguments mirror
11759: :meth:`QuestDB.dataframe <questdb.QuestDB.dataframe>`, including
11760: UUID, IPV4, BINARY, GEOHASH, LONG256, CHAR, DATE,
11761: ``schema_overrides`` and round-trip claims in
11762: ``df.attrs['questdb']``. Over ILP and QWP/UDP, see
11763: :func:`Buffer.dataframe <questdb.ingress.Buffer.dataframe>` for the
11764: row-serializing mappings; ``max_rows_per_batch`` and
11765: ``schema_overrides`` do not apply on those protocols.
11766:
11767: Additionally, this method also supports auto-flushing the buffer
11768: as specified in the ``Sender``'s ``auto_flush`` constructor argument.
11769: Auto-flushing is implemented incrementally, meanting that when
11770: calling ``sender.dataframe(df)`` with a large ``df``, the sender may
11771: have sent some of the rows to the server already whist the rest of the
11772: rows are going to be sent at the next auto-flush or next explicit call
11773: to :func:`Sender.flush`.
11774:
11775: In case of data errors with auto-flushing enabled, some of the rows
11776: may have been transmitted to the server already.
11777: """
+11778: cdef auto_flush_t af = auto_flush_blank()
__pyx_v_af = __pyx_f_7questdb_7_client_auto_flush_blank();
11779: cdef direct_conn_source_t src
+11780: cdef qdb_pystr_buf* ws_b = NULL
__pyx_v_ws_b = NULL;
11781: cdef dataframe_plan_t ws_plan
+11782: cdef line_sender_opts* ws_opts = NULL
__pyx_v_ws_opts = NULL;
+11783: cdef object ws_dispatch_context = None
__Pyx_INCREF(Py_None);
__pyx_v_ws_dispatch_context = Py_None;
+11784: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
11785: # The QWP/WebSocket branch below goes straight to its own
11786: # connection and never reaches `_dataframe`, where the same
11787: # check stands for every other route. Without it here, a frame
11788: # re-entered from a half-written row publishes ahead of the row
11789: # it interrupted and the order of the two silently inverts.
+11790: if self._buffer is not None:
__pyx_t_1 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
if (__pyx_t_1) {
/* … */
}
+11791: self._buffer._check_not_in_row('dataframe')
__pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_buffer, __pyx_mstate_global->__pyx_n_u_dataframe, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11791, __pyx_L1_error)
+11792: if _is_qwp_ws_protocol(self._c_protocol):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11792, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+11793: if self._qwp_ws_opts == NULL:
__pyx_t_1 = (__pyx_v_self->_qwp_ws_opts == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+11794: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11794, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+11795: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11795, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11795, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_dataframe_can_t_be_called_Sender}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11794, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 11794, __pyx_L1_error)
11796: "dataframe() can't be called: Sender is closed.")
11797: # The cloned opts below contain a borrowed pointer to this
11798: # context. Caller Python run while planning may close the Sender,
11799: # so keep the clone's callback target rooted in this frame until
11800: # the direct connection and its dispatchers have been torn down.
+11801: ws_dispatch_context = self._dispatch_context
__pyx_t_3 = __pyx_v_self->_dispatch_context;
__Pyx_INCREF(__pyx_t_3);
__Pyx_DECREF_SET(__pyx_v_ws_dispatch_context, __pyx_t_3);
__pyx_t_3 = 0;
+11802: src.db = NULL
__pyx_v_src.db = NULL;
11803: # The call owns its options for its whole length. The plan
11804: # build below runs caller Python -- reading `attrs`,
11805: # sniffing object cells, pulling an Arrow stream -- and any
11806: # of that can call `close()`, which frees the sender's own
11807: # options struct while `_direct_conn_open` has still to
11808: # read it. Owning a clone is what makes that harmless,
11809: # rather than a guard that has to name every route a close
11810: # can arrive through, and it leaves the row buffer's own
11811: # bookkeeping to mean only what it says.
+11812: ws_opts = line_sender_opts_clone(self._qwp_ws_opts)
__pyx_v_ws_opts = line_sender_opts_clone(__pyx_v_self->_qwp_ws_opts);
+11813: if ws_opts == NULL:
__pyx_t_1 = (__pyx_v_ws_opts == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+11814: raise MemoryError()
PyErr_NoMemory(); __PYX_ERR(0, 11814, __pyx_L1_error)
+11815: src.opts = ws_opts
__pyx_v_src.opts = __pyx_v_ws_opts;
+11816: ws_b = qdb_pystr_buf_new()
__pyx_v_ws_b = qdb_pystr_buf_new();
+11817: ws_plan = dataframe_plan_blank()
__pyx_v_ws_plan = __pyx_f_7questdb_7_client_dataframe_plan_blank();
+11818: try:
/*try:*/ {
+11819: _direct_dataframe_run(
__pyx_t_2 = __pyx_f_7questdb_7_client__direct_dataframe_run((&__pyx_v_src), 0.0, __pyx_v_ws_b, (&__pyx_v_ws_plan), __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_t_8, __pyx_v_schema_overrides); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11819, __pyx_L8_error)
11820: &src,
11821: 0.0,
11822: ws_b,
11823: &ws_plan,
11824: df,
11825: table_name,
11826: table_name_col,
11827: symbols,
11828: at,
+11829: max_rows_per_batch,
__pyx_t_8 = __Pyx_PyLong_As_size_t(__pyx_v_max_rows_per_batch); if (unlikely((__pyx_t_8 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 11829, __pyx_L8_error)
11830: schema_overrides)
+11831: return self
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_self);
__pyx_r = ((PyObject *)__pyx_v_self);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L7_return;
}
11832: finally:
+11833: qdb_pystr_buf_free(ws_b)
/*finally:*/ {
__pyx_L8_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__pyx_t_9 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_11 = __pyx_filename;
{
qdb_pystr_buf_free(__pyx_v_ws_b);
/* … */
qdb_pystr_buf_free(__pyx_v_ws_b);
+11834: if ws_opts != NULL:
__pyx_t_1 = (__pyx_v_ws_opts != NULL);
if (__pyx_t_1) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_ErrRestore(__pyx_t_12, __pyx_t_13, __pyx_t_14);
__pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
__pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_11;
goto __pyx_L1_error;
}
__pyx_L7_return: {
__pyx_t_17 = __pyx_r;
__pyx_r = 0;
/* … */
__pyx_t_1 = (__pyx_v_ws_opts != NULL);
if (__pyx_t_1) {
/* … */
}
__pyx_r = __pyx_t_17;
__pyx_t_17 = 0;
goto __pyx_L0;
}
}
11835: # The clone shares the sender's callback dispatcher
11836: # threads. After a `close()` during this call it is
11837: # their last owner, and freeing it joins them; a
11838: # callback still running needs the GIL to finish, so
11839: # the free runs without it, as in `Sender._close()`.
+11840: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
/* … */
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+11841: line_sender_opts_free(ws_opts)
line_sender_opts_free(__pyx_v_ws_opts);
/* … */
line_sender_opts_free(__pyx_v_ws_opts);
+11842: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
/* … */
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+11843: if schema_overrides is not None:
__pyx_t_1 = (__pyx_v_schema_overrides != ((PyObject*)Py_None));
if (unlikely(__pyx_t_1)) {
/* … */
}
+11844: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11844, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
+11845: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11845, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11845, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_schema_overrides_is_applied_when}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11844, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 11844, __pyx_L1_error)
11846: 'schema_overrides is applied when a frame is written a '
11847: 'column at a time, which is Sender.dataframe() over '
11848: 'ws:: / wss:: and QuestDB.dataframe(). This sender '
11849: 'writes a row at a time. Drop the argument, or connect '
11850: 'over ws:: / wss::.')
+11851: if self._in_txn:
if (unlikely(__pyx_v_self->_in_txn)) {
/* … */
}
+11852: raise QuestDBError(
__pyx_t_7 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11852, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
+11853: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11853, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11853, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_7); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Cannot_append_rows_explicitly_in}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11852, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 11852, __pyx_L1_error)
11854: 'Cannot append rows explicitly inside a transaction')
+11855: if at is None:
__pyx_t_1 = (__pyx_v_at == Py_None);
if (unlikely(__pyx_t_1)) {
/* … */
}
+11856: raise QuestDBError(
__pyx_t_6 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11856, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+11857: QuestDBErrorCode.InvalidTimestamp,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11857, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11857, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_6); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_at_must_be_of_type_TimestampNan}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11856, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 11856, __pyx_L1_error)
11858: "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
11859: )
+11860: if self._auto_flush_mode.enabled:
if (__pyx_v_self->_auto_flush_mode.enabled) {
/* … */
}
11861: # The field, not its contents: see `auto_flush_t`. `self` is
11862: # this call's receiver and outlives the run, so the address
11863: # stays good even when a mid-frame `close()` empties it.
+11864: af.sender_slot = &self._impl
__pyx_v_af.sender_slot = (&__pyx_v_self->_impl);
+11865: af.mode = self._auto_flush_mode
__pyx_t_18 = __pyx_v_self->_auto_flush_mode;
__pyx_v_af.mode = __pyx_t_18;
+11866: af.last_flush_ms = self._last_flush_ms
__pyx_t_19 = __pyx_v_self->_last_flush_ms;
__pyx_v_af.last_flush_ms = __pyx_t_19;
11867:
+11868: if self._buffer is None:
__pyx_t_1 = (((PyObject *)__pyx_v_self->_buffer) == Py_None);
if (unlikely(__pyx_t_1)) {
/* … */
}
+11869: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11869, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+11870: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11870, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11870, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_dataframe_can_t_be_called_Sender}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11869, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 11869, __pyx_L1_error)
11871: "dataframe() can\'t be called: Sender is closed."
11872: )
+11873: _dataframe(
__pyx_t_2 = __pyx_f_7questdb_7_client__dataframe(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_3), __pyx_v_af, __pyx_v_self->_buffer->_impl, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11873, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+11874: self._buffer,
__pyx_t_3 = ((PyObject *)__pyx_v_self->_buffer);
__Pyx_INCREF(__pyx_t_3);
11875: af,
11876: self._buffer._impl,
11877: df,
11878: table_name,
11879: table_name_col,
11880: symbols,
11881: at)
+11882: return self
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_self);
__pyx_r = ((PyObject *)__pyx_v_self);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
11883:
+11884: cpdef flush(
static PyObject *__pyx_pw_7questdb_7_client_6Sender_25flush(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_7questdb_7_client_6Sender_flush(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_7questdb_7_client_6Sender_flush *__pyx_optional_args) {
/* … */
/* Check if called by wrapper */
if (unlikely(__pyx_skip_dispatch)) ;
/* Check if overridden in Python */
else if (
#if !CYTHON_USE_TYPE_SLOTS
unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender &&
__Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
#else
unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
#endif
) {
#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
#endif
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_flush); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11884, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7questdb_7_client_6Sender_25flush)) {
__pyx_t_3 = NULL;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_4 = __pyx_t_1;
__pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_v_clear); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11884, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_transactional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11884, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[4] = {__pyx_t_3, ((PyObject *)__pyx_v_buffer), __pyx_t_5, __pyx_t_6};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (4-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11884, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_2;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L0;
}
#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
__pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
__pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
__pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
}
#endif
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
}
#endif
}
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_AddTraceback("questdb._client.Sender.flush", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_25flush(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_24flush, "\n If called with no arguments, immediately flushes the internal buffer.\n\n Alternatively you can flush a buffer that was constructed explicitly\n by passing ``buffer``.\n\n The buffer will be cleared by default, unless ``clear`` is set to\n ``False``.\n\n This method does nothing if the provided or internal buffer is empty.\n\n :param buffer: The buffer to flush. If ``None``, the internal buffer\n is flushed.\n\n With QWP/WebSocket, this publishes the buffer into the local sender\n queue and returns before the server necessarily ACKs the frame. Later\n terminal diagnostics fail subsequent sender calls and are available as\n :attr:`QuestDBError.sender_error`. Server diagnostics are also\n available through :func:`Sender.poll_error`.\n\n :param clear: If ``True``, the flushed buffer is cleared (default).\n If ``False``, the flushed buffer is left in the internal buffer.\n Note that ``clear=False`` is only supported if ``buffer`` is also\n specified.\n\n :param transactional: If ``True`` ensures that the flushed buffer\n contains row for a single table, ensuring all data can be written\n transactionally. This feature requires ILP/HTTP and is not available\n when connecting over TCP. *Default: False.*\n\n If the flush fails, the internal buffer is cleared, rows and all; a\n buffer passed as ``buffer`` is left as it is. Over QWP/WebSocket a\n buffer is published as one frame, and one whose encoded frame\n exceeds the connection\047s frame cap raises\n :class:`QuestDBError <questdb.QuestDBError>` (``BatchTooLarge``)\n without publishing anything.\n\n The Python GIL is released during the network IO operation.\n ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_25flush = {"flush", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_25flush, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_24flush};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_25flush(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer = 0;
int __pyx_v_clear;
int __pyx_v_transactional;
#if !CYTHON_VECTORCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("flush (wrapper)", 0);
#if !CYTHON_VECTORCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_buffer,&__pyx_mstate_global->__pyx_n_u_clear,&__pyx_mstate_global->__pyx_n_u_transactional,0};
PyObject* values[3] = {0,0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 11884, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 11884, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 11884, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 11884, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "flush", 0) < (0)) __PYX_ERR(0, 11884, __pyx_L3_error)
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = NULL;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
goto __pyx_L7_cleaned_up;
__pyx_L0:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__pyx_L7_cleaned_up:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Sender_24flush(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer, int __pyx_v_clear, int __pyx_v_transactional) {
PyObject *__pyx_r = NULL;
__pyx_t_2.__pyx_n = 3;
__pyx_t_2.buffer = __pyx_v_buffer;
__pyx_t_2.clear = __pyx_v_clear;
__pyx_t_2.transactional = __pyx_v_transactional;
__pyx_t_1 = __pyx_vtabptr_7questdb_7_client_Sender->flush(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11884, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_1;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_1 = 0;
goto __pyx_L0;
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.Sender.flush", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_25flush, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_flush, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[144])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 11884, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
#endif
__Pyx_CyFunction_SetDefaultsTuple(__pyx_t_17, __pyx_mstate_global->__pyx_tuple[71]);
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_flush, __pyx_t_17) < (0)) __PYX_ERR(0, 11884, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
/* … */
{
PyObject* __pyx_temp[3] = {Py_None, Py_True, Py_False};
__pyx_mstate_global->__pyx_tuple[71] = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_mstate_global->__pyx_tuple[71])) __PYX_ERR(0, 11884, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[71]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[71]);
/* … */
struct __pyx_opt_args_7questdb_7_client_6Sender_flush {
int __pyx_n;
struct __pyx_obj_7questdb_7_client_Buffer *buffer;
int clear;
int transactional;
};
11885: self,
+11886: Buffer buffer=None,
struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None);
/* … */
if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None));
} else {
switch (__pyx_nargs) {
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 11884, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 11884, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 11884, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None));
}
__pyx_v_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)values[0]);
if (values[1]) {
__pyx_v_clear = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_clear == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11887, __pyx_L3_error)
} else {
+11887: bint clear=True,
int __pyx_v_clear = ((int)1);
/* … */
__pyx_v_clear = ((int)1);
}
if (values[2]) {
__pyx_v_transactional = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_transactional == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11888, __pyx_L3_error)
} else {
+11888: bint transactional=False):
int __pyx_v_transactional = ((int)0);
struct line_sender_buffer *__pyx_v_c_buf;
PyObject *__pyx_r = NULL;
if (__pyx_optional_args) {
if (__pyx_optional_args->__pyx_n > 0) {
__pyx_v_buffer = __pyx_optional_args->buffer;
if (__pyx_optional_args->__pyx_n > 1) {
__pyx_v_clear = __pyx_optional_args->clear;
if (__pyx_optional_args->__pyx_n > 2) {
__pyx_v_transactional = __pyx_optional_args->transactional;
}
}
}
}
/* … */
__pyx_v_transactional = ((int)0);
}
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("flush", 0, 0, 3, __pyx_nargs); __PYX_ERR(0, 11884, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.Sender.flush", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_buffer), __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, 1, "buffer", 0))) __PYX_ERR(0, 11886, __pyx_L1_error)
__pyx_r = __pyx_pf_7questdb_7_client_6Sender_24flush(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_buffer, __pyx_v_clear, __pyx_v_transactional);
11889: """
11890: If called with no arguments, immediately flushes the internal buffer.
11891:
11892: Alternatively you can flush a buffer that was constructed explicitly
11893: by passing ``buffer``.
11894:
11895: The buffer will be cleared by default, unless ``clear`` is set to
11896: ``False``.
11897:
11898: This method does nothing if the provided or internal buffer is empty.
11899:
11900: :param buffer: The buffer to flush. If ``None``, the internal buffer
11901: is flushed.
11902:
11903: With QWP/WebSocket, this publishes the buffer into the local sender
11904: queue and returns before the server necessarily ACKs the frame. Later
11905: terminal diagnostics fail subsequent sender calls and are available as
11906: :attr:`QuestDBError.sender_error`. Server diagnostics are also
11907: available through :func:`Sender.poll_error`.
11908:
11909: :param clear: If ``True``, the flushed buffer is cleared (default).
11910: If ``False``, the flushed buffer is left in the internal buffer.
11911: Note that ``clear=False`` is only supported if ``buffer`` is also
11912: specified.
11913:
11914: :param transactional: If ``True`` ensures that the flushed buffer
11915: contains row for a single table, ensuring all data can be written
11916: transactionally. This feature requires ILP/HTTP and is not available
11917: when connecting over TCP. *Default: False.*
11918:
11919: If the flush fails, the internal buffer is cleared, rows and all; a
11920: buffer passed as ``buffer`` is left as it is. Over QWP/WebSocket a
11921: buffer is published as one frame, and one whose encoded frame
11922: exceeds the connection's frame cap raises
11923: :class:`QuestDBError <questdb.QuestDBError>` (``BatchTooLarge``)
11924: without publishing anything.
11925:
11926: The Python GIL is released during the network IO operation.
11927: """
+11928: cdef line_sender_buffer* c_buf = NULL
__pyx_v_c_buf = NULL;
11929:
+11930: self._check_not_in_own_callback('flush')
__pyx_t_8 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11930, __pyx_L1_error)
11931:
+11932: if self._in_txn:
if (unlikely(__pyx_v_self->_in_txn)) {
/* … */
}
+11933: raise QuestDBError(
__pyx_t_2 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11933, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+11934: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11934, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11934, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Cannot_flush_explicitly_inside_a}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11933, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11933, __pyx_L1_error)
11935: 'Cannot flush explicitly inside a transaction')
11936:
+11937: if buffer is None and not clear:
__pyx_t_10 = (((PyObject *)__pyx_v_buffer) == Py_None);
if (__pyx_t_10) {
} else {
__pyx_t_9 = __pyx_t_10;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_10 = (!__pyx_v_clear);
__pyx_t_9 = __pyx_t_10;
__pyx_L5_bool_binop_done:;
if (unlikely(__pyx_t_9)) {
/* … */
}
+11938: raise ValueError('The internal buffer must always be cleared.')
__pyx_t_4 = NULL;
__pyx_t_7 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_The_internal_buffer_must_always};
__pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11938, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 11938, __pyx_L1_error)
11939:
+11940: if self._impl == NULL:
__pyx_t_9 = (__pyx_v_self->_impl == NULL);
if (unlikely(__pyx_t_9)) {
/* … */
}
+11941: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11941, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+11942: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11942, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11942, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_flush_can_t_be_called_Sender_is}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11941, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 11941, __pyx_L1_error)
11943: 'flush() can\'t be called: Sender is closed.')
+11944: if buffer is not None:
__pyx_t_9 = (((PyObject *)__pyx_v_buffer) != Py_None);
if (__pyx_t_9) {
/* … */
goto __pyx_L8;
}
+11945: buffer._check_impl()
__pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_impl(__pyx_v_buffer); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11945, __pyx_L1_error)
+11946: self._check_buffer_protocol(buffer)
__pyx_t_8 = __pyx_f_7questdb_7_client_6Sender__check_buffer_protocol(__pyx_v_self, __pyx_v_buffer); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11946, __pyx_L1_error)
+11947: c_buf = buffer._impl
__pyx_t_11 = __pyx_v_buffer->_impl;
__pyx_v_c_buf = __pyx_t_11;
11948: else:
+11949: c_buf = self._buffer._impl
/*else*/ {
__pyx_t_11 = __pyx_v_self->_buffer->_impl;
__pyx_v_c_buf = __pyx_t_11;
}
__pyx_L8:;
11950: # Refused before the flush is attempted, and before the GIL is
11951: # released: a flush of a half-written row cannot succeed, and
11952: # the failure path clears the internal buffer, which would take
11953: # every finished row already in it with the part-written one.
+11954: (buffer if buffer is not None else self._buffer)._check_not_in_row(
__pyx_t_9 = (((PyObject *)__pyx_v_buffer) != Py_None);
if (__pyx_t_9) {
__Pyx_INCREF((PyObject *)__pyx_v_buffer);
__pyx_t_1 = ((PyObject *)__pyx_v_buffer);
} else {
__Pyx_INCREF((PyObject *)__pyx_v_self->_buffer);
__pyx_t_1 = ((PyObject *)__pyx_v_self->_buffer);
}
__pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_1), __pyx_mstate_global->__pyx_n_u_flush, NULL); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11954, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
11955: 'flush')
+11956: if line_sender_buffer_size(c_buf) == 0 and not _is_qwp_ws_protocol(self._c_protocol):
__pyx_t_10 = (line_sender_buffer_size(__pyx_v_c_buf) == 0);
if (__pyx_t_10) {
} else {
__pyx_t_9 = __pyx_t_10;
goto __pyx_L10_bool_binop_done;
}
__pyx_t_10 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_10 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11956, __pyx_L1_error)
__pyx_t_12 = (!__pyx_t_10);
__pyx_t_9 = __pyx_t_12;
__pyx_L10_bool_binop_done:;
if (__pyx_t_9) {
/* … */
}
+11957: return
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+11958: self._flush_c_buf(c_buf, clear, transactional, False)
__pyx_t_8 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->__pyx_vtab)->_flush_c_buf(__pyx_v_self, __pyx_v_c_buf, __pyx_v_clear, __pyx_v_transactional, 0); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11958, __pyx_L1_error)
11959:
+11960: cdef void_int _flush_c_buf(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__flush_c_buf(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, struct line_sender_buffer *__pyx_v_c_buf, int __pyx_v_clear, int __pyx_v_transactional, int __pyx_v_keep_on_batch_too_large) {
struct line_sender *__pyx_v_sender;
struct line_sender_error *__pyx_v_err;
PyThreadState *__pyx_v_gs;
int __pyx_v_ok;
PyObject *__pyx_v_exc = 0;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client.Sender._flush_c_buf", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
11961: self,
11962: line_sender_buffer* c_buf,
11963: bint clear,
11964: bint transactional,
11965: bint keep_on_batch_too_large) except -1:
11966: """
11967: Flush `c_buf`, which the caller has checked against this sender,
11968: with the GIL released.
11969:
11970: A failed flush of the internal buffer clears it. With
11971: `keep_on_batch_too_large`, a `BatchTooLarge` refusal leaves it
11972: intact instead: that refusal publishes nothing and leaves the sender
11973: usable, so the caller can rewind the row it just added and publish
11974: the rest.
11975: """
+11976: cdef line_sender* sender = self._impl
__pyx_t_1 = __pyx_v_self->_impl; __pyx_v_sender = __pyx_t_1;
+11977: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+11978: cdef PyThreadState* gs = NULL # GIL state. NULL means we have the GIL.
__pyx_v_gs = NULL;
+11979: cdef bint ok = False
__pyx_v_ok = 0;
11980: cdef object exc
11981:
11982: # Every publish of this sender's rows comes through here, including
11983: # auto-flush from `row()`, so the re-entry guard lives here too.
+11984: self._check_not_in_own_callback('flush')
__pyx_t_2 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11984, __pyx_L1_error)
+11985: if sender == NULL:
__pyx_t_3 = (__pyx_v_sender == NULL);
if (unlikely(__pyx_t_3)) {
/* … */
}
+11986: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11986, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
+11987: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11987, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11987, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_8, __pyx_mstate_global->__pyx_kp_u_flush_can_t_be_called_Sender_is}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11986, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 11986, __pyx_L1_error)
11988: 'flush() can\'t be called: Sender is closed.')
11989:
11990: # We might be blocking on IO, so temporarily release the GIL.
+11991: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+11992: if transactional:
if (__pyx_v_transactional) {
/* … */
goto __pyx_L4;
}
+11993: ok = line_sender_flush_and_keep_with_flags(
__pyx_v_ok = line_sender_flush_and_keep_with_flags(__pyx_v_sender, __pyx_v_c_buf, __pyx_v_transactional, (&__pyx_v_err));
11994: sender,
11995: c_buf,
11996: transactional,
11997: &err)
+11998: if ok and clear:
if (__pyx_v_ok) {
} else {
__pyx_t_3 = __pyx_v_ok;
goto __pyx_L6_bool_binop_done;
}
__pyx_t_3 = __pyx_v_clear;
__pyx_L6_bool_binop_done:;
if (__pyx_t_3) {
/* … */
}
+11999: line_sender_buffer_clear(c_buf)
line_sender_buffer_clear(__pyx_v_c_buf);
+12000: elif clear:
if (__pyx_v_clear) {
/* … */
goto __pyx_L4;
}
+12001: ok = line_sender_flush(sender, c_buf, &err)
__pyx_v_ok = line_sender_flush(__pyx_v_sender, __pyx_v_c_buf, (&__pyx_v_err));
12002: else:
+12003: ok = line_sender_flush_and_keep(sender, c_buf, &err)
/*else*/ {
__pyx_v_ok = line_sender_flush_and_keep(__pyx_v_sender, __pyx_v_c_buf, (&__pyx_v_err));
}
__pyx_L4:;
+12004: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12005: if ok and c_buf == self._buffer._impl:
if (__pyx_v_ok) {
} else {
__pyx_t_3 = __pyx_v_ok;
goto __pyx_L9_bool_binop_done;
}
__pyx_t_10 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);
__pyx_t_3 = __pyx_t_10;
__pyx_L9_bool_binop_done:;
if (__pyx_t_3) {
/* … */
}
+12006: self._last_flush_ms[0] = line_sender_now_micros() // 1000
(__pyx_v_self->_last_flush_ms[0]) = __Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1);
+12007: if not ok:
__pyx_t_3 = (!__pyx_v_ok);
if (__pyx_t_3) {
/* … */
}
+12008: if _is_tcp_protocol(self._c_protocol):
__pyx_t_3 = __pyx_f_7questdb_7_client__is_tcp_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_3 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12008, __pyx_L1_error) if (__pyx_t_3) { /* … */ goto __pyx_L12; }
12009: # Provide further context pointing to the logs.
+12010: exc = c_err_to_py_fmt(err, _FLUSH_FMT)
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_FLUSH_FMT); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12010, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_4))) __PYX_ERR(0, 12010, __pyx_L1_error) __pyx_t_6 = __pyx_f_7questdb_7_client_c_err_to_py_fmt(__pyx_v_err, ((PyObject*)__pyx_t_4)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12010, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_exc = __pyx_t_6; __pyx_t_6 = 0;
12011: else:
+12012: exc = c_err_to_py(err)
/*else*/ {
__pyx_t_6 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12012, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_v_exc = __pyx_t_6;
__pyx_t_6 = 0;
}
__pyx_L12:;
+12013: if c_buf == self._buffer._impl and not (
__pyx_t_10 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);
if (__pyx_t_10) {
} else {
__pyx_t_3 = __pyx_t_10;
goto __pyx_L14_bool_binop_done;
}
/* … */
__pyx_t_11 = (!__pyx_t_10);
__pyx_t_3 = __pyx_t_11;
__pyx_L14_bool_binop_done:;
if (__pyx_t_3) {
/* … */
}
+12014: keep_on_batch_too_large and
if (__pyx_v_keep_on_batch_too_large) {
} else {
__pyx_t_10 = __pyx_v_keep_on_batch_too_large;
goto __pyx_L16_bool_binop_done;
}
+12015: exc.code == QuestDBErrorCode.BatchTooLarge):
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12015, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12015, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12015, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_11 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_6, __pyx_t_8, Py_EQ); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 12015, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_10 = __pyx_t_11; __pyx_L16_bool_binop_done:;
12016: # Prevent a follow-up call to `.close(flush=True)` (as is
12017: # usually called from `__exit__`) to raise after the sender
12018: # entered an error state following a failed call to `.flush()`.
12019: # Note: In this case `clear` is always `True`.
+12020: line_sender_buffer_clear(c_buf)
line_sender_buffer_clear(__pyx_v_c_buf);
+12021: raise exc
__Pyx_Raise(__pyx_v_exc, 0, 0, 0); __PYX_ERR(0, 12021, __pyx_L1_error)
12022:
+12023: cdef inline void_int _check_not_in_own_callback(self, str method) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_method) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.Sender._check_not_in_own_callback", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
12024: # Native QWP/WebSocket callback dispatch keeps this sender borrowed.
12025: # Reentering the exact owner from either of its callbacks would alias
12026: # or free the live sender and abort the process. A callback function
12027: # shared with another sender does not carry this owner's token.
+12028: if _dispatching_for(self._thread_owner_token):
__pyx_t_1 = __pyx_v_self->_thread_owner_token; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = __pyx_f_7questdb_7_client__dispatching_for(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(__pyx_t_2)) { /* … */ }
+12029: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12029, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+12030: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12030, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12030, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+12031: f'{method}() cannot be called from within this sender\'s own '
__pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12031, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_cannot_be_called_from_within_th); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12031, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_7}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12029, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 12029, __pyx_L1_error)
12032: 'error_handler or connection_listener callback.')
12033:
+12034: cdef inline void_int _check_qwp_ws(self, str method) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_method) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.Sender._check_qwp_ws", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+12035: if self._impl == NULL:
__pyx_t_1 = (__pyx_v_self->_impl == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+12036: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12036, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+12037: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12037, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12037, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+12038: f'{method}() can\'t be called: Sender is closed.')
__pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12038, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_Sender_is_close); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12038, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_7}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12036, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 12036, __pyx_L1_error)
+12039: if not _is_qwp_ws_protocol(self._c_protocol):
__pyx_t_1 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12039, __pyx_L1_error) __pyx_t_9 = (!__pyx_t_1); if (unlikely(__pyx_t_9)) { /* … */ }
+12040: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12040, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
+12041: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12041, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12041, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+12042: f'{method}() is only supported for QWP/WebSocket senders.')
__pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12042, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_is_only_supported_for_QWP_WebSo); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12042, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_3, __pyx_t_5}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12040, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 12040, __pyx_L1_error)
+12043: self._check_not_in_own_callback(method)
__pyx_t_10 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_v_method); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12043, __pyx_L1_error)
12044:
+12045: cdef inline void_int _check_buffer_protocol(self, Buffer buffer) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__check_buffer_protocol(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer) {
int __pyx_v_need_qwp;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.Sender._check_buffer_protocol", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
12046: cdef bint need_qwp = (
+12047: _is_qwp_udp_protocol(self._c_protocol) or
__pyx_t_2 = __pyx_f_7questdb_7_client__is_qwp_udp_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12047, __pyx_L1_error) if (!__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L3_bool_binop_done; }
+12048: _is_qwp_ws_protocol(self._c_protocol))
__pyx_t_2 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12048, __pyx_L1_error) __pyx_t_1 = __pyx_t_2; __pyx_L3_bool_binop_done:; __pyx_v_need_qwp = __pyx_t_1;
+12049: if need_qwp and not buffer._qwp:
if (__pyx_v_need_qwp) {
} else {
__pyx_t_1 = __pyx_v_need_qwp;
goto __pyx_L6_bool_binop_done;
}
__pyx_t_2 = (!__pyx_v_buffer->_qwp);
__pyx_t_1 = __pyx_t_2;
__pyx_L6_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+12050: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12050, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+12051: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12051, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12051, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_QWP_sender_requires_a_QWP_buffer}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12050, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 12050, __pyx_L1_error)
12052: 'QWP sender requires a QWP buffer. Use Sender.new_buffer() '
12053: 'to build a matching buffer.')
+12054: if buffer._qwp and not need_qwp:
if (__pyx_v_buffer->_qwp) {
} else {
__pyx_t_1 = __pyx_v_buffer->_qwp;
goto __pyx_L9_bool_binop_done;
}
__pyx_t_2 = (!__pyx_v_need_qwp);
__pyx_t_1 = __pyx_t_2;
__pyx_L9_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+12055: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12055, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
+12056: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12056, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12056, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_ILP_sender_requires_an_ILP_buffe}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12055, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 12055, __pyx_L1_error)
12057: 'ILP sender requires an ILP buffer. Use Sender.new_buffer() '
12058: 'to build a matching buffer.')
12059:
+12060: def flush_and_get_fsn(self, Buffer buffer=None):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_27flush_and_get_fsn(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_26flush_and_get_fsn, "\n Publish a QWP/WebSocket buffer locally, clear it on success, and return\n the assigned frame sequence number.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_27flush_and_get_fsn = {"flush_and_get_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_27flush_and_get_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_26flush_and_get_fsn}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_27flush_and_get_fsn(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("flush_and_get_fsn (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_buffer,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 12060, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 12060, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "flush_and_get_fsn", 0) < (0)) __PYX_ERR(0, 12060, __pyx_L3_error) if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None)); } else { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 12060, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None)); } __pyx_v_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)values[0]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("flush_and_get_fsn", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 12060, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Sender.flush_and_get_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_buffer), __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, 1, "buffer", 0))) __PYX_ERR(0, 12060, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_6Sender_26flush_and_get_fsn(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_buffer); /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_26flush_and_get_fsn(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer) { struct line_sender *__pyx_v_sender; struct line_sender_error *__pyx_v_err; struct line_sender_buffer *__pyx_v_c_buf; struct line_sender_qwpws_fsn __pyx_v_fsn; PyThreadState *__pyx_v_gs; int __pyx_v_ok; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("questdb._client.Sender.flush_and_get_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_27flush_and_get_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_flush_and_get_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[145])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12060, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_17, __pyx_mstate_global->__pyx_tuple[49]); if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_flush_and_get_fsn, __pyx_t_17) < (0)) __PYX_ERR(0, 12060, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
12061: """
12062: Publish a QWP/WebSocket buffer locally, clear it on success, and return
12063: the assigned frame sequence number.
12064: """
+12065: cdef line_sender* sender = self._impl
__pyx_t_1 = __pyx_v_self->_impl; __pyx_v_sender = __pyx_t_1;
+12066: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+12067: cdef line_sender_buffer* c_buf = NULL
__pyx_v_c_buf = NULL;
12068: cdef line_sender_qwpws_fsn fsn
+12069: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+12070: cdef bint ok = False
__pyx_v_ok = 0;
12071:
+12072: if self._in_txn:
if (unlikely(__pyx_v_self->_in_txn)) {
/* … */
}
+12073: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12073, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+12074: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12074, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12074, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Cannot_flush_explicitly_inside_a}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12073, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 12073, __pyx_L1_error)
12075: 'Cannot flush explicitly inside a transaction')
+12076: self._check_qwp_ws('flush_and_get_fsn')
__pyx_t_8 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush_and_get_fsn); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12076, __pyx_L1_error)
+12077: if buffer is not None:
__pyx_t_9 = (((PyObject *)__pyx_v_buffer) != Py_None);
if (__pyx_t_9) {
/* … */
goto __pyx_L4;
}
+12078: buffer._check_impl()
__pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_impl(__pyx_v_buffer); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12078, __pyx_L1_error)
+12079: self._check_buffer_protocol(buffer)
__pyx_t_8 = __pyx_f_7questdb_7_client_6Sender__check_buffer_protocol(__pyx_v_self, __pyx_v_buffer); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12079, __pyx_L1_error)
+12080: c_buf = buffer._impl
__pyx_t_10 = __pyx_v_buffer->_impl;
__pyx_v_c_buf = __pyx_t_10;
12081: else:
+12082: c_buf = self._buffer._impl
/*else*/ {
__pyx_t_10 = __pyx_v_self->_buffer->_impl;
__pyx_v_c_buf = __pyx_t_10;
}
__pyx_L4:;
+12083: (buffer if buffer is not None else self._buffer)._check_not_in_row(
__pyx_t_9 = (((PyObject *)__pyx_v_buffer) != Py_None);
if (__pyx_t_9) {
__Pyx_INCREF((PyObject *)__pyx_v_buffer);
__pyx_t_2 = ((PyObject *)__pyx_v_buffer);
} else {
__Pyx_INCREF((PyObject *)__pyx_v_self->_buffer);
__pyx_t_2 = ((PyObject *)__pyx_v_self->_buffer);
}
__pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_2), __pyx_mstate_global->__pyx_n_u_flush_and_get_fsn, NULL); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12083, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
12084: 'flush_and_get_fsn')
12085:
+12086: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+12087: ok = line_sender_qwpws_flush_and_get_fsn(sender, c_buf, &fsn, &err)
__pyx_v_ok = line_sender_qwpws_flush_and_get_fsn(__pyx_v_sender, __pyx_v_c_buf, (&__pyx_v_fsn), (&__pyx_v_err));
+12088: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12089: if not ok:
__pyx_t_9 = (!__pyx_v_ok);
if (__pyx_t_9) {
/* … */
}
+12090: if c_buf == self._buffer._impl:
__pyx_t_9 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);
if (__pyx_t_9) {
/* … */
}
+12091: line_sender_buffer_clear(c_buf)
line_sender_buffer_clear(__pyx_v_c_buf);
+12092: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12092, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 12092, __pyx_L1_error)
+12093: if c_buf == self._buffer._impl:
__pyx_t_9 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);
if (__pyx_t_9) {
/* … */
}
+12094: self._last_flush_ms[0] = line_sender_now_micros() // 1000
(__pyx_v_self->_last_flush_ms[0]) = __Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1);
+12095: if fsn.has_value:
__pyx_t_9 = (__pyx_v_fsn.has_value != 0);
if (__pyx_t_9) {
/* … */
}
+12096: return fsn.value
__pyx_t_2 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12096, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+12097: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
12098:
+12099: def flush_and_keep_and_get_fsn(self, Buffer buffer=None):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_29flush_and_keep_and_get_fsn(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_28flush_and_keep_and_get_fsn, "\n Publish a QWP/WebSocket buffer locally without clearing it and return\n the assigned frame sequence number.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_29flush_and_keep_and_get_fsn = {"flush_and_keep_and_get_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_29flush_and_keep_and_get_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_28flush_and_keep_and_get_fsn}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_29flush_and_keep_and_get_fsn(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("flush_and_keep_and_get_fsn (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_buffer,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 12099, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 12099, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "flush_and_keep_and_get_fsn", 0) < (0)) __PYX_ERR(0, 12099, __pyx_L3_error) if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None)); } else { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 12099, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None)); } __pyx_v_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)values[0]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("flush_and_keep_and_get_fsn", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 12099, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Sender.flush_and_keep_and_get_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_buffer), __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, 1, "buffer", 0))) __PYX_ERR(0, 12099, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_6Sender_28flush_and_keep_and_get_fsn(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_buffer); /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_28flush_and_keep_and_get_fsn(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer) { struct line_sender *__pyx_v_sender; struct line_sender_error *__pyx_v_err; struct line_sender_buffer *__pyx_v_c_buf; struct line_sender_qwpws_fsn __pyx_v_fsn; PyThreadState *__pyx_v_gs; int __pyx_v_ok; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("questdb._client.Sender.flush_and_keep_and_get_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_29flush_and_keep_and_get_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_flush_and_keep_and_get_fs, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[146])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12099, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_17, __pyx_mstate_global->__pyx_tuple[49]); if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_flush_and_keep_and_get_fsn, __pyx_t_17) < (0)) __PYX_ERR(0, 12099, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
12100: """
12101: Publish a QWP/WebSocket buffer locally without clearing it and return
12102: the assigned frame sequence number.
12103: """
+12104: cdef line_sender* sender = self._impl
__pyx_t_1 = __pyx_v_self->_impl; __pyx_v_sender = __pyx_t_1;
+12105: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+12106: cdef line_sender_buffer* c_buf = NULL
__pyx_v_c_buf = NULL;
12107: cdef line_sender_qwpws_fsn fsn
+12108: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+12109: cdef bint ok = False
__pyx_v_ok = 0;
12110:
+12111: if self._in_txn:
if (unlikely(__pyx_v_self->_in_txn)) {
/* … */
}
+12112: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12112, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+12113: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12113, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12113, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Cannot_flush_explicitly_inside_a}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12112, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 12112, __pyx_L1_error)
12114: 'Cannot flush explicitly inside a transaction')
+12115: self._check_qwp_ws('flush_and_keep_and_get_fsn')
__pyx_t_8 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush_and_keep_and_get_fsn); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12115, __pyx_L1_error)
+12116: if buffer is not None:
__pyx_t_9 = (((PyObject *)__pyx_v_buffer) != Py_None);
if (__pyx_t_9) {
/* … */
goto __pyx_L4;
}
+12117: buffer._check_impl()
__pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_impl(__pyx_v_buffer); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12117, __pyx_L1_error)
+12118: self._check_buffer_protocol(buffer)
__pyx_t_8 = __pyx_f_7questdb_7_client_6Sender__check_buffer_protocol(__pyx_v_self, __pyx_v_buffer); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12118, __pyx_L1_error)
+12119: c_buf = buffer._impl
__pyx_t_10 = __pyx_v_buffer->_impl;
__pyx_v_c_buf = __pyx_t_10;
12120: else:
+12121: c_buf = self._buffer._impl
/*else*/ {
__pyx_t_10 = __pyx_v_self->_buffer->_impl;
__pyx_v_c_buf = __pyx_t_10;
}
__pyx_L4:;
+12122: (buffer if buffer is not None else self._buffer)._check_not_in_row(
__pyx_t_9 = (((PyObject *)__pyx_v_buffer) != Py_None);
if (__pyx_t_9) {
__Pyx_INCREF((PyObject *)__pyx_v_buffer);
__pyx_t_2 = ((PyObject *)__pyx_v_buffer);
} else {
__Pyx_INCREF((PyObject *)__pyx_v_self->_buffer);
__pyx_t_2 = ((PyObject *)__pyx_v_self->_buffer);
}
__pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_2), __pyx_mstate_global->__pyx_n_u_flush_and_keep_and_get_fsn, NULL); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12122, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
12123: 'flush_and_keep_and_get_fsn')
12124:
+12125: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+12126: ok = line_sender_qwpws_flush_and_keep_and_get_fsn(
__pyx_v_ok = line_sender_qwpws_flush_and_keep_and_get_fsn(__pyx_v_sender, __pyx_v_c_buf, (&__pyx_v_fsn), (&__pyx_v_err));
12127: sender, c_buf, &fsn, &err)
+12128: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12129: if not ok:
__pyx_t_9 = (!__pyx_v_ok);
if (__pyx_t_9) {
/* … */
}
+12130: if c_buf == self._buffer._impl:
__pyx_t_9 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);
if (__pyx_t_9) {
/* … */
}
+12131: line_sender_buffer_clear(c_buf)
line_sender_buffer_clear(__pyx_v_c_buf);
+12132: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12132, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 12132, __pyx_L1_error)
+12133: if c_buf == self._buffer._impl:
__pyx_t_9 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);
if (__pyx_t_9) {
/* … */
}
+12134: self._last_flush_ms[0] = line_sender_now_micros() // 1000
(__pyx_v_self->_last_flush_ms[0]) = __Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1);
+12135: if fsn.has_value:
__pyx_t_9 = (__pyx_v_fsn.has_value != 0);
if (__pyx_t_9) {
/* … */
}
+12136: return fsn.value
__pyx_t_2 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12136, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
+12137: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
12138:
+12139: def published_fsn(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_31published_fsn(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_30published_fsn, "\n Highest QWP/WebSocket frame sequence number published locally.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_31published_fsn = {"published_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_31published_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_30published_fsn}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_31published_fsn(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("published_fsn (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("published_fsn", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("published_fsn", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_6Sender_30published_fsn(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_30published_fsn(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) { struct line_sender_qwpws_fsn __pyx_v_fsn; struct line_sender_error *__pyx_v_err; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client.Sender.published_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_31published_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_published_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[147])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12139, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_published_fsn, __pyx_t_17) < (0)) __PYX_ERR(0, 12139, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
12140: """
12141: Highest QWP/WebSocket frame sequence number published locally.
12142: """
12143: cdef line_sender_qwpws_fsn fsn
+12144: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
12145:
+12146: self._check_qwp_ws('published_fsn')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_published_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12146, __pyx_L1_error)
+12147: if not line_sender_qwpws_published_fsn(self._impl, &fsn, &err):
__pyx_t_2 = (!line_sender_qwpws_published_fsn(__pyx_v_self->_impl, (&__pyx_v_fsn), (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
+12148: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12148, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 12148, __pyx_L1_error)
+12149: if fsn.has_value:
__pyx_t_2 = (__pyx_v_fsn.has_value != 0);
if (__pyx_t_2) {
/* … */
}
+12150: return fsn.value
__pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12150, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
+12151: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
12152:
+12153: def acked_fsn(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_33acked_fsn(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_32acked_fsn, "\n Highest QWP/WebSocket frame sequence number completed by ACK or\n drop-and-continue rejection.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_33acked_fsn = {"acked_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_33acked_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_32acked_fsn}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_33acked_fsn(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("acked_fsn (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("acked_fsn", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("acked_fsn", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_6Sender_32acked_fsn(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_32acked_fsn(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) { struct line_sender_qwpws_fsn __pyx_v_fsn; struct line_sender_error *__pyx_v_err; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client.Sender.acked_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_33acked_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_acked_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[148])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12153, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_acked_fsn, __pyx_t_17) < (0)) __PYX_ERR(0, 12153, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
12154: """
12155: Highest QWP/WebSocket frame sequence number completed by ACK or
12156: drop-and-continue rejection.
12157: """
12158: cdef line_sender_qwpws_fsn fsn
+12159: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
12160:
+12161: self._check_qwp_ws('acked_fsn')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_acked_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12161, __pyx_L1_error)
+12162: if not line_sender_qwpws_acked_fsn(self._impl, &fsn, &err):
__pyx_t_2 = (!line_sender_qwpws_acked_fsn(__pyx_v_self->_impl, (&__pyx_v_fsn), (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
+12163: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12163, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 12163, __pyx_L1_error)
+12164: if fsn.has_value:
__pyx_t_2 = (__pyx_v_fsn.has_value != 0);
if (__pyx_t_2) {
/* … */
}
+12165: return fsn.value
__pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12165, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
+12166: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
12167:
+12168: def await_acked_fsn(self, fsn, timeout_millis=0):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_35await_acked_fsn(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_34await_acked_fsn, "\n Wait until the QWP/WebSocket completion watermark reaches ``fsn``.\n\n Returns ``True`` once every frame published so far (which includes\n ``fsn``) has been acknowledged, or ``False`` if the no-progress\n timeout elapsed before the acknowledgement watermark reached ``fsn``.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_35await_acked_fsn = {"await_acked_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_35await_acked_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_34await_acked_fsn}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_35await_acked_fsn(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_fsn = 0; PyObject *__pyx_v_timeout_millis = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("await_acked_fsn (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_fsn,&__pyx_mstate_global->__pyx_n_u_timeout_millis,0}; PyObject* values[2] = {0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 12168, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 12168, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 12168, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "await_acked_fsn", 0) < (0)) __PYX_ERR(0, 12168, __pyx_L3_error) if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("await_acked_fsn", 0, 1, 2, i); __PYX_ERR(0, 12168, __pyx_L3_error) } } } else { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 12168, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 12168, __pyx_L3_error) break; default: goto __pyx_L5_argtuple_error; } if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); } __pyx_v_fsn = values[0]; __pyx_v_timeout_millis = values[1]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("await_acked_fsn", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 12168, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Sender.await_acked_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_6Sender_34await_acked_fsn(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_fsn, __pyx_v_timeout_millis); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_34await_acked_fsn(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_fsn, PyObject *__pyx_v_timeout_millis) { struct line_sender_error *__pyx_v_err; PyThreadState *__pyx_v_gs; uint64_t __pyx_v_c_fsn; uint64_t __pyx_v_c_timeout_millis; struct line_sender_qwpws_fsn __pyx_v_acked; int __pyx_v_ok; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_10); __Pyx_AddTraceback("questdb._client.Sender.await_acked_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_35await_acked_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_await_acked_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[149])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12168, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_17, __pyx_mstate_global->__pyx_tuple[8]); if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_await_acked_fsn, __pyx_t_17) < (0)) __PYX_ERR(0, 12168, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
12169: """
12170: Wait until the QWP/WebSocket completion watermark reaches ``fsn``.
12171:
12172: Returns ``True`` once every frame published so far (which includes
12173: ``fsn``) has been acknowledged, or ``False`` if the no-progress
12174: timeout elapsed before the acknowledgement watermark reached ``fsn``.
12175: """
+12176: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+12177: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
12178: cdef uint64_t c_fsn
12179: cdef uint64_t c_timeout_millis
12180: cdef line_sender_qwpws_fsn acked
+12181: cdef bint ok = False
__pyx_v_ok = 0;
12182:
+12183: self._check_qwp_ws('await_acked_fsn')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_await_acked_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12183, __pyx_L1_error)
+12184: if not isinstance(fsn, int) or isinstance(fsn, bool):
__pyx_t_3 = PyLong_Check(__pyx_v_fsn); __pyx_t_4 = (!__pyx_t_3); if (!__pyx_t_4) { } else { __pyx_t_2 = __pyx_t_4; goto __pyx_L4_bool_binop_done; } __pyx_t_4 = __Pyx_TypeCheck(__pyx_v_fsn, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); __pyx_t_2 = __pyx_t_4; __pyx_L4_bool_binop_done:; if (unlikely(__pyx_t_2)) { /* … */ }
+12185: raise TypeError('"fsn" must be a non-negative int.')
__pyx_t_6 = NULL;
__pyx_t_7 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_fsn_must_be_a_non_negative_int};
__pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12185, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
__Pyx_Raise(__pyx_t_5, 0, 0, 0);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__PYX_ERR(0, 12185, __pyx_L1_error)
+12186: if fsn < 0:
__pyx_t_2 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_fsn, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 12186, __pyx_L1_error) if (unlikely(__pyx_t_2)) { /* … */ }
+12187: raise ValueError('"fsn" must be a non-negative int.')
__pyx_t_6 = NULL;
__pyx_t_7 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_fsn_must_be_a_non_negative_int};
__pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12187, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
__Pyx_Raise(__pyx_t_5, 0, 0, 0);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__PYX_ERR(0, 12187, __pyx_L1_error)
+12188: if not isinstance(timeout_millis, int) or isinstance(timeout_millis, bool):
__pyx_t_4 = PyLong_Check(__pyx_v_timeout_millis); __pyx_t_3 = (!__pyx_t_4); if (!__pyx_t_3) { } else { __pyx_t_2 = __pyx_t_3; goto __pyx_L8_bool_binop_done; } __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_timeout_millis, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); __pyx_t_2 = __pyx_t_3; __pyx_L8_bool_binop_done:; if (unlikely(__pyx_t_2)) { /* … */ }
+12189: raise TypeError('"timeout_millis" must be a non-negative int.')
__pyx_t_6 = NULL;
__pyx_t_7 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_timeout_millis_must_be_a_non_ne};
__pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12189, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
__Pyx_Raise(__pyx_t_5, 0, 0, 0);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__PYX_ERR(0, 12189, __pyx_L1_error)
+12190: if timeout_millis < 0:
__pyx_t_2 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_timeout_millis, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 12190, __pyx_L1_error) if (unlikely(__pyx_t_2)) { /* … */ }
+12191: raise ValueError('"timeout_millis" must be a non-negative int.')
__pyx_t_6 = NULL;
__pyx_t_7 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_timeout_millis_must_be_a_non_ne};
__pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12191, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
__Pyx_Raise(__pyx_t_5, 0, 0, 0);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__PYX_ERR(0, 12191, __pyx_L1_error)
+12192: c_fsn = fsn
__pyx_t_8 = __Pyx_PyLong_As_uint64_t(__pyx_v_fsn); if (unlikely((__pyx_t_8 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 12192, __pyx_L1_error) __pyx_v_c_fsn = __pyx_t_8;
+12193: c_timeout_millis = timeout_millis
__pyx_t_8 = __Pyx_PyLong_As_uint64_t(__pyx_v_timeout_millis); if (unlikely((__pyx_t_8 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 12193, __pyx_L1_error) __pyx_v_c_timeout_millis = __pyx_t_8;
12194:
12195: # Fast path: the completion watermark may already cover ``fsn``.
+12196: if not line_sender_qwpws_acked_fsn(self._impl, &acked, &err):
__pyx_t_2 = (!line_sender_qwpws_acked_fsn(__pyx_v_self->_impl, (&__pyx_v_acked), (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
+12197: raise c_err_to_py(err)
__pyx_t_5 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12197, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __PYX_ERR(0, 12197, __pyx_L1_error)
+12198: if acked.has_value and acked.value >= c_fsn:
__pyx_t_3 = (__pyx_v_acked.has_value != 0);
if (__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L13_bool_binop_done;
}
__pyx_t_3 = (__pyx_v_acked.value >= __pyx_v_c_fsn);
__pyx_t_2 = __pyx_t_3;
__pyx_L13_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
+12199: return True
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(Py_True);
__pyx_r = Py_True;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
12200:
12201: # `line_sender_qwpws_wait` drains every frame published so far (a
12202: # superset of ``fsn``) up to the "ok" ack level. The no-progress
12203: # deadline (`timeout_millis`; 0 == wait indefinitely) surfaces as a
12204: # `line_sender_error_failover_retry`, which we translate back into the
12205: # historical ``reached == False`` return rather than raising.
+12206: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+12207: ok = line_sender_qwpws_wait(
__pyx_v_ok = line_sender_qwpws_wait(__pyx_v_self->_impl, qwpws_ack_level_ok, __pyx_v_c_timeout_millis, (&__pyx_v_err));
12208: self._impl,
12209: qwpws_ack_level.qwpws_ack_level_ok,
12210: c_timeout_millis,
12211: &err)
+12212: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12213: if not ok:
__pyx_t_2 = (!__pyx_v_ok);
if (__pyx_t_2) {
/* … */
}
+12214: if line_sender_error_get_code(err) != \
__pyx_t_2 = (line_sender_error_get_code(__pyx_v_err) != line_sender_error_failover_retry);
if (unlikely(__pyx_t_2)) {
/* … */
}
12215: line_sender_error_failover_retry:
+12216: raise c_err_to_py(err)
__pyx_t_5 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12216, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __PYX_ERR(0, 12216, __pyx_L1_error)
+12217: line_sender_error_free(err)
line_sender_error_free(__pyx_v_err);
+12218: err = NULL
__pyx_v_err = NULL;
12219:
12220: # Re-read the watermark: the wait either drained ``fsn`` or expired
12221: # with no progress; the current ack level is the answer.
+12222: if not line_sender_qwpws_acked_fsn(self._impl, &acked, &err):
__pyx_t_2 = (!line_sender_qwpws_acked_fsn(__pyx_v_self->_impl, (&__pyx_v_acked), (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
+12223: raise c_err_to_py(err)
__pyx_t_5 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12223, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __PYX_ERR(0, 12223, __pyx_L1_error)
+12224: return bool(acked.has_value and acked.value >= c_fsn)
__pyx_t_6 = NULL;
if (__pyx_v_acked.has_value) {
} else {
__pyx_t_10 = __Pyx_PyLong_From_bool(__pyx_v_acked.has_value); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 12224, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_9 = __pyx_t_10;
__pyx_t_10 = 0;
goto __pyx_L18_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_acked.value >= __pyx_v_c_fsn);
__pyx_t_10 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 12224, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_9 = __pyx_t_10;
__pyx_t_10 = 0;
__pyx_L18_bool_binop_done:;
__pyx_t_7 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_9};
__pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12224, __pyx_L1_error)
__Pyx_GOTREF((PyObject *)__pyx_t_5);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = ((PyObject *)__pyx_t_5);
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_5 = 0;
goto __pyx_L0;
12225:
+12226: def drive_once(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_37drive_once(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_36drive_once, "\n Drive one QWP/WebSocket progress step for manual progress senders.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_37drive_once = {"drive_once", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_37drive_once, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_36drive_once}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_37drive_once(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("drive_once (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("drive_once", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("drive_once", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_6Sender_36drive_once(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_36drive_once(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) { struct line_sender_error *__pyx_v_err; PyThreadState *__pyx_v_gs; bool __pyx_v_progressed; int __pyx_v_ok; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("questdb._client.Sender.drive_once", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_37drive_once, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_drive_once, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[150])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12226, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_drive_once, __pyx_t_17) < (0)) __PYX_ERR(0, 12226, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
12227: """
12228: Drive one QWP/WebSocket progress step for manual progress senders.
12229: """
+12230: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+12231: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+12232: cdef cbool progressed = False
__pyx_v_progressed = 0;
+12233: cdef bint ok = False
__pyx_v_ok = 0;
12234:
+12235: self._check_qwp_ws('drive_once')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_drive_once); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12235, __pyx_L1_error)
+12236: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+12237: ok = line_sender_qwpws_drive_once(self._impl, &progressed, &err)
__pyx_v_ok = line_sender_qwpws_drive_once(__pyx_v_self->_impl, (&__pyx_v_progressed), (&__pyx_v_err));
+12238: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12239: if not ok:
__pyx_t_2 = (!__pyx_v_ok);
if (unlikely(__pyx_t_2)) {
/* … */
}
+12240: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12240, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 12240, __pyx_L1_error)
+12241: return bool(progressed)
__pyx_t_4 = NULL; __pyx_t_5 = __Pyx_PyLong_From_bool(__pyx_v_progressed); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12241, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_5}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12241, __pyx_L1_error) __Pyx_GOTREF((PyObject *)__pyx_t_3); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = ((PyObject *)__pyx_t_3); } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
12242:
+12243: def poll_error(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_39poll_error(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_38poll_error, "\n Poll the next structured QWP/WebSocket diagnostic.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_39poll_error = {"poll_error", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_39poll_error, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_38poll_error}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_39poll_error(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("poll_error (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("poll_error", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("poll_error", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_6Sender_38poll_error(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_38poll_error(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) { struct line_sender_error *__pyx_v_err; struct line_sender_qwpws_error *__pyx_v_qwp_err; struct line_sender_qwpws_error_view __pyx_v_view; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("questdb._client.Sender.poll_error", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_39poll_error, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_poll_error, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[151])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12243, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_poll_error, __pyx_t_17) < (0)) __PYX_ERR(0, 12243, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
12244: """
12245: Poll the next structured QWP/WebSocket diagnostic.
12246: """
+12247: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+12248: cdef line_sender_qwpws_error* qwp_err = NULL
__pyx_v_qwp_err = NULL;
12249: cdef line_sender_qwpws_error_view view
12250:
+12251: self._check_qwp_ws('poll_error')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_poll_error); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12251, __pyx_L1_error)
+12252: if not line_sender_qwpws_poll_error(self._impl, &qwp_err, &err):
__pyx_t_2 = (!line_sender_qwpws_poll_error(__pyx_v_self->_impl, (&__pyx_v_qwp_err), (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
+12253: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12253, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 12253, __pyx_L1_error)
+12254: if qwp_err == NULL:
__pyx_t_2 = (__pyx_v_qwp_err == NULL);
if (__pyx_t_2) {
/* … */
}
+12255: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+12256: try:
/*try:*/ {
+12257: view = line_sender_qwpws_error_get_view(qwp_err)
__pyx_v_view = line_sender_qwpws_error_get_view(__pyx_v_qwp_err);
+12258: return _sender_error_from_raw(c_sender_error_view_to_raw(view))
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sender_error_from_raw); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12258, __pyx_L6_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_6 = __pyx_f_7questdb_7_client_c_sender_error_view_to_raw(__pyx_v_view); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12258, __pyx_L6_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_5))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_6};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12258, __pyx_L6_error)
__Pyx_GOTREF(__pyx_t_3);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_3;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_3 = 0;
goto __pyx_L5_return;
}
12259: finally:
+12260: line_sender_qwpws_error_free(qwp_err)
/*finally:*/ {
__pyx_L6_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
if ( unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__pyx_t_8 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_10 = __pyx_filename;
{
line_sender_qwpws_error_free(__pyx_v_qwp_err);
}
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_ExceptionReset(__pyx_t_14, __pyx_t_15, __pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ErrRestore(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
__pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_10;
goto __pyx_L1_error;
}
__pyx_L5_return: {
__pyx_t_16 = __pyx_r;
__pyx_r = 0;
line_sender_qwpws_error_free(__pyx_v_qwp_err);
__pyx_r = __pyx_t_16;
__pyx_t_16 = 0;
goto __pyx_L0;
}
}
12261:
+12262: def error_events_dropped(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_41error_events_dropped(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_40error_events_dropped, "\n Number of QWP/WebSocket diagnostics dropped from the bounded ring.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_41error_events_dropped = {"error_events_dropped", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_41error_events_dropped, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_40error_events_dropped}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_41error_events_dropped(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("error_events_dropped (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("error_events_dropped", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("error_events_dropped", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_6Sender_40error_events_dropped(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_40error_events_dropped(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) { struct line_sender_error *__pyx_v_err; uint64_t __pyx_v_dropped; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client.Sender.error_events_dropped", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_41error_events_dropped, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_error_events_dropped, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[152])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12262, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_error_events_dropped, __pyx_t_17) < (0)) __PYX_ERR(0, 12262, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
12263: """
12264: Number of QWP/WebSocket diagnostics dropped from the bounded ring.
12265: """
+12266: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+12267: cdef uint64_t dropped = 0
__pyx_v_dropped = 0;
12268:
+12269: self._check_qwp_ws('error_events_dropped')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_error_events_dropped); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12269, __pyx_L1_error)
+12270: if not line_sender_qwpws_errors_dropped(self._impl, &dropped, &err):
__pyx_t_2 = (!line_sender_qwpws_errors_dropped(__pyx_v_self->_impl, (&__pyx_v_dropped), (&__pyx_v_err)));
if (unlikely(__pyx_t_2)) {
/* … */
}
+12271: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12271, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 12271, __pyx_L1_error)
+12272: return dropped
__pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_dropped); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12272, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
12273:
+12274: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_25connection_events_dropped_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_25connection_events_dropped_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_6Sender_25connection_events_dropped___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Sender_25connection_events_dropped___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Sender.connection_events_dropped.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
12275: def connection_events_dropped(self) -> int:
12276: """
12277: Total connection events discarded by the listener inbox's
12278: drop-oldest policy. ``0`` when no listener is registered.
12279: """
+12280: if self._impl == NULL:
__pyx_t_1 = (__pyx_v_self->_impl == NULL);
if (__pyx_t_1) {
/* … */
}
+12281: return 0
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
__pyx_r = __pyx_mstate_global->__pyx_int_0;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+12282: return line_sender_connection_events_dropped(self._impl)
__pyx_t_2 = __Pyx_PyLong_From_uint64_t(line_sender_connection_events_dropped(__pyx_v_self->_impl)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12282, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
12283:
+12284: @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_27connection_events_delivered_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_27connection_events_delivered_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_7questdb_7_client_6Sender_27connection_events_delivered___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Sender_27connection_events_delivered___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.Sender.connection_events_delivered.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
12285: def connection_events_delivered(self) -> int:
12286: """
12287: Total connection events delivered to the listener. ``0`` when no
12288: listener is registered.
12289: """
+12290: if self._impl == NULL:
__pyx_t_1 = (__pyx_v_self->_impl == NULL);
if (__pyx_t_1) {
/* … */
}
+12291: return 0
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
__pyx_r = __pyx_mstate_global->__pyx_int_0;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
+12292: return line_sender_connection_events_delivered(self._impl)
__pyx_t_2 = __Pyx_PyLong_From_uint64_t(line_sender_connection_events_delivered(__pyx_v_self->_impl)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12292, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L0;
12293:
+12294: def close_drain(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_43close_drain(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_42close_drain, "\n Stop accepting new QWP/WebSocket publications and wait for already\n published frames to resolve.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_43close_drain = {"close_drain", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_43close_drain, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_42close_drain}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_43close_drain(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("close_drain (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("close_drain", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("close_drain", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_6Sender_42close_drain(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_42close_drain(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) { struct line_sender_error *__pyx_v_err; PyThreadState *__pyx_v_gs; int __pyx_v_ok; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("questdb._client.Sender.close_drain", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_43close_drain, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_close_drain, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[153])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_close_drain, __pyx_t_17) < (0)) __PYX_ERR(0, 12294, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
12295: """
12296: Stop accepting new QWP/WebSocket publications and wait for already
12297: published frames to resolve.
12298: """
+12299: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+12300: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+12301: cdef bint ok = False
__pyx_v_ok = 0;
12302:
+12303: self._check_qwp_ws('close_drain')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_close_drain); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12303, __pyx_L1_error)
12304: # Draining stops the sender accepting anything further, so a
12305: # row still being written can never be finished or sent, and
12306: # the complete rows buffered before it go with it -- after
12307: # which `close(flush=True)` reports success having sent
12308: # nothing. Refused while a row is part-way through, like every
12309: # other call that ends the buffer.
+12310: if self._buffer is not None:
__pyx_t_2 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
if (__pyx_t_2) {
/* … */
}
+12311: self._buffer._check_not_in_row('close_drain')
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_buffer, __pyx_mstate_global->__pyx_n_u_close_drain, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12311, __pyx_L1_error)
+12312: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+12313: ok = line_sender_qwpws_close_drain(self._impl, &err)
__pyx_v_ok = line_sender_qwpws_close_drain(__pyx_v_self->_impl, (&__pyx_v_err));
+12314: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12315: if not ok:
__pyx_t_2 = (!__pyx_v_ok);
if (unlikely(__pyx_t_2)) {
/* … */
}
+12316: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 12316, __pyx_L1_error)
12317:
+12318: cdef _close(self):
static PyObject *__pyx_f_7questdb_7_client_6Sender__close(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
PyThreadState *__pyx_v_gs;
struct line_sender *__pyx_v_impl;
struct line_sender_opts *__pyx_v_opts;
struct line_sender_opts *__pyx_v_qwp_ws_opts;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client.Sender._close", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+12319: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+12320: cdef line_sender* impl = self._impl
__pyx_t_1 = __pyx_v_self->_impl; __pyx_v_impl = __pyx_t_1;
+12321: cdef line_sender_opts* opts = self._opts
__pyx_t_2 = __pyx_v_self->_opts; __pyx_v_opts = __pyx_t_2;
+12322: cdef line_sender_opts* qwp_ws_opts = self._qwp_ws_opts
__pyx_t_2 = __pyx_v_self->_qwp_ws_opts; __pyx_v_qwp_ws_opts = __pyx_t_2;
+12323: self._impl = NULL
__pyx_v_self->_impl = NULL;
+12324: self._opts = NULL
__pyx_v_self->_opts = NULL;
+12325: self._qwp_ws_opts = NULL
__pyx_v_self->_qwp_ws_opts = NULL;
+12326: if impl != NULL or opts != NULL or qwp_ws_opts != NULL:
__pyx_t_4 = (__pyx_v_impl != NULL);
if (!__pyx_t_4) {
} else {
__pyx_t_3 = __pyx_t_4;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_4 = (__pyx_v_opts != NULL);
if (!__pyx_t_4) {
} else {
__pyx_t_3 = __pyx_t_4;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_4 = (__pyx_v_qwp_ws_opts != NULL);
__pyx_t_3 = __pyx_t_4;
__pyx_L4_bool_binop_done:;
if (__pyx_t_3) {
/* … */
}
+12327: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+12328: if impl != NULL:
__pyx_t_3 = (__pyx_v_impl != NULL);
if (__pyx_t_3) {
/* … */
}
+12329: line_sender_close(impl)
line_sender_close(__pyx_v_impl);
+12330: line_sender_opts_free(opts)
line_sender_opts_free(__pyx_v_opts);
+12331: line_sender_opts_free(qwp_ws_opts)
line_sender_opts_free(__pyx_v_qwp_ws_opts);
+12332: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12333: _release_callback_refs(self._cb_refs_key)
__pyx_t_5 = __pyx_f_7questdb_7_client__release_callback_refs(__pyx_v_self->_cb_refs_key); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12333, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+12334: self._cb_refs_key = 0
__pyx_v_self->_cb_refs_key = 0;
+12335: self._buffer = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_buffer); __Pyx_DECREF((PyObject *)__pyx_v_self->_buffer); __pyx_v_self->_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None);
+12336: self._dispatch_context = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_dispatch_context); __Pyx_DECREF(__pyx_v_self->_dispatch_context); __pyx_v_self->_dispatch_context = Py_None;
+12337: self._error_handler = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_error_handler); __Pyx_DECREF(__pyx_v_self->_error_handler); __pyx_v_self->_error_handler = Py_None;
+12338: self._connection_listener = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_connection_listener); __Pyx_DECREF(__pyx_v_self->_connection_listener); __pyx_v_self->_connection_listener = Py_None;
+12339: if self._slot_id != -1:
__pyx_t_3 = (__pyx_v_self->_slot_id != -1L);
if (__pyx_t_3) {
/* … */
}
+12340: qdb_active_senders_track_closed(<uint32_t>self._slot_id)
qdb_active_senders_track_closed(((uint32_t)__pyx_v_self->_slot_id));
+12341: self._slot_id = -1
__pyx_v_self->_slot_id = -1L;
12342:
+12343: cpdef close(self, bint flush=True):
static PyObject *__pyx_pw_7questdb_7_client_6Sender_45close(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyObject *__pyx_f_7questdb_7_client_6Sender_close(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_7questdb_7_client_6Sender_close *__pyx_optional_args) {
int __pyx_v_flush = ((int)1);
PyObject *__pyx_r = NULL;
if (__pyx_optional_args) {
if (__pyx_optional_args->__pyx_n > 0) {
__pyx_v_flush = __pyx_optional_args->flush;
}
}
/* Check if called by wrapper */
if (unlikely(__pyx_skip_dispatch)) ;
/* Check if overridden in Python */
else if (
#if !CYTHON_USE_TYPE_SLOTS
unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender &&
__Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
#else
unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
#endif
) {
#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
#endif
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12343, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7questdb_7_client_6Sender_45close)) {
__pyx_t_3 = NULL;
__Pyx_INCREF(__pyx_t_1);
__pyx_t_4 = __pyx_t_1;
__pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_v_flush); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12343, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_6 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_6 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12343, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_2;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L0;
}
#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
__pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
__pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
__pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
}
#endif
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
}
#endif
}
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("questdb._client.Sender.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_45close(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_44close, "\n Disconnect.\n\n This method is idempotent and can be called repeatedly.\n\n Once a sender is closed, it can\047t be re-used.\n\n :param bool flush: If ``True``, flush the internal buffer before closing.\n For QWP/WebSocket, this also drains already-published frames before\n closing.\n\n Refused while a row is part-way through the sender\047s **internal**\n buffer, which is the buffer this call flushes. A buffer of your\n own from :func:`Sender.new_buffer` is neither flushed nor checked\n here: the sender is never told which buffers exist, so it cannot\n refuse on their behalf. Such a buffer keeps every byte written\n into it, but a sender closed out from under it can no longer send\n it \342\200\224 finish the row and flush it before closing.\n ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_45close = {"close", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_45close, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_44close};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_45close(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
int __pyx_v_flush;
#if !CYTHON_VECTORCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("close (wrapper)", 0);
#if !CYTHON_VECTORCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_flush,0};
PyObject* values[1] = {0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 12343, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 12343, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "close", 0) < (0)) __PYX_ERR(0, 12343, __pyx_L3_error)
} else {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 12343, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
}
if (values[0]) {
__pyx_v_flush = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_flush == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12343, __pyx_L3_error)
} else {
__pyx_v_flush = ((int)1);
}
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("close", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 12343, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.Sender.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_6Sender_44close(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_flush);
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_6Sender_44close(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, int __pyx_v_flush) {
PyObject *__pyx_r = NULL;
__pyx_t_2.__pyx_n = 1;
__pyx_t_2.flush = __pyx_v_flush;
__pyx_t_1 = __pyx_vtabptr_7questdb_7_client_Sender->close(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12343, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_1;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_1 = 0;
goto __pyx_L0;
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.Sender.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_45close, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_close, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[154])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12343, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
#endif
__Pyx_CyFunction_SetDefaultsTuple(__pyx_t_17, __pyx_mstate_global->__pyx_tuple[72]);
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_close, __pyx_t_17) < (0)) __PYX_ERR(0, 12343, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
/* … */
{
PyObject* __pyx_temp[1] = {Py_True};
__pyx_mstate_global->__pyx_tuple[72] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[72])) __PYX_ERR(0, 12343, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[72]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[72]);
/* … */
struct __pyx_opt_args_7questdb_7_client_6Sender_close {
int __pyx_n;
int flush;
};
12344: """
12345: Disconnect.
12346:
12347: This method is idempotent and can be called repeatedly.
12348:
12349: Once a sender is closed, it can't be re-used.
12350:
12351: :param bool flush: If ``True``, flush the internal buffer before closing.
12352: For QWP/WebSocket, this also drains already-published frames before
12353: closing.
12354:
12355: Refused while a row is part-way through the sender's **internal**
12356: buffer, which is the buffer this call flushes. A buffer of your
12357: own from :func:`Sender.new_buffer` is neither flushed nor checked
12358: here: the sender is never told which buffers exist, so it cannot
12359: refuse on their behalf. Such a buffer keeps every byte written
12360: into it, but a sender closed out from under it can no longer send
12361: it — finish the row and flush it before closing.
12362: """
+12363: self._check_not_in_own_callback('close')
__pyx_t_7 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_close); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12363, __pyx_L1_error)
12364: # The internal buffer is the one this call flushes, so it is the
12365: # one held to "no row part-way through" -- the same rule
12366: # `flush(buffer)` applies to whichever buffer it was handed.
12367: # Refused outright rather than by way of the flush below:
12368: # `_close()` runs from the `finally` whatever the flush does, so
12369: # a refusal there would still close the sender and take the
12370: # already-buffered rows with it. With `flush=False` there is no
12371: # flush to refuse at all.
+12372: if self._buffer is not None:
__pyx_t_8 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
if (__pyx_t_8) {
/* … */
}
+12373: self._buffer._check_not_in_row('close')
__pyx_t_7 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_buffer, __pyx_mstate_global->__pyx_n_u_close, NULL); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12373, __pyx_L1_error)
+12374: try:
/*try:*/ {
+12375: if (flush and (self._impl != NULL) and
if (__pyx_v_flush) {
} else {
__pyx_t_8 = __pyx_v_flush;
goto __pyx_L8_bool_binop_done;
}
__pyx_t_9 = (__pyx_v_self->_impl != NULL);
if (__pyx_t_9) {
} else {
__pyx_t_8 = __pyx_t_9;
goto __pyx_L8_bool_binop_done;
}
/* … */
if (__pyx_t_8) {
/* … */
}
}
+12376: (not line_sender_must_close(self._impl))):
__pyx_t_9 = (!line_sender_must_close(__pyx_v_self->_impl));
__pyx_t_8 = __pyx_t_9;
__pyx_L8_bool_binop_done:;
+12377: self.flush(None, True)
__pyx_t_10.__pyx_n = 2;
__pyx_t_10.buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None);
__pyx_t_10.clear = 1;
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->__pyx_vtab)->flush(__pyx_v_self, 0, &__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12377, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+12378: if _is_qwp_ws_protocol(self._c_protocol):
__pyx_t_8 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_8 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12378, __pyx_L5_error) if (__pyx_t_8) { /* … */ }
+12379: self.close_drain()
__pyx_t_2 = ((PyObject *)__pyx_v_self);
__Pyx_INCREF(__pyx_t_2);
__pyx_t_6 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close_drain, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12379, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
12380: finally:
+12381: self._close()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->__pyx_vtab)->_close(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12381, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L6;
}
__pyx_L5_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
{
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->__pyx_vtab)->_close(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12381, __pyx_L13_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
}
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
goto __pyx_L1_error;
__pyx_L13_error:;
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
goto __pyx_L1_error;
}
__pyx_L6:;
}
12382:
+12383: def __exit__(self, exc_type, exc_val, exc_tb):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_6Sender_47__exit__(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_46__exit__, "\n Flush pending and disconnect at the end of a ``with`` block.\n\n If the ``with`` block raises an exception, any pending data will\n *NOT* be flushed.\n\n This is implemented by calling :func:`Sender.close`.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_47__exit__ = {"__exit__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_47__exit__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_46__exit__}; static PyObject *__pyx_pw_7questdb_7_client_6Sender_47__exit__(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_exc_type = 0; CYTHON_UNUSED PyObject *__pyx_v_exc_val = 0; CYTHON_UNUSED PyObject *__pyx_v_exc_tb = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__exit__ (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_exc_type,&__pyx_mstate_global->__pyx_n_u_exc_val,&__pyx_mstate_global->__pyx_n_u_exc_tb,0}; PyObject* values[3] = {0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 12383, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 3: values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 12383, __pyx_L3_error) CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 12383, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 12383, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__exit__", 0) < (0)) __PYX_ERR(0, 12383, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 3; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, i); __PYX_ERR(0, 12383, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 12383, __pyx_L3_error) values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 12383, __pyx_L3_error) values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 12383, __pyx_L3_error) } __pyx_v_exc_type = values[0]; __pyx_v_exc_val = values[1]; __pyx_v_exc_tb = values[2]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 12383, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.Sender.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_6Sender_46__exit__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_exc_type, __pyx_v_exc_val, __pyx_v_exc_tb); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_6Sender_46__exit__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_exc_type, CYTHON_UNUSED PyObject *__pyx_v_exc_val, CYTHON_UNUSED PyObject *__pyx_v_exc_tb) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("questdb._client.Sender.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_47__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender___exit, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[155])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_exit, __pyx_t_17) < (0)) __PYX_ERR(0, 12383, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
12384: """
12385: Flush pending and disconnect at the end of a ``with`` block.
12386:
12387: If the ``with`` block raises an exception, any pending data will
12388: *NOT* be flushed.
12389:
12390: This is implemented by calling :func:`Sender.close`.
12391: """
+12392: self.close(not exc_type)
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_exc_type); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 12392, __pyx_L1_error) __pyx_t_3.__pyx_n = 1; __pyx_t_3.flush = (!__pyx_t_1); __pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0, &__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12392, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
12393:
+12394: def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_6Sender_49__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_6Sender_49__dealloc__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_pf_7questdb_7_client_6Sender_48__dealloc__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
}
static void __pyx_pf_7questdb_7_client_6Sender_48__dealloc__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_WriteUnraisable("questdb._client.Sender.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
+12395: self._close()
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->__pyx_vtab)->_close(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12395, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+12396: free(self._last_flush_ms)
free(__pyx_v_self->_last_flush_ms);
12397:
12398:
12399: # QWP/WebSocket row auto-flush, shared by a standalone `Sender` and a
12400: # `PooledSender` lease: each function takes both, exactly one of them set.
12401:
+12402: cdef void_int _qwp_row_add(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__qwp_row_add(CYTHON_UNUSED struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender, struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_pooled, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf, PyObject *__pyx_v_table_name, PyObject *__pyx_v_symbols, PyObject *__pyx_v_columns, PyObject *__pyx_v_at) {
int __pyx_v_starts_batch;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client._qwp_row_add", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
return __pyx_r;
}
12403: Sender sender,
12404: PooledSender pooled,
12405: Buffer buf,
12406: str table_name,
12407: dict symbols,
12408: dict columns,
12409: object at) except -1:
12410: """
12411: Append a row, holding the rewind point just before it. A row whose
12412: values are all `None` writes nothing and leaves no rewind point.
12413: """
+12414: cdef bint starts_batch = line_sender_buffer_row_count(buf._impl) == 0
__pyx_v_starts_batch = (line_sender_buffer_row_count(__pyx_v_buf->_impl) == 0);
+12415: buf._row(False, table_name, symbols, columns, at, True)
__pyx_t_2.__pyx_n = 4;
__pyx_t_2.symbols = __pyx_v_symbols;
__pyx_t_2.columns = __pyx_v_columns;
__pyx_t_2.at = __pyx_v_at;
__pyx_t_2.keep_marker = 1;
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_Buffer *)__pyx_v_buf->__pyx_vtab)->_row(__pyx_v_buf, 0, __pyx_v_table_name, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12415, __pyx_L1_error)
+12416: if pooled is not None and starts_batch:
__pyx_t_4 = (((PyObject *)__pyx_v_pooled) != Py_None);
if (__pyx_t_4) {
} else {
__pyx_t_3 = __pyx_t_4;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_3 = __pyx_v_starts_batch;
__pyx_L4_bool_binop_done:;
if (__pyx_t_3) {
/* … */
}
+12417: pooled._batch_started_ms = line_sender_now_micros() // 1000
__pyx_v_pooled->_batch_started_ms = __Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1);
12418:
12419:
+12420: cdef bint _qwp_row_due(
static int __pyx_f_7questdb_7_client__qwp_row_due(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender, struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_pooled, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf, size_t *__pyx_v_hard_cap) {
struct __pyx_t_7questdb_7_client_auto_flush_mode_t *__pyx_v_mode;
int __pyx_v_bytes_dynamic;
int64_t __pyx_v_interval_start_ms;
bool __pyx_v_server_cap_known;
struct line_sender_error *__pyx_v_err;
int __pyx_v_ok;
int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client._qwp_row_due", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
12421: Sender sender,
12422: PooledSender pooled,
12423: Buffer buf,
12424: size_t* hard_cap) except -1:
12425: """
12426: Whether the row buffer is due for auto-flush, reporting the frame cap
12427: it plans for through `hard_cap` (see `_qwp_row_planning_cap`).
12428: """
12429: cdef auto_flush_mode_t* mode
12430: cdef bint bytes_dynamic
12431: cdef int64_t interval_start_ms
+12432: cdef cbool server_cap_known = False
__pyx_v_server_cap_known = 0;
+12433: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
12434: cdef bint ok
+12435: if pooled is not None:
__pyx_t_1 = (((PyObject *)__pyx_v_pooled) != Py_None);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+12436: mode = &pooled._handle._auto_flush_mode
__pyx_v_mode = (&__pyx_v_pooled->_handle->_auto_flush_mode);
+12437: if not mode.enabled:
__pyx_t_1 = (!__pyx_v_mode->enabled);
if (__pyx_t_1) {
/* … */
}
+12438: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+12439: bytes_dynamic = pooled._handle._auto_flush_bytes_dynamic
__pyx_t_1 = __pyx_v_pooled->_handle->_auto_flush_bytes_dynamic;
__pyx_v_bytes_dynamic = __pyx_t_1;
+12440: interval_start_ms = pooled._batch_started_ms
__pyx_t_2 = __pyx_v_pooled->_batch_started_ms;
__pyx_v_interval_start_ms = __pyx_t_2;
+12441: ok = qwp_sender_effective_frame_cap(
__pyx_v_ok = qwp_sender_effective_frame_cap(__pyx_v_pooled->_qwp, __pyx_v_hard_cap, (&__pyx_v_server_cap_known), (&__pyx_v_err));
12442: pooled._qwp, hard_cap, &server_cap_known, &err)
12443: else:
+12444: mode = &sender._auto_flush_mode
/*else*/ {
__pyx_v_mode = (&__pyx_v_sender->_auto_flush_mode);
+12445: if not mode.enabled:
__pyx_t_1 = (!__pyx_v_mode->enabled);
if (__pyx_t_1) {
/* … */
}
+12446: return False
{
__pyx_r = 0;
}
goto __pyx_L0;
+12447: if sender._impl == NULL:
__pyx_t_1 = (__pyx_v_sender->_impl == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+12448: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12448, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+12449: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12449, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12449, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_row_can_t_be_called_Sender_is_cl}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12448, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 12448, __pyx_L1_error)
12450: "row() can't be called: Sender is closed.")
+12451: bytes_dynamic = sender._auto_flush_bytes_dynamic
__pyx_t_1 = __pyx_v_sender->_auto_flush_bytes_dynamic;
__pyx_v_bytes_dynamic = __pyx_t_1;
+12452: interval_start_ms = sender._last_flush_ms[0]
__pyx_v_interval_start_ms = (__pyx_v_sender->_last_flush_ms[0]);
+12453: ok = line_sender_qwpws_effective_frame_cap(
__pyx_v_ok = line_sender_qwpws_effective_frame_cap(__pyx_v_sender->_impl, __pyx_v_hard_cap, (&__pyx_v_server_cap_known), (&__pyx_v_err)); } __pyx_L3:;
12454: sender._impl, hard_cap, &server_cap_known, &err)
+12455: if not ok:
__pyx_t_1 = (!__pyx_v_ok);
if (unlikely(__pyx_t_1)) {
/* … */
}
+12456: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12456, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 12456, __pyx_L1_error)
+12457: hard_cap[0] = _qwp_row_planning_cap(hard_cap[0], server_cap_known)
(__pyx_v_hard_cap[0]) = __pyx_f_7questdb_7_client__qwp_row_planning_cap((__pyx_v_hard_cap[0]), __pyx_v_server_cap_known);
+12458: return _qwp_row_should_auto_flush(
{
__pyx_r = __pyx_f_7questdb_7_client__qwp_row_should_auto_flush(__pyx_v_mode, __pyx_v_bytes_dynamic, __pyx_v_buf->_impl, (__pyx_v_hard_cap[0]), __pyx_v_interval_start_ms);
}
goto __pyx_L0;
12459: mode,
12460: bytes_dynamic,
12461: buf._impl,
12462: hard_cap[0],
12463: interval_start_ms)
12464:
12465:
+12466: cdef void_int _qwp_row_publish(Sender sender, PooledSender pooled) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__qwp_row_publish(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender, struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_pooled) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client._qwp_row_publish", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
return __pyx_r;
}
12467: """
12468: Publish the whole row buffer as one frame and clear it.
12469:
12470: A `BatchTooLarge` refusal publishes nothing and leaves the buffer intact
12471: on both senders. After any other failure a pooled lease keeps its rows
12472: and a standalone sender has cleared them, as their `flush()` does.
12473: """
+12474: if pooled is not None:
__pyx_t_1 = (((PyObject *)__pyx_v_pooled) != Py_None);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+12475: pooled._flush_locked(False)
__pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_pooled->__pyx_vtab)->_flush_locked(__pyx_v_pooled, 0); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12475, __pyx_L1_error)
12476: else:
+12477: sender._flush_c_buf(sender._buffer._impl, True, False, True)
/*else*/ {
__pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_sender->__pyx_vtab)->_flush_c_buf(__pyx_v_sender, __pyx_v_sender->_buffer->_impl, 1, 0, 1); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12477, __pyx_L1_error)
}
__pyx_L3:;
12478:
12479:
+12480: cdef void_int _qwp_row_reject(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__qwp_row_reject(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_pooled, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf, PyObject *__pyx_v_exc, int __pyx_v_earlier_rows_published) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("questdb._client._qwp_row_reject", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
12481: PooledSender pooled,
12482: Buffer buf,
12483: object exc,
12484: bint earlier_rows_published) except -1:
12485: """Remove the newest row, which does not fit in a frame on its own."""
+12486: buf._rewind_to_marker()
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__rewind_to_marker(__pyx_v_buf); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12486, __pyx_L1_error)
+12487: if pooled is not None:
__pyx_t_2 = (((PyObject *)__pyx_v_pooled) != Py_None);
if (__pyx_t_2) {
/* … */
}
+12488: pooled._batch_started_ms = 0
__pyx_v_pooled->_batch_started_ms = 0;
+12489: raise QuestDBError(
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12489, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5);
+12490: QuestDBErrorCode.BatchTooLarge,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12490, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12490, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
12491: 'The row was not added: it does not fit in one QWP/WebSocket '
12492: 'frame on its own. '
+12493: + ('The rows buffered before it were published. '
__pyx_t_8 = __Pyx_PyUnicode_ConcatSafe(__pyx_mstate_global->__pyx_kp_u_The_row_was_not_added_it_does_no, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12493, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+12494: if earlier_rows_published else '')
if (__pyx_v_earlier_rows_published) {
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_The_rows_buffered_before_it_were);
__pyx_t_6 = __pyx_mstate_global->__pyx_kp_u_The_rows_buffered_before_it_were;
} else {
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__6);
__pyx_t_6 = __pyx_mstate_global->__pyx_kp_u__6;
}
+12495: + str(exc)) from exc
__pyx_t_6 = __Pyx_PyObject_Unicode(__pyx_v_exc); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12495, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_9 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_8, __pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 12495, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_10 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_10 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_t_9}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12489, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, __pyx_v_exc); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 12489, __pyx_L1_error)
12496:
12497:
+12498: cdef object _qwp_row_not_added(object exc, bint earlier_rows_published):
static PyObject *__pyx_f_7questdb_7_client__qwp_row_not_added(PyObject *__pyx_v_exc, int __pyx_v_earlier_rows_published) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("questdb._client._qwp_row_not_added", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
12499: """
12500: `exc`, a publish failure other than `BatchTooLarge`, with its message
12501: saying that the row was not added.
12502: """
+12503: return type(exc)(
__pyx_t_2 = NULL;
__Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_exc)));
__pyx_t_3 = ((PyObject *)Py_TYPE(__pyx_v_exc));
+12504: exc.code,
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12504, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4);
12505: 'The row was not added. '
+12506: + ('The rows buffered before it were published. '
__pyx_t_6 = __Pyx_PyUnicode_ConcatSafe(__pyx_mstate_global->__pyx_kp_u_The_row_was_not_added, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12506, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+12507: if earlier_rows_published else '')
if (__pyx_v_earlier_rows_published) {
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_The_rows_buffered_before_it_were);
__pyx_t_5 = __pyx_mstate_global->__pyx_kp_u_The_rows_buffered_before_it_were;
} else {
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__6);
__pyx_t_5 = __pyx_mstate_global->__pyx_kp_u__6;
}
+12508: + str(exc),
__pyx_t_5 = __Pyx_PyObject_Unicode(__pyx_v_exc); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12508, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12508, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+12509: exc.sender_error,
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_sender_error); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12509, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5);
+12510: in_doubt=exc.in_doubt)
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12510, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[5] = {__pyx_t_2, __pyx_t_4, __pyx_t_7, __pyx_t_5, __pyx_t_6}; #if CYTHON_VECTORCALL __pyx_t_9 = __pyx_mstate_global->__pyx_tuple[23]; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 12503, __pyx_L1_error) __Pyx_INCREF(__pyx_t_9); #else { PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_in_doubt}; __pyx_t_9 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+4, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 12503, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } #endif __pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_8, (4-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_9); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12503, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_1; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_1 = 0; goto __pyx_L0;
12511:
12512:
+12513: cdef void_int _qwp_row_split(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__qwp_row_split(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender, struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_pooled, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf, PyObject *__pyx_v_table_name, PyObject *__pyx_v_symbols, PyObject *__pyx_v_columns, PyObject *__pyx_v_at) {
size_t __pyx_v_hard_cap;
size_t __pyx_v_discarded;
PyObject *__pyx_v_exc = NULL;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_AddTraceback("questdb._client._qwp_row_split", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
12514: Sender sender,
12515: PooledSender pooled,
12516: Buffer buf,
12517: str table_name,
12518: dict symbols,
12519: dict columns,
12520: object at) except -1:
12521: """
12522: Publish the rows buffered before the newest one as a frame of their
12523: own, then add the newest row back to start the next batch.
12524: """
+12525: cdef size_t hard_cap = 0
__pyx_v_hard_cap = 0;
12526: cdef size_t discarded
+12527: buf._rewind_to_marker()
__pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__rewind_to_marker(__pyx_v_buf); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12527, __pyx_L1_error)
+12528: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L8_try_end;
__pyx_L3_error:;
/* … */
__pyx_L5_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L8_try_end:;
}
+12529: _qwp_row_publish(sender, pooled)
__pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_publish(__pyx_v_sender, __pyx_v_pooled); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12529, __pyx_L3_error)
+12530: except QuestDBError as exc:
__Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12530, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_5, __pyx_t_8); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_ErrRestore(__pyx_t_5, __pyx_t_6, __pyx_t_7); __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; if (__pyx_t_9) { __Pyx_AddTraceback("questdb._client._qwp_row_split", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5) < 0) __PYX_ERR(0, 12530, __pyx_L5_except_error) __Pyx_XGOTREF(__pyx_t_7); __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); __pyx_v_exc = __pyx_t_6; /*try:*/ { /* … */ /*finally:*/ { __pyx_L14_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_ExceptionSwap(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25); if ( unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22); __Pyx_XGOTREF(__pyx_t_20); __Pyx_XGOTREF(__pyx_t_21); __Pyx_XGOTREF(__pyx_t_22); __Pyx_XGOTREF(__pyx_t_23); __Pyx_XGOTREF(__pyx_t_24); __Pyx_XGOTREF(__pyx_t_25); __pyx_t_9 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename; { __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; } __Pyx_XGIVEREF(__pyx_t_23); __Pyx_XGIVEREF(__pyx_t_24); __Pyx_XGIVEREF(__pyx_t_25); __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25); __Pyx_XGIVEREF(__pyx_t_20); __Pyx_XGIVEREF(__pyx_t_21); __Pyx_XGIVEREF(__pyx_t_22); __Pyx_ErrRestore(__pyx_t_20, __pyx_t_21, __pyx_t_22); __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19; goto __pyx_L5_except_error; } } } goto __pyx_L5_except_error;
+12531: if exc.code == QuestDBErrorCode.BatchTooLarge:
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12531, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 12531, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 12531, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_12 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_8, __pyx_t_11, Py_EQ); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 12531, __pyx_L14_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if (__pyx_t_12) { /* … */ }
12532: # No frame can carry these rows, and the routine cannot cut
12533: # them any finer: it removes only the newest row.
+12534: discarded = line_sender_buffer_row_count(buf._impl)
__pyx_v_discarded = line_sender_buffer_row_count(__pyx_v_buf->_impl);
+12535: line_sender_buffer_clear(buf._impl)
line_sender_buffer_clear(__pyx_v_buf->_impl);
+12536: if pooled is not None:
__pyx_t_12 = (((PyObject *)__pyx_v_pooled) != Py_None);
if (__pyx_t_12) {
/* … */
}
+12537: qdb_pystr_buf_clear(buf._b)
qdb_pystr_buf_clear(__pyx_v_buf->_b);
+12538: pooled._batch_started_ms = 0
__pyx_v_pooled->_batch_started_ms = 0;
+12539: raise QuestDBError(
__pyx_t_8 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 12539, __pyx_L14_error)
__Pyx_GOTREF(__pyx_t_10);
+12540: QuestDBErrorCode.BatchTooLarge,
__Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 12540, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 12540, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+12541: f'{discarded} buffered '
__pyx_t_13 = __Pyx_PyUnicode_From_size_t(__pyx_v_discarded, 0, ' ', 'd'); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 12541, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_15 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_13, __pyx_mstate_global->__pyx_kp_u_buffered); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 12541, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+12542: + ('row was' if discarded == 1 else 'rows were')
__pyx_t_12 = (__pyx_v_discarded == 1);
if (__pyx_t_12) {
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_row_was);
__pyx_t_13 = __pyx_mstate_global->__pyx_kp_u_row_was;
} else {
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_rows_were);
__pyx_t_13 = __pyx_mstate_global->__pyx_kp_u_rows_were;
}
__pyx_t_16 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_t_15, __pyx_t_13); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 12542, __pyx_L14_error)
__Pyx_GOTREF(__pyx_t_16);
__Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+12543: + ' discarded and the row was not added: the buffered rows '
__pyx_t_13 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_16, __pyx_mstate_global->__pyx_kp_u_discarded_and_the_row_was_not_a); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 12543, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
12544: 'do not fit in one QWP/WebSocket frame even without it. '
12545: 'This can happen when the frame cap shrinks, for example '
12546: 'on reconnect, or when a lazily connected sender learns '
12547: "that the server's cap is below the default. "
+12548: + str(exc)) from exc
__pyx_t_16 = __Pyx_PyObject_Unicode(__pyx_v_exc); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 12548, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_16); __pyx_t_15 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_13, __pyx_t_16); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 12548, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_17 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_10))) { __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_10); assert(__pyx_t_8); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_10); __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_10, __pyx__function); __pyx_t_17 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_14, __pyx_t_15}; __pyx_t_11 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_10, __pyx_callargs+__pyx_t_17, (3-__pyx_t_17) | (__pyx_t_17*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 12539, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_11); } __Pyx_Raise(__pyx_t_11, 0, 0, __pyx_v_exc); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __PYX_ERR(0, 12539, __pyx_L14_error)
12549: # The rows before the newest one are as the sender's `flush()`
12550: # leaves them, and the newest one stays out, so a pooled lease
12551: # keeps only rows that fit in one frame.
+12552: raise _qwp_row_not_added(exc, False) from exc
__pyx_t_11 = __pyx_f_7questdb_7_client__qwp_row_not_added(__pyx_v_exc, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 12552, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_Raise(__pyx_t_11, 0, 0, __pyx_v_exc); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __PYX_ERR(0, 12552, __pyx_L14_error) }
12553: # Converts the row's values a second time.
+12554: _qwp_row_add(sender, pooled, buf, table_name, symbols, columns, at)
__pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_add(__pyx_v_sender, __pyx_v_pooled, __pyx_v_buf, __pyx_v_table_name, __pyx_v_symbols, __pyx_v_columns, __pyx_v_at); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12554, __pyx_L1_error)
+12555: if _qwp_row_due(sender, pooled, buf, &hard_cap):
__pyx_t_12 = __pyx_f_7questdb_7_client__qwp_row_due(__pyx_v_sender, __pyx_v_pooled, __pyx_v_buf, (&__pyx_v_hard_cap)); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 12555, __pyx_L1_error)
if (__pyx_t_12) {
/* … */
}
+12556: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
goto __pyx_L28_try_end;
__pyx_L23_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L25_except_error:;
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_ExceptionReset(__pyx_t_4, __pyx_t_3, __pyx_t_2);
goto __pyx_L1_error;
__pyx_L28_try_end:;
}
+12557: _qwp_row_publish(sender, pooled)
__pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_publish(__pyx_v_sender, __pyx_v_pooled); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12557, __pyx_L23_error)
+12558: except QuestDBError as exc:
__Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 12558, __pyx_L25_except_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_18 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_5, __pyx_t_11); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_ErrRestore(__pyx_t_5, __pyx_t_6, __pyx_t_7); __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; if (__pyx_t_18) { __Pyx_AddTraceback("questdb._client._qwp_row_split", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5) < 0) __PYX_ERR(0, 12558, __pyx_L25_except_error) __Pyx_XGOTREF(__pyx_t_7); __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); __pyx_v_exc = __pyx_t_6; /*try:*/ { /* … */ /*finally:*/ { __pyx_L34_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20); if ( unlikely(__Pyx_GetException(&__pyx_t_25, &__pyx_t_24, &__pyx_t_23) < 0)) __Pyx_ErrFetch(&__pyx_t_25, &__pyx_t_24, &__pyx_t_23); __Pyx_XGOTREF(__pyx_t_25); __Pyx_XGOTREF(__pyx_t_24); __Pyx_XGOTREF(__pyx_t_23); __Pyx_XGOTREF(__pyx_t_22); __Pyx_XGOTREF(__pyx_t_21); __Pyx_XGOTREF(__pyx_t_20); __pyx_t_18 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_19 = __pyx_filename; { __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; } __Pyx_XGIVEREF(__pyx_t_22); __Pyx_XGIVEREF(__pyx_t_21); __Pyx_XGIVEREF(__pyx_t_20); __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_21, __pyx_t_20); __Pyx_XGIVEREF(__pyx_t_25); __Pyx_XGIVEREF(__pyx_t_24); __Pyx_XGIVEREF(__pyx_t_23); __Pyx_ErrRestore(__pyx_t_25, __pyx_t_24, __pyx_t_23); __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_lineno = __pyx_t_18; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_19; goto __pyx_L25_except_error; } } } goto __pyx_L25_except_error;
+12559: if exc.code == QuestDBErrorCode.BatchTooLarge:
__pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 12559, __pyx_L34_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 12559, __pyx_L34_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 12559, __pyx_L34_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_12 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_11, __pyx_t_15, Py_EQ); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 12559, __pyx_L34_error) __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (__pyx_t_12) { /* … */ }
+12560: _qwp_row_reject(pooled, buf, exc, True)
__pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_reject(__pyx_v_pooled, __pyx_v_buf, __pyx_v_exc, 1); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12560, __pyx_L34_error)
+12561: raise _qwp_row_not_added(exc, True) from exc
__pyx_t_15 = __pyx_f_7questdb_7_client__qwp_row_not_added(__pyx_v_exc, 1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 12561, __pyx_L34_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_Raise(__pyx_t_15, 0, 0, __pyx_v_exc); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __PYX_ERR(0, 12561, __pyx_L34_error) }
12562:
12563:
+12564: cdef void_int _qwp_row_append(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__qwp_row_append(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender, struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_pooled, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf, PyObject *__pyx_v_table_name, PyObject *__pyx_v_symbols, PyObject *__pyx_v_columns, PyObject *__pyx_v_at) {
size_t __pyx_v_hard_cap;
size_t __pyx_v_row_count;
int __pyx_v_split;
PyObject *__pyx_v_exc = NULL;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_AddTraceback("questdb._client._qwp_row_append", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_exc);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
12565: Sender sender,
12566: PooledSender pooled,
12567: Buffer buf,
12568: str table_name,
12569: dict symbols,
12570: dict columns,
12571: object at) except -1:
12572: """
12573: Append a row to a QWP/WebSocket row buffer and run auto-flush, keeping
12574: every published frame within the connection's frame cap.
12575:
12576: The whole buffer goes out as one frame when it fits. When it does not,
12577: or its size estimate is already past the cap, the rows buffered before
12578: the new one go out on their own and the new row starts the next batch,
12579: so a single call publishes at most two frames.
12580:
12581: Whatever this raises, the new row is not in the buffer. A
12582: `BatchTooLarge` means either it does not fit in a frame on its own, or
12583: the rows before it do not fit even without it, as after the frame cap
12584: shrinks, and those rows are discarded. After any other failure the rows
12585: before it are as the sender's `flush()` leaves them: a pooled lease
12586: keeps them and a standalone sender has cleared them.
12587: """
+12588: cdef size_t hard_cap = 0
__pyx_v_hard_cap = 0;
12589: cdef size_t row_count
12590: cdef bint split
+12591: _qwp_row_add(sender, pooled, buf, table_name, symbols, columns, at)
__pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_add(__pyx_v_sender, __pyx_v_pooled, __pyx_v_buf, __pyx_v_table_name, __pyx_v_symbols, __pyx_v_columns, __pyx_v_at); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12591, __pyx_L1_error)
+12592: if not buf._marker_set:
__pyx_t_2 = (!__pyx_v_buf->_marker_set);
if (__pyx_t_2) {
/* … */
}
12593: # Nothing was written, and the split and reject paths below need
12594: # the rewind point. Such a row triggers no auto-flush, as in
12595: # `Buffer._row`.
+12596: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+12597: try:
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L12_try_end;
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
/* … */
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L5_error;
__pyx_L11_try_return:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L4_return;
__pyx_L12_try_end:;
}
}
+12598: if not _qwp_row_due(sender, pooled, buf, &hard_cap):
__pyx_t_2 = __pyx_f_7questdb_7_client__qwp_row_due(__pyx_v_sender, __pyx_v_pooled, __pyx_v_buf, (&__pyx_v_hard_cap)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 12598, __pyx_L7_error)
__pyx_t_6 = (!__pyx_t_2);
if (__pyx_t_6) {
/* … */
}
+12599: return 0
{
__pyx_r = 0;
}
goto __pyx_L11_try_return;
+12600: row_count = line_sender_buffer_row_count(buf._impl)
__pyx_v_row_count = line_sender_buffer_row_count(__pyx_v_buf->_impl);
12601: # Past the cap, the estimate cannot tell whether the whole buffer
12602: # fits. The rows before the newest one fit unless the cap shrank:
12603: # they were under the threshold when the previous row was checked,
12604: # and the estimate does not undercount a frame (see
12605: # `line_sender_buffer_size`). So they go out on their own, without
12606: # first encoding the whole buffer to find out.
+12607: split = (row_count > 1 and
__pyx_t_2 = (__pyx_v_row_count > 1);
if (__pyx_t_2) {
} else {
__pyx_t_6 = __pyx_t_2;
goto __pyx_L14_bool_binop_done;
}
+12608: line_sender_buffer_size(buf._impl) > hard_cap)
__pyx_t_2 = (line_sender_buffer_size(__pyx_v_buf->_impl) > __pyx_v_hard_cap);
__pyx_t_6 = __pyx_t_2;
__pyx_L14_bool_binop_done:;
__pyx_v_split = __pyx_t_6;
+12609: if not split:
__pyx_t_6 = (!__pyx_v_split);
if (__pyx_t_6) {
/* … */
}
+12610: try:
{
/*try:*/ {
/* … */
}
__pyx_L17_error:;
/* … */
__pyx_L19_except_error:;
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
goto __pyx_L7_error;
__pyx_L21_try_return:;
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
goto __pyx_L11_try_return;
__pyx_L18_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
}
+12611: _qwp_row_publish(sender, pooled)
__pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_publish(__pyx_v_sender, __pyx_v_pooled); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12611, __pyx_L17_error)
+12612: return 0
{
__pyx_r = 0;
}
goto __pyx_L21_try_return;
+12613: except QuestDBError as exc:
__Pyx_ErrFetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 12613, __pyx_L19_except_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_10, __pyx_t_13); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_ErrRestore(__pyx_t_10, __pyx_t_11, __pyx_t_12); __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; if (__pyx_t_14) { __Pyx_AddTraceback("questdb._client._qwp_row_append", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10) < 0) __PYX_ERR(0, 12613, __pyx_L19_except_error) __Pyx_XGOTREF(__pyx_t_12); __Pyx_XGOTREF(__pyx_t_11); __Pyx_XGOTREF(__pyx_t_10); __Pyx_INCREF(__pyx_t_11); __pyx_v_exc = __pyx_t_11; /*try:*/ { /* … */ /*finally:*/ { /*normal exit:*/{ __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; goto __pyx_L29; } __pyx_L28_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24); if ( unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21); __Pyx_XGOTREF(__pyx_t_19); __Pyx_XGOTREF(__pyx_t_20); __Pyx_XGOTREF(__pyx_t_21); __Pyx_XGOTREF(__pyx_t_22); __Pyx_XGOTREF(__pyx_t_23); __Pyx_XGOTREF(__pyx_t_24); __pyx_t_14 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename; { __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0; } __Pyx_XGIVEREF(__pyx_t_22); __Pyx_XGIVEREF(__pyx_t_23); __Pyx_XGIVEREF(__pyx_t_24); __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24); __Pyx_XGIVEREF(__pyx_t_19); __Pyx_XGIVEREF(__pyx_t_20); __Pyx_XGIVEREF(__pyx_t_21); __Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21); __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_lineno = __pyx_t_14; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18; goto __pyx_L19_except_error; } __pyx_L29:; } __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; goto __pyx_L18_exception_handled; } goto __pyx_L19_except_error;
+12614: if exc.code != QuestDBErrorCode.BatchTooLarge:
__pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 12614, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 12614, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_15); __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 12614, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __pyx_t_6 = __Pyx_PyObject_CompareBoolNe_object_object(__pyx_t_13, __pyx_t_16, Py_NE); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 12614, __pyx_L28_error) __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (unlikely(__pyx_t_6)) { /* … */ }
+12615: raise _qwp_row_not_added(exc, False) from exc
__pyx_t_16 = __pyx_f_7questdb_7_client__qwp_row_not_added(__pyx_v_exc, 0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 12615, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_Raise(__pyx_t_16, 0, 0, __pyx_v_exc); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __PYX_ERR(0, 12615, __pyx_L28_error)
+12616: if row_count == 1:
__pyx_t_6 = (__pyx_v_row_count == 1);
if (__pyx_t_6) {
/* … */
}
}
+12617: _qwp_row_reject(pooled, buf, exc, False)
__pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_reject(__pyx_v_pooled, __pyx_v_buf, __pyx_v_exc, 0); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12617, __pyx_L28_error)
+12618: _qwp_row_split(sender, pooled, buf, table_name, symbols, columns, at)
__pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_split(__pyx_v_sender, __pyx_v_pooled, __pyx_v_buf, __pyx_v_table_name, __pyx_v_symbols, __pyx_v_columns, __pyx_v_at); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12618, __pyx_L7_error)
+12619: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client._qwp_row_append", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12) < 0) __PYX_ERR(0, 12619, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
12620: # A path that removed the new row itself has spent the rewind
12621: # point, and a failed standalone publish has cleared the buffer,
12622: # rewind point included. Otherwise the row is still buffered, since
12623: # a failed publish leaves a pooled lease's rows in place, and it
12624: # comes out here.
+12625: buf._rewind_after_failure()
__pyx_t_16 = __pyx_f_7questdb_7_client_6Buffer__rewind_after_failure(__pyx_v_buf); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 12625, __pyx_L9_except_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+12626: if (pooled is not None and
__pyx_t_2 = (((PyObject *)__pyx_v_pooled) != Py_None);
if (__pyx_t_2) {
} else {
__pyx_t_6 = __pyx_t_2;
goto __pyx_L39_bool_binop_done;
}
/* … */
if (__pyx_t_6) {
/* … */
}
+12627: line_sender_buffer_row_count(buf._impl) == 0):
__pyx_t_2 = (line_sender_buffer_row_count(__pyx_v_buf->_impl) == 0);
__pyx_t_6 = __pyx_t_2;
__pyx_L39_bool_binop_done:;
+12628: pooled._batch_started_ms = 0
__pyx_v_pooled->_batch_started_ms = 0;
+12629: raise
__Pyx_GIVEREF(__pyx_t_10); __Pyx_GIVEREF(__pyx_t_11); __Pyx_XGIVEREF(__pyx_t_12); __Pyx_ErrRestoreWithState(__pyx_t_10, __pyx_t_11, __pyx_t_12); __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __PYX_ERR(0, 12629, __pyx_L9_except_error) }
12630: finally:
+12631: buf._clear_marker()
/*finally:*/ {
/*normal exit:*/{
__pyx_t_12 = __pyx_f_7questdb_7_client_6Buffer__clear_marker(__pyx_v_buf); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 12631, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_12);
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
goto __pyx_L6;
}
__pyx_L5_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_5 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7);
if ( unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_5);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_7);
__pyx_t_17 = __pyx_lineno; __pyx_t_14 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
{
__pyx_t_12 = __pyx_f_7questdb_7_client_6Buffer__clear_marker(__pyx_v_buf); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 12631, __pyx_L42_error)
__Pyx_GOTREF(__pyx_t_12);
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
}
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ErrRestore(__pyx_t_5, __pyx_t_4, __pyx_t_3);
__pyx_t_5 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0;
__pyx_lineno = __pyx_t_17; __pyx_clineno = __pyx_t_14; __pyx_filename = __pyx_t_18;
goto __pyx_L1_error;
__pyx_L42_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0;
goto __pyx_L1_error;
}
__pyx_L4_return: {
__pyx_t_1 = __pyx_r;
__pyx_t_12 = __pyx_f_7questdb_7_client_6Buffer__clear_marker(__pyx_v_buf); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 12631, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_12);
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
__pyx_r = __pyx_t_1;
goto __pyx_L0;
}
__pyx_L6:;
}
12632:
12633:
+12634: @cython.no_gc_clear
struct __pyx_vtabstruct_7questdb_7_client_PooledSender {
void (*_attach)(struct __pyx_obj_7questdb_7_client_PooledSender *, struct __pyx_obj_7questdb_7_client_QuestDB *, struct questdb_db *, struct qwp_sender *, struct __pyx_obj_7questdb_7_client_Buffer *);
__pyx_t_7questdb_7_client_void_int (*_check_open)(struct __pyx_obj_7questdb_7_client_PooledSender *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_check_not_in_row)(struct __pyx_obj_7questdb_7_client_PooledSender *, PyObject *);
struct __pyx_obj_7questdb_7_client_QuestDB *(*_enter_call_locked)(struct __pyx_obj_7questdb_7_client_PooledSender *);
void (*_exit_call_locked)(struct __pyx_obj_7questdb_7_client_PooledSender *, struct __pyx_obj_7questdb_7_client_QuestDB *);
__pyx_t_7questdb_7_client_void_int (*_check_not_mid_call)(struct __pyx_obj_7questdb_7_client_PooledSender *, PyObject *);
__pyx_t_7questdb_7_client_void_int (*_wait_locked)(struct __pyx_obj_7questdb_7_client_PooledSender *, uint64_t);
__pyx_t_7questdb_7_client_void_int (*_flush_locked)(struct __pyx_obj_7questdb_7_client_PooledSender *, int);
void (*_release_locked)(struct __pyx_obj_7questdb_7_client_PooledSender *);
};
static struct __pyx_vtabstruct_7questdb_7_client_PooledSender *__pyx_vtabptr_7questdb_7_client_PooledSender;
12635: cdef class PooledSender:
12636: """
12637: A row-building sender borrowed from a :class:`QuestDB` pool.
12638:
12639: Obtain a lease with :meth:`QuestDB.sender`; ``close()`` returns the
12640: native sender to the pool. Rows publish into an ordered,
12641: store-and-forward-covered QWP stream over one pooled connection.
12642:
12643: Rows go through ``row()``, ``dataframe()``, ``flush()``, ``wait()``
12644: and ``close()``; ``len(sender)`` is the number of buffered rows.
12645: Frame-level delivery tracking is available through
12646: :meth:`flush_and_get_fsn`, :meth:`flush_and_keep_and_get_fsn`,
12647: :meth:`published_fsn`, :meth:`acked_fsn` and
12648: :meth:`await_acked_fsn`, and per-lease server diagnostics through
12649: :meth:`poll_error` and :meth:`error_events_dropped`. Prefer
12650: :meth:`QuestDB.dataframe` for bulk loads; the lease's own
12651: ``dataframe()`` is a convenience that routes to the same direct
12652: columnar path. Row auto-flush is enabled by default at 1,000 rows, 100
12653: milliseconds, or a cap-derived byte threshold, and can be configured
12654: through the parent handle's connection settings.
12655:
12656: A lease is used by one thread at a time. It may move to another
12657: thread -- borrowed on one and used on a worker, say -- provided the
12658: hand-off is synchronized and no two threads call into it at once. To
12659: ingest from several threads, share the :class:`QuestDB` handle and
12660: borrow one lease per thread. Every method holds the lease's lock for
12661: its whole call, :meth:`dataframe` included, so a call from a second
12662: thread waits until the running one returns. Code that runs inside a
12663: call -- a column value's conversion, the Arrow stream
12664: :meth:`dataframe` reads, or a handler on the ``questdb`` logger,
12665: which :meth:`dataframe` logs its warnings to -- therefore must not
12666: wait on another thread that uses the same lease.
12667:
12668: Close every lease, or use it in a ``with`` block. A lease collected
12669: without ``close()`` returns its sender to the pool without sending
12670: the rows still buffered in it, and reports how many it discarded
12671: through the ``questdb`` logger at ``WARNING``.
12672: """
12673: cdef qwp_sender* _qwp
12674: cdef questdb_db* _db
12675: cdef QuestDB _handle
12676: cdef Buffer _buffer
12677: cdef object _lock
12678: cdef int64_t _batch_started_ms
12679: cdef int64_t _call_depth
12680:
+12681: def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_12PooledSender_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_12PooledSender_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
#if !CYTHON_VECTORCALL_TPNEW
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
#if !CYTHON_VECTORCALL_TPNEW
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__pyx_args, __pyx_nargs);
if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL_TPNEW(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) return -1;
if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
__pyx_r = __pyx_pf_7questdb_7_client_12PooledSender___cinit__(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_12PooledSender___cinit__(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.PooledSender.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+12682: self._qwp = NULL
__pyx_v_self->_qwp = NULL;
+12683: self._db = NULL
__pyx_v_self->_db = NULL;
+12684: self._handle = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_handle); __Pyx_DECREF((PyObject *)__pyx_v_self->_handle); __pyx_v_self->_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)Py_None);
+12685: self._buffer = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_buffer); __Pyx_DECREF((PyObject *)__pyx_v_self->_buffer); __pyx_v_self->_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None);
+12686: self._lock = threading.RLock()
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_RLock); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v_self->_lock); __Pyx_DECREF(__pyx_v_self->_lock); __pyx_v_self->_lock = __pyx_t_1; __pyx_t_1 = 0;
+12687: self._batch_started_ms = 0
__pyx_v_self->_batch_started_ms = 0;
+12688: self._call_depth = 0
__pyx_v_self->_call_depth = 0;
12689:
+12690: cdef void _attach(
static void __pyx_f_7questdb_7_client_12PooledSender__attach(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle, struct questdb_db *__pyx_v_db, struct qwp_sender *__pyx_v_sender, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer) {
/* … */
/* function exit code */
__Pyx_RefNannyFinishContext();
}
12691: self,
12692: QuestDB handle,
12693: questdb_db* db,
12694: qwp_sender* sender,
12695: Buffer buffer) noexcept:
+12696: self._handle = handle
__Pyx_INCREF((PyObject *)__pyx_v_handle); __Pyx_GIVEREF((PyObject *)__pyx_v_handle); __Pyx_GOTREF((PyObject *)__pyx_v_self->_handle); __Pyx_DECREF((PyObject *)__pyx_v_self->_handle); __pyx_v_self->_handle = __pyx_v_handle;
+12697: self._db = db
__pyx_v_self->_db = __pyx_v_db;
+12698: self._qwp = sender
__pyx_v_self->_qwp = __pyx_v_sender;
+12699: self._buffer = buffer
__Pyx_INCREF((PyObject *)__pyx_v_buffer); __Pyx_GIVEREF((PyObject *)__pyx_v_buffer); __Pyx_GOTREF((PyObject *)__pyx_v_self->_buffer); __Pyx_DECREF((PyObject *)__pyx_v_self->_buffer); __pyx_v_self->_buffer = __pyx_v_buffer;
+12700: self._batch_started_ms = 0
__pyx_v_self->_batch_started_ms = 0;
12701:
+12702: cdef void_int _check_open(self, str method) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_12PooledSender__check_open(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_method) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.PooledSender._check_open", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+12703: if self._qwp == NULL:
__pyx_t_1 = (__pyx_v_self->_qwp == NULL);
if (unlikely(__pyx_t_1)) {
/* … */
}
+12704: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12704, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+12705: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12705, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12705, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+12706: f"{method}() can't be called: Sender is closed.")
__pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12706, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_Sender_is_close); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12706, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_7}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12704, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 12704, __pyx_L1_error)
12707:
+12708: cdef void_int _check_not_in_row(self, str method) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_12PooledSender__check_not_in_row(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_method) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("questdb._client.PooledSender._check_not_in_row", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
12709: """
12710: Refuse a call that arrives while `row()` is part-way through
12711: assembling a row on this lease's buffer.
12712:
12713: A column value whose conversion runs Python code re-enters here on
12714: the same thread, and `self._lock` is re-entrant, so the lock alone
12715: lets it through. Flushing a half-written row cannot succeed, and
12716: returning the lease to the pool would free the buffer the row is
12717: still writing into.
12718: """
+12719: if self._buffer is not None and self._buffer._row_depth != 0:
__pyx_t_2 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_self->_buffer->_row_depth != 0);
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+12720: raise QuestDBError(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12720, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
+12721: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12721, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12721, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+12722: f"{method}() can't be called while a row is being "
__pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12722, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_while_a_row_is_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12722, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_9 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_5, __pyx__function); __pyx_t_9 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_t_8}; __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12720, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 12720, __pyx_L1_error)
12723: "written. `row()` is part-way through assembling a row "
12724: "and something it called has come back into this sender, "
12725: "most likely a column value whose conversion runs Python "
12726: "code.")
12727:
+12728: cdef QuestDB _enter_call_locked(self):
static struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_f_7questdb_7_client_12PooledSender__enter_call_locked(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) {
struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0;
struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.PooledSender._enter_call_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_handle);
__Pyx_XGIVEREF((PyObject *)__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
12729: """Count one of this lease's own calls, on the lease and on the
12730: handle it was borrowed from. Called with `self._lock` held.
12731:
12732: Every public method that writes, flushes, waits or closes counts,
12733: whether or not it looks like it runs the caller's Python: the list
12734: of methods that do has been wrong once per review round, and a
12735: counter raised on all of them cannot be short one entry. The six
12736: that only read state -- `__enter__`, `__len__`, `poll_error()`,
12737: `error_events_dropped()`, `published_fsn()` and `acked_fsn()` --
12738: run none of the caller's Python and do not count. The returned
12739: handle is the one to pass back to `_exit_call_locked`, because the
12740: lease drops its own reference when it is released.
12741:
12742: The two counts answer different questions. The handle's is
12743: per-thread and shared by every lease and call on that handle, so
12744: `QuestDB.close()` can see that the frame it would wait for is its
12745: own caller. The lease's own is per-lease, so `close()` can refuse
12746: to return the sender to the pool from inside a call still using
12747: it without refusing to close some unrelated lease.
12748: """
+12749: cdef QuestDB handle = self._handle
__pyx_t_1 = ((PyObject *)__pyx_v_self->_handle);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_1);
__pyx_t_1 = 0;
+12750: self._call_depth += 1
__pyx_v_self->_call_depth = (__pyx_v_self->_call_depth + 1);
+12751: if handle is not None:
__pyx_t_2 = (((PyObject *)__pyx_v_handle) != Py_None);
if (__pyx_t_2) {
/* … */
}
+12752: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L1_error;
__pyx_L9_try_end:;
}
+12753: handle._enter_scoped_call()
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_enter_scoped_call(__pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 12753, __pyx_L4_error)
+12754: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledSender._enter_call_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 12754, __pyx_L6_except_error)
__Pyx_XGOTREF(__pyx_t_1);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_7);
+12755: self._call_depth -= 1
__pyx_v_self->_call_depth = (__pyx_v_self->_call_depth - 1);
+12756: raise
__Pyx_GIVEREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_7); __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_6, __pyx_t_7); __pyx_t_1 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __PYX_ERR(0, 12756, __pyx_L6_except_error) }
+12757: return handle
{
struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_handle);
__pyx_r = __pyx_v_handle;
}
__Pyx_XDECREF((PyObject *)__pyx_temp);
}
goto __pyx_L0;
12758:
+12759: cdef void _exit_call_locked(self, QuestDB handle) except *:
static void __pyx_f_7questdb_7_client_12PooledSender__exit_call_locked(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle) {
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client.PooledSender._exit_call_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
}
12760: # The handle's thread-local update can raise; this lease is no longer
12761: # in its call either way, so unwind its guard first.
+12762: self._call_depth -= 1
__pyx_v_self->_call_depth = (__pyx_v_self->_call_depth - 1);
+12763: if handle is not None:
__pyx_t_1 = (((PyObject *)__pyx_v_handle) != Py_None);
if (__pyx_t_1) {
/* … */
}
+12764: handle._exit_scoped_call()
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_exit_scoped_call(__pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 12764, __pyx_L1_error)
12765:
+12766: cdef void_int _check_not_mid_call(self, str method) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_12PooledSender__check_not_mid_call(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_method) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.PooledSender._check_not_mid_call", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
12767: """
12768: Refuse a call that would end this lease while one of its own
12769: calls is still running.
12770:
12771: `dataframe()` runs the caller's Python for the whole plan build --
12772: reading `attrs`, sniffing object cells, pulling
12773: `__arrow_c_stream__` -- and `row()` runs it for every column
12774: value whose conversion is not pure C. That code can come back
12775: here. Returning the sender to the pool from inside it leaves the
12776: rest of the call working against a lease that is already closed,
12777: so every later use in the enclosing block raises.
12778: """
+12779: if self._call_depth != 0:
__pyx_t_1 = (__pyx_v_self->_call_depth != 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+12780: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12780, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+12781: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12781, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12781, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+12782: f"{method}() can't be called from inside a call on this "
__pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12782, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_from_inside_a_c); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12782, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_7}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12780, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 12780, __pyx_L1_error)
12783: 'sender lease. It would return the sender to the pool '
12784: 'while that call is still using it. Close the lease '
12785: 'after the call returns.')
12786:
+12787: cdef void_int _wait_locked(self, uint64_t timeout_millis) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_12PooledSender__wait_locked(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, uint64_t __pyx_v_timeout_millis) {
struct line_sender_error *__pyx_v_err;
PyThreadState *__pyx_v_gs;
int __pyx_v_ok;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.PooledSender._wait_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+12788: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+12789: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+12790: cdef bint ok = False
__pyx_v_ok = 0;
+12791: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+12792: ok = qwp_sender_wait(
__pyx_v_ok = qwp_sender_wait(__pyx_v_self->_qwp, qwpws_ack_level_ok, __pyx_v_timeout_millis, (&__pyx_v_err));
12793: self._qwp,
12794: qwpws_ack_level.qwpws_ack_level_ok,
12795: timeout_millis,
12796: &err)
+12797: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12798: if not ok:
__pyx_t_1 = (!__pyx_v_ok);
if (unlikely(__pyx_t_1)) {
/* … */
}
+12799: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12799, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 12799, __pyx_L1_error)
12800:
+12801: cdef void_int _flush_locked(self, bint wait) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_12PooledSender__flush_locked(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, int __pyx_v_wait) {
struct line_sender_error *__pyx_v_err;
PyThreadState *__pyx_v_gs;
int __pyx_v_ok;
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.PooledSender._flush_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+12802: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+12803: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+12804: cdef bint ok = False
__pyx_v_ok = 0;
+12805: self._check_open('flush')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12805, __pyx_L1_error)
+12806: self._check_not_in_row('flush')
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_not_in_row(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12806, __pyx_L1_error)
+12807: if line_sender_buffer_row_count(self._buffer._impl) == 0:
__pyx_t_2 = (line_sender_buffer_row_count(__pyx_v_self->_buffer->_impl) == 0);
if (__pyx_t_2) {
/* … */
}
+12808: self._batch_started_ms = 0
__pyx_v_self->_batch_started_ms = 0;
+12809: if wait:
if (__pyx_v_wait) {
/* … */
}
+12810: self._wait_locked(0)
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_wait_locked(__pyx_v_self, 0); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12810, __pyx_L1_error)
+12811: return 0
{
__pyx_r = 0;
}
goto __pyx_L0;
+12812: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+12813: if wait:
if (__pyx_v_wait) {
/* … */
goto __pyx_L5;
}
+12814: ok = qwp_sender_flush_buffer_and_wait(
__pyx_v_ok = qwp_sender_flush_buffer_and_wait(__pyx_v_self->_qwp, __pyx_v_self->_buffer->_impl, qwpws_ack_level_ok, (&__pyx_v_err));
12815: self._qwp,
12816: self._buffer._impl,
12817: qwpws_ack_level.qwpws_ack_level_ok,
12818: &err)
12819: else:
+12820: ok = qwp_sender_flush_buffer(
/*else*/ {
/* … */
__pyx_v_ok = qwp_sender_flush_buffer(__pyx_v_self->_qwp, __pyx_v_self->_buffer->_impl, (&__pyx_v_err));
}
__pyx_L5:;
12821: self._qwp, self._buffer._impl, &err)
+12822: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12823: if not ok:
__pyx_t_2 = (!__pyx_v_ok);
if (unlikely(__pyx_t_2)) {
/* … */
}
+12824: raise c_err_to_py(err)
__pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12824, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 12824, __pyx_L1_error)
+12825: qdb_pystr_buf_clear(self._buffer._b)
qdb_pystr_buf_clear(__pyx_v_self->_buffer->_b);
+12826: self._batch_started_ms = 0
__pyx_v_self->_batch_started_ms = 0;
12827:
+12828: cdef void _release_locked(self) except *:
static void __pyx_f_7questdb_7_client_12PooledSender__release_locked(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) {
struct qwp_sender *__pyx_v_sender;
struct questdb_db *__pyx_v_db;
struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0;
PyThreadState *__pyx_v_gs;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("questdb._client.PooledSender._release_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_handle);
__Pyx_RefNannyFinishContext();
}
12829: """Hand the borrowed sender back to the pool.
12830:
12831: Every refusal belongs to `close()`, which runs them before it
12832: reaches here. This is also the `__dealloc__` path, where the
12833: function is `except *` and cannot report anything: a raise here
12834: would skip `questdb_db_return_sender` below, leaving the pool a
12835: sender short and `QuestDB.close()` waiting on a lease that can
12836: never come back. `PooledReader._release_locked` is the same
12837: shape.
12838: """
+12839: cdef qwp_sender* sender = self._qwp
__pyx_t_1 = __pyx_v_self->_qwp; __pyx_v_sender = __pyx_t_1;
+12840: cdef questdb_db* db = self._db
__pyx_t_2 = __pyx_v_self->_db; __pyx_v_db = __pyx_t_2;
+12841: cdef QuestDB handle = self._handle
__pyx_t_3 = ((PyObject *)__pyx_v_self->_handle);
__Pyx_INCREF(__pyx_t_3);
__pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_3);
__pyx_t_3 = 0;
+12842: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
+12843: if sender == NULL:
__pyx_t_4 = (__pyx_v_sender == NULL);
if (__pyx_t_4) {
/* … */
}
+12844: return
{
}
goto __pyx_L0;
+12845: self._qwp = NULL
__pyx_v_self->_qwp = NULL;
+12846: self._db = NULL
__pyx_v_self->_db = NULL;
+12847: self._buffer = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_buffer); __Pyx_DECREF((PyObject *)__pyx_v_self->_buffer); __pyx_v_self->_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None);
+12848: self._handle = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_handle); __Pyx_DECREF((PyObject *)__pyx_v_self->_handle); __pyx_v_self->_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)Py_None);
+12849: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+12850: questdb_db_return_sender(db, sender)
questdb_db_return_sender(__pyx_v_db, __pyx_v_sender);
+12851: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12852: if handle is not None:
__pyx_t_4 = (((PyObject *)__pyx_v_handle) != Py_None);
if (__pyx_t_4) {
/* … */
}
+12853: handle._end_db_use(scoped=False)
__pyx_t_5.__pyx_n = 1;
__pyx_t_5.scoped = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_end_db_use(__pyx_v_handle, &__pyx_t_5); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 12853, __pyx_L1_error)
12854:
+12855: def __enter__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_3__enter__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_3__enter__ = {"__enter__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_3__enter__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_3__enter__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
#if !CYTHON_VECTORCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__enter__ (wrapper)", 0);
#if !CYTHON_VECTORCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__enter__", 1, 0, 0, __pyx_nargs); return NULL; }
const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) return NULL;
if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__enter__", __pyx_kwds); return NULL;}
__pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_2__enter__(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_2__enter__(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_AddTraceback("questdb._client.PooledSender.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_3__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender___enter, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[158])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12855, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
#endif
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_enter, __pyx_t_17) < (0)) __PYX_ERR(0, 12855, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+12856: with self._lock:
/*with:*/ {
__pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12856, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = NULL;
__pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12856, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12856, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
goto __pyx_L12_try_end;
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledSender.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 12856, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_3);
{
PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
__pyx_t_10 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 12856, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_10);
}
__pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_10, NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 12856, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_11);
__pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_11);
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
if (__pyx_t_12 < (0)) __PYX_ERR(0, 12856, __pyx_L9_except_error)
__pyx_t_13 = (!__pyx_t_12);
if (unlikely(__pyx_t_13)) {
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_3);
__pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0;
__PYX_ERR(0, 12856, __pyx_L9_except_error)
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_exception_handled;
}
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L1_error;
__pyx_L8_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_L12_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_1) {
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12856, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
goto __pyx_L6;
}
__pyx_L6:;
}
goto __pyx_L16;
__pyx_L3_error:;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L1_error;
__pyx_L16:;
}
+12857: self._check_open('__enter__')
__pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12857, __pyx_L7_error)
+12858: return self
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_self);
__pyx_r = ((PyObject *)__pyx_v_self);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
12859:
+12860: def row(
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_5row(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_4row, "\n Append one row to this sender\047s QWP buffer.\n\n When pooled auto-flush is enabled on the :class:`QuestDB` handle,\n completing a row that breaches a configured row, byte, or interval\n threshold publishes the buffer without waiting for an acknowledgement.\n A buffer whose size estimate reaches the connection\047s frame cap is\n published too, even with ``auto_flush_bytes=off``. Every published\n frame fits the frame cap: when the whole buffer does not, or its\n size estimate is past the cap, the rows buffered before this one go\n out as a frame of their own and this row starts the next batch, so\n one call publishes at most two frames. Re-adding the row converts its\n values a second time.\n\n Whatever this method raises, the row was not added.\n :class:`QuestDBErrorCode.BatchTooLarge` means either it does not fit\n in a frame on its own, or the rows buffered before it do not fit\n even without it, which can happen after the frame cap shrinks, for\n example on reconnect; those rows are then discarded, and the error\n says how many. Any other error raised by a publish propagates from\n this method and leaves the rows buffered before it in place.\n\n See :func:`Buffer.row <questdb.ingress.Buffer.row>` for supported\n column types, protocol restrictions, server requirements, and\n ``NULL``-sentinel behavior.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_5row = {"row", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_5row, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_4row}; static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_5row(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_table_name = 0; PyObject *__pyx_v_symbols = 0; PyObject *__pyx_v_columns = 0; PyObject *__pyx_v_at = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("row (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_table_name,&__pyx_mstate_global->__pyx_n_u_at,&__pyx_mstate_global->__pyx_n_u_symbols,&__pyx_mstate_global->__pyx_n_u_columns,0}; PyObject* values[4] = {0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 12860, __pyx_L3_error) if (likely(__pyx_kwds_len > 0)) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 12860, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "row", 0) < (0)) __PYX_ERR(0, 12860, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_4row(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_table_name, PyObject *__pyx_v_symbols, PyObject *__pyx_v_columns, PyObject *__pyx_v_at) { struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf = 0; struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("questdb._client.PooledSender.row", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_buf); __Pyx_XDECREF((PyObject *)__pyx_v_handle); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12860, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); /* … */ __pyx_t_19 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 12860, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Optional_str) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_columns, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Union_None_boo_2) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_Timest) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error) __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_5row, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_row, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[159])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 12860, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20); #endif __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_20, __pyx_t_17); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_20, __pyx_t_19); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_row_2, __pyx_t_20) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
12861: self,
12862: table_name: str,
12863: *,
+12864: symbols: Optional[Dict[str, Optional[str]]] = None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_symbols, Py_None) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error)
12865: columns: Optional[Dict[
12866: str,
12867: Union[None, bool, int, float, str, TimestampMicros,
12868: TimestampNanos, datetime.datetime, numpy.ndarray,
12869: Decimal, uuid.UUID, ipaddress.IPv4Address, bytes,
12870: bytearray, memoryview, Char, DateMillis, Long256,
+12871: Geohash]]] = None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("row", 1, 1, 1, i); __PYX_ERR(0, 12860, __pyx_L3_error) } } for (Py_ssize_t i = 1; i < 2; i++) { if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("row", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 12860, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { __Pyx_RaiseKeywordRequired("row", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 12860, __pyx_L3_error) } __pyx_v_table_name = ((PyObject*)values[0]); __pyx_v_at = values[1]; __pyx_v_symbols = ((PyObject*)values[2]); __pyx_v_columns = ((PyObject*)values[3]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("row", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 12860, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.PooledSender.row", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 0, "table_name", 2))) __PYX_ERR(0, 12862, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_symbols), (&PyDict_Type), 1, "symbols", 2))) __PYX_ERR(0, 12864, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_columns), (&PyDict_Type), 1, "columns", 2))) __PYX_ERR(0, 12865, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_4row(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self), __pyx_v_table_name, __pyx_v_symbols, __pyx_v_columns, __pyx_v_at); /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_columns, Py_None) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error)
12872: at: Union[ServerTimestampType, TimestampNanos,
12873: datetime.datetime]):
12874: """
12875: Append one row to this sender's QWP buffer.
12876:
12877: When pooled auto-flush is enabled on the :class:`QuestDB` handle,
12878: completing a row that breaches a configured row, byte, or interval
12879: threshold publishes the buffer without waiting for an acknowledgement.
12880: A buffer whose size estimate reaches the connection's frame cap is
12881: published too, even with ``auto_flush_bytes=off``. Every published
12882: frame fits the frame cap: when the whole buffer does not, or its
12883: size estimate is past the cap, the rows buffered before this one go
12884: out as a frame of their own and this row starts the next batch, so
12885: one call publishes at most two frames. Re-adding the row converts its
12886: values a second time.
12887:
12888: Whatever this method raises, the row was not added.
12889: :class:`QuestDBErrorCode.BatchTooLarge` means either it does not fit
12890: in a frame on its own, or the rows buffered before it do not fit
12891: even without it, which can happen after the frame cap shrinks, for
12892: example on reconnect; those rows are then discarded, and the error
12893: says how many. Any other error raised by a publish propagates from
12894: this method and leaves the rows buffered before it in place.
12895:
12896: See :func:`Buffer.row <questdb.ingress.Buffer.row>` for supported
12897: column types, protocol restrictions, server requirements, and
12898: ``NULL``-sentinel behavior.
12899: """
12900: cdef Buffer buf
12901: cdef QuestDB handle
+12902: if at is None:
__pyx_t_1 = (__pyx_v_at == Py_None);
if (unlikely(__pyx_t_1)) {
/* … */
}
+12903: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12903, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+12904: QuestDBErrorCode.InvalidTimestamp,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12904, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12904, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_7 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_at_must_be_of_type_TimestampNan}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12903, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 12903, __pyx_L1_error)
12905: "`at` must be of type TimestampNanos, datetime, or "
12906: "ServerTimestamp")
+12907: with self._lock:
/*with:*/ {
__pyx_t_8 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12907, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_4 = NULL;
__pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12907, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_6))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12907, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
goto __pyx_L13_try_end;
__pyx_L8_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledSender.row", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_6, &__pyx_t_4) < 0) __PYX_ERR(0, 12907, __pyx_L10_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_4);
{
PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_6, __pyx_t_4};
__pyx_t_3 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12907, __pyx_L10_except_error)
__Pyx_GOTREF(__pyx_t_3);
}
__pyx_t_21 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_3, NULL);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 12907, __pyx_L10_except_error)
__Pyx_GOTREF(__pyx_t_21);
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_21);
__Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
if (__pyx_t_1 < (0)) __PYX_ERR(0, 12907, __pyx_L10_except_error)
__pyx_t_22 = (!__pyx_t_1);
if (unlikely(__pyx_t_22)) {
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_6, __pyx_t_4);
__pyx_t_2 = 0; __pyx_t_6 = 0; __pyx_t_4 = 0;
__PYX_ERR(0, 12907, __pyx_L10_except_error)
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L9_exception_handled;
}
__pyx_L10_except_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
goto __pyx_L1_error;
__pyx_L9_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__pyx_L13_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_8) {
__pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 12907, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
}
goto __pyx_L7;
}
__pyx_L7:;
}
goto __pyx_L22;
__pyx_L4_error:;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
goto __pyx_L1_error;
__pyx_L22:;
}
+12908: self._check_open('row')
__pyx_t_12 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_row_2); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12908, __pyx_L8_error)
+12909: handle = self._enter_call_locked()
__pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12909, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2); __pyx_t_2 = 0;
+12910: try:
/*try:*/ {
12911: # The lease holds the only reference to the buffer, and a
12912: # column value whose conversion runs Python code can reach
12913: # back in here. A strong local reference keeps the buffer
12914: # alive for the whole row, including its cleanup.
+12915: buf = self._buffer
__pyx_t_2 = ((PyObject *)__pyx_v_self->_buffer);
__Pyx_INCREF(__pyx_t_2);
__pyx_v_buf = ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_2);
__pyx_t_2 = 0;
+12916: _qwp_row_append(
__pyx_t_12 = __pyx_f_7questdb_7_client__qwp_row_append(((struct __pyx_obj_7questdb_7_client_Sender *)Py_None), __pyx_v_self, __pyx_v_buf, __pyx_v_table_name, ((PyObject*)__pyx_v_symbols), __pyx_v_columns, __pyx_v_at); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12916, __pyx_L15_error)
}
12917: None, self, buf, table_name, symbols, columns, at)
12918: finally:
+12919: self._exit_call_locked(handle)
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 12919, __pyx_L8_error)
goto __pyx_L16;
}
__pyx_L15_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_ExceptionSwap(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
if ( unlikely(__Pyx_GetException(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18) < 0)) __Pyx_ErrFetch(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__Pyx_XGOTREF(__pyx_t_20);
__Pyx_XGOTREF(__pyx_t_21);
__pyx_t_13 = __pyx_lineno; __pyx_t_14 = __pyx_clineno; __pyx_t_15 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 12919, __pyx_L18_error)
}
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_XGIVEREF(__pyx_t_21);
__Pyx_ExceptionReset(__pyx_t_19, __pyx_t_20, __pyx_t_21);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_ErrRestore(__pyx_t_16, __pyx_t_17, __pyx_t_18);
__pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0;
__pyx_lineno = __pyx_t_13; __pyx_clineno = __pyx_t_14; __pyx_filename = __pyx_t_15;
goto __pyx_L8_error;
__pyx_L18_error:;
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_XGIVEREF(__pyx_t_21);
__Pyx_ExceptionReset(__pyx_t_19, __pyx_t_20, __pyx_t_21);
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0;
goto __pyx_L8_error;
}
__pyx_L16:;
}
+12920: return self
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_self);
__pyx_r = ((PyObject *)__pyx_v_self);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
12921:
+12922: def dataframe(
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_7dataframe(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_6dataframe, "\n Bulk-load a whole DataFrame over a direct columnar connection\n borrowed from the pool for the duration of this call.\n\n Prefer :meth:`QuestDB.dataframe` \342\200\224 this convenience forwards to the\n same path and is **not** part of this sender\047s row stream: the frame\n is committed over its own connection and becomes visible to SQL\n immediately, without waiting for rows appended to this sender with\n :meth:`row` to drain. There is therefore **no ordering relationship**\n between ``dataframe()`` and buffered rows \342\200\224 ``dataframe()`` does not\n flush them; publish those with :meth:`flush`.\n\n Being the handle\047s own path, it is refused once\n :meth:`QuestDB.close` has started, as :meth:`QuestDB.dataframe`\n is, even though this lease\047s other methods keep working until\n it is closed. A load already running when ``close()`` starts\n finishes.\n\n Arguments mirror :meth:`QuestDB.dataframe`.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_7dataframe = {"dataframe", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_7dataframe, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_6dataframe}; static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_7dataframe(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_df = 0; PyObject *__pyx_v_table_name = 0; PyObject *__pyx_v_table_name_col = 0; PyObject *__pyx_v_symbols = 0; PyObject *__pyx_v_at = 0; PyObject *__pyx_v_max_rows_per_batch = 0; PyObject *__pyx_v_schema_overrides = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("dataframe (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_df_2,&__pyx_mstate_global->__pyx_n_u_at,&__pyx_mstate_global->__pyx_n_u_table_name,&__pyx_mstate_global->__pyx_n_u_table_name_col,&__pyx_mstate_global->__pyx_n_u_symbols,&__pyx_mstate_global->__pyx_n_u_max_rows_per_batch,&__pyx_mstate_global->__pyx_n_u_schema_overrides_2,0}; PyObject* values[7] = {0,0,0,0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 12922, __pyx_L3_error) if (likely(__pyx_kwds_len > 0)) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 12922, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "dataframe", 0) < (0)) __PYX_ERR(0, 12922, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_6dataframe(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at, PyObject *__pyx_v_max_rows_per_batch, PyObject *__pyx_v_schema_overrides) { struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_19); __Pyx_AddTraceback("questdb._client.PooledSender.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_handle); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 12922, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); /* … */ __pyx_t_19 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 12922, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 12922, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_table_name_col, __pyx_mstate_global->__pyx_kp_u_Union_None_int_str) < (0)) __PYX_ERR(0, 12922, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Union_str_bool_List_int_List_str) < (0)) __PYX_ERR(0, 12922, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_int_st) < (0)) __PYX_ERR(0, 12922, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 12922, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_object) < (0)) __PYX_ERR(0, 12922, __pyx_L1_error) __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_7dataframe, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_dataframe, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[160])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12922, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_17, __pyx_t_20); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_17, __pyx_t_19); __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_dataframe, __pyx_t_17) < (0)) __PYX_ERR(0, 12922, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
12923: self,
12924: df,
12925: *,
+12926: table_name: Optional[str] = None,
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None)); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 12922, __pyx_L1_error)
+12927: table_name_col: Union[None, int, str] = None,
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_n_u_auto)); if (!values[5]) values[5] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__40); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_table_name_col, Py_None) < (0)) __PYX_ERR(0, 12922, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_n_u_auto) < (0)) __PYX_ERR(0, 12922, __pyx_L1_error)
12928: symbols: Union[str, bool, List[int], List[str]] = 'auto',
12929: at: Union[ServerTimestampType, int, str, TimestampNanos,
12930: datetime.datetime],
+12931: max_rows_per_batch: int = DEFAULT_MAX_CHUNK_ROWS,
__Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 12931, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); if (__Pyx_PyInt_FromNumber(&__pyx_t_20, NULL, 1) < (0)) __PYX_ERR(0, 12931, __pyx_L1_error) __pyx_mstate_global->__pyx_k__40 = ((PyObject*)__pyx_t_20); __Pyx_GIVEREF(__pyx_t_20); __pyx_t_20 = 0; /* … */ __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 12931, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (__Pyx_PyInt_FromNumber(&__pyx_t_19, NULL, 1) < (0)) __PYX_ERR(0, 12931, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_t_19) < (0)) __PYX_ERR(0, 12922, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+12932: schema_overrides: Optional[Dict[str, object]] = None):
if (!values[6]) values[6] = __Pyx_NewRef(((PyObject*)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, i); __PYX_ERR(0, 12922, __pyx_L3_error) } } for (Py_ssize_t i = 1; i < 2; i++) { if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("dataframe", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 12922, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { __Pyx_RaiseKeywordRequired("dataframe", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 12922, __pyx_L3_error) } __pyx_v_df = values[0]; __pyx_v_at = values[1]; __pyx_v_table_name = ((PyObject*)values[2]); __pyx_v_table_name_col = values[3]; __pyx_v_symbols = values[4]; if (__Pyx_PyInt_FromNumber(&values[5], "max_rows_per_batch", 0) < (0)) __PYX_ERR(0, 12931, __pyx_L3_error) __pyx_v_max_rows_per_batch = ((PyObject*)values[5]); __pyx_v_schema_overrides = ((PyObject*)values[6]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 12922, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.PooledSender.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 1, "table_name", 2))) __PYX_ERR(0, 12926, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_max_rows_per_batch), (&PyLong_Type), 0, "max_rows_per_batch", 2))) __PYX_ERR(0, 12931, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema_overrides), (&PyDict_Type), 1, "schema_overrides", 2))) __PYX_ERR(0, 12932, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_6dataframe(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self), __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_v_max_rows_per_batch, __pyx_v_schema_overrides); /* … */ if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, Py_None) < (0)) __PYX_ERR(0, 12922, __pyx_L1_error)
12933: """
12934: Bulk-load a whole DataFrame over a direct columnar connection
12935: borrowed from the pool for the duration of this call.
12936:
12937: Prefer :meth:`QuestDB.dataframe` — this convenience forwards to the
12938: same path and is **not** part of this sender's row stream: the frame
12939: is committed over its own connection and becomes visible to SQL
12940: immediately, without waiting for rows appended to this sender with
12941: :meth:`row` to drain. There is therefore **no ordering relationship**
12942: between ``dataframe()`` and buffered rows — ``dataframe()`` does not
12943: flush them; publish those with :meth:`flush`.
12944:
12945: Being the handle's own path, it is refused once
12946: :meth:`QuestDB.close` has started, as :meth:`QuestDB.dataframe`
12947: is, even though this lease's other methods keep working until
12948: it is closed. A load already running when ``close()`` starts
12949: finishes.
12950:
12951: Arguments mirror :meth:`QuestDB.dataframe`.
12952: """
12953: cdef QuestDB handle
+12954: with self._lock:
/*with:*/ {
__pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12954, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = NULL;
__pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12954, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12954, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
goto __pyx_L12_try_end;
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledSender.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4) < 0) __PYX_ERR(0, 12954, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_4);
{
PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_3, __pyx_t_4};
__pyx_t_19 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 12954, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_19);
}
__pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_19, NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 12954, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_18);
__pyx_t_20 = __Pyx_PyObject_IsTrue(__pyx_t_18);
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
if (__pyx_t_20 < (0)) __PYX_ERR(0, 12954, __pyx_L9_except_error)
__pyx_t_21 = (!__pyx_t_20);
if (unlikely(__pyx_t_21)) {
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_3, __pyx_t_4);
__pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0;
__PYX_ERR(0, 12954, __pyx_L9_except_error)
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L8_exception_handled;
}
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L1_error;
__pyx_L8_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_L12_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_1) {
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12954, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
goto __pyx_L6;
}
__pyx_L6:;
}
goto __pyx_L21;
__pyx_L3_error:;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L1_error;
__pyx_L21:;
}
+12955: self._check_open('dataframe')
__pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_dataframe); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12955, __pyx_L7_error)
+12956: self._check_not_in_row('dataframe')
__pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_not_in_row(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_dataframe); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12956, __pyx_L7_error)
+12957: handle = self._enter_call_locked()
__pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12957, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2); __pyx_t_2 = 0;
12958: # The lock is held for the whole load, as in every method of a
12959: # lease, which one thread uses at a time. That keeps the call
12960: # count visible only to the thread running the call: a
12961: # `close()` from the caller's own Python mid-plan is refused as
12962: # re-entry, and one from another thread waits for the load.
+12963: try:
/*try:*/ {
+12964: handle.dataframe(
__pyx_t_4 = ((PyObject *)__pyx_v_handle);
__Pyx_INCREF(__pyx_t_4);
/* … */
{
PyObject* __pyx_temp[6] = {__pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_n_u_table_name_col, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_mstate_global->__pyx_n_u_schema_overrides_2};
__pyx_mstate_global->__pyx_tuple[38] = __Pyx_PyTuple_FromArray(__pyx_temp, 6); if (unlikely(!__pyx_mstate_global->__pyx_tuple[38])) __PYX_ERR(0, 12964, __pyx_L1_error)
__Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[38]);
}
__Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[38]);
12965: df,
12966: table_name=table_name,
12967: table_name_col=table_name_col,
12968: symbols=symbols,
12969: at=at,
12970: max_rows_per_batch=max_rows_per_batch,
+12971: schema_overrides=schema_overrides)
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[8] = {__pyx_t_4, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_v_max_rows_per_batch, __pyx_v_schema_overrides};
#if CYTHON_VECTORCALL
__pyx_t_3 = __pyx_mstate_global->__pyx_tuple[38];
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12964, __pyx_L14_error)
__Pyx_INCREF(__pyx_t_3);
#else
{
PyObject *__pyx_temp[6] = {__pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_n_u_table_name_col, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_mstate_global->__pyx_n_u_schema_overrides_2};
__pyx_t_3 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 6);
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12964, __pyx_L14_error)
__Pyx_GOTREF(__pyx_t_3);
}
#endif
__pyx_t_2 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_dataframe, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3);
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12964, __pyx_L14_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
}
12972: finally:
+12973: self._exit_call_locked(handle)
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 12973, __pyx_L7_error)
goto __pyx_L15;
}
__pyx_L14_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
if ( unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__pyx_t_10 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_12 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 12973, __pyx_L17_error)
}
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ErrRestore(__pyx_t_13, __pyx_t_14, __pyx_t_15);
__pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
__pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_12;
goto __pyx_L7_error;
__pyx_L17_error:;
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
goto __pyx_L7_error;
}
__pyx_L15:;
}
+12974: return self
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_self);
__pyx_r = ((PyObject *)__pyx_v_self);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
12975:
+12976: def __len__(self):
/* Python wrapper */ static Py_ssize_t __pyx_pw_7questdb_7_client_12PooledSender_9__len__(PyObject *__pyx_v_self); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_8__len__, "Number of buffered (unpublished) rows."); #if CYTHON_UPDATE_DESCRIPTOR_DOC struct wrapperbase __pyx_wrapperbase_7questdb_7_client_12PooledSender_8__len__; #endif static Py_ssize_t __pyx_pw_7questdb_7_client_12PooledSender_9__len__(PyObject *__pyx_v_self) { CYTHON_UNUSED PyObject *const *__pyx_kwvalues; Py_ssize_t __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_8__len__(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static Py_ssize_t __pyx_pf_7questdb_7_client_12PooledSender_8__len__(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) { Py_ssize_t __pyx_r; /* … */ /* function exit code */ __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_10); __Pyx_AddTraceback("questdb._client.PooledSender.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; }
12977: """Number of buffered (unpublished) rows."""
+12978: with self._lock:
/*with:*/ {
__pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12978, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = NULL;
__pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12978, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12978, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledSender.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 12978, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_3);
{
PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
__pyx_t_10 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 12978, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_10);
}
__pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_10, NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 12978, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_11);
__pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_11);
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
if (__pyx_t_12 < (0)) __PYX_ERR(0, 12978, __pyx_L9_except_error)
__pyx_t_13 = (!__pyx_t_12);
if (unlikely(__pyx_t_13)) {
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_3);
__pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0;
__PYX_ERR(0, 12978, __pyx_L9_except_error)
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_exception_handled;
}
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L1_error;
__pyx_L11_try_return:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L4_return;
__pyx_L8_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_1) {
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12978, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
goto __pyx_L6;
}
__pyx_L4_return: {
__pyx_t_14 = __pyx_r;
if (__pyx_t_1) {
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12978, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
__pyx_r = __pyx_t_14;
goto __pyx_L0;
}
__pyx_L6:;
}
goto __pyx_L16;
__pyx_L3_error:;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L1_error;
__pyx_L16:;
}
+12979: self._check_open('__len__')
__pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_len); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12979, __pyx_L7_error)
+12980: return line_sender_buffer_row_count(self._buffer._impl)
{
__pyx_r = line_sender_buffer_row_count(__pyx_v_self->_buffer->_impl);
}
goto __pyx_L11_try_return;
12981:
+12982: def flush(self, *, bint wait=False):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_11flush(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_10flush, "\n Publish and clear buffered rows.\n\n By default this returns after local store-and-forward acceptance.\n Pass ``wait=True`` to wait for the server\047s OK acknowledgement of\n everything published through this lease. The wait is a pure ack\n barrier: only a terminal connection failure raises. Server\n rejections are delivered to the pool\047s ``error_handler``\n (default: the ``questdb`` logger) instead; retriable ones are\n replayed by the store-and-forward queue.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_11flush = {"flush", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_11flush, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_10flush}; static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_11flush(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { int __pyx_v_wait; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("flush (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_wait,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 12982, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 0: break; default: goto __pyx_L5_argtuple_error; } if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, 0, __pyx_kwds_len, "flush", 0) < (0)) __PYX_ERR(0, 12982, __pyx_L3_error) } else if (unlikely(__pyx_nargs != 0)) { goto __pyx_L5_argtuple_error; } else { } if (values[0]) { __pyx_v_wait = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_wait == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12982, __pyx_L3_error) } else { __pyx_v_wait = ((int)0); } } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("flush", 1, 0, 0, __pyx_nargs); __PYX_ERR(0, 12982, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.PooledSender.flush", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_10flush(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self), __pyx_v_wait); /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_10flush(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, int __pyx_v_wait) { struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_19); __Pyx_AddTraceback("questdb._client.PooledSender.flush", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_handle); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12982, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_wait, Py_False) < (0)) __PYX_ERR(0, 12982, __pyx_L1_error) __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_11flush, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_flush, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[161])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 12982, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19); #endif __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_19, __pyx_t_17); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_flush, __pyx_t_19) < (0)) __PYX_ERR(0, 12982, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
12983: """
12984: Publish and clear buffered rows.
12985:
12986: By default this returns after local store-and-forward acceptance.
12987: Pass ``wait=True`` to wait for the server's OK acknowledgement of
12988: everything published through this lease. The wait is a pure ack
12989: barrier: only a terminal connection failure raises. Server
12990: rejections are delivered to the pool's ``error_handler``
12991: (default: the ``questdb`` logger) instead; retriable ones are
12992: replayed by the store-and-forward queue.
12993: """
12994: cdef QuestDB handle
+12995: with self._lock:
/*with:*/ {
__pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12995, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = NULL;
__pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12995, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12995, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
goto __pyx_L12_try_end;
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledSender.flush", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 12995, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_3);
{
PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
__pyx_t_19 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 12995, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_19);
}
__pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_19, NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 12995, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_18);
__pyx_t_20 = __Pyx_PyObject_IsTrue(__pyx_t_18);
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
if (__pyx_t_20 < (0)) __PYX_ERR(0, 12995, __pyx_L9_except_error)
__pyx_t_21 = (!__pyx_t_20);
if (unlikely(__pyx_t_21)) {
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_3);
__pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0;
__PYX_ERR(0, 12995, __pyx_L9_except_error)
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_exception_handled;
}
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L1_error;
__pyx_L8_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_L12_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_1) {
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12995, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
goto __pyx_L6;
}
__pyx_L6:;
}
goto __pyx_L21;
__pyx_L3_error:;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L1_error;
__pyx_L21:;
}
+12996: handle = self._enter_call_locked()
__pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12996, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2); __pyx_t_2 = 0;
+12997: try:
/*try:*/ {
+12998: self._flush_locked(wait)
__pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_flush_locked(__pyx_v_self, __pyx_v_wait); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12998, __pyx_L14_error)
}
12999: finally:
+13000: self._exit_call_locked(handle)
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13000, __pyx_L7_error)
goto __pyx_L15;
}
__pyx_L14_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
if ( unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__pyx_t_10 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_12 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13000, __pyx_L17_error)
}
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ErrRestore(__pyx_t_13, __pyx_t_14, __pyx_t_15);
__pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
__pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_12;
goto __pyx_L7_error;
__pyx_L17_error:;
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
goto __pyx_L7_error;
}
__pyx_L15:;
}
+13001: return self
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_self);
__pyx_r = ((PyObject *)__pyx_v_self);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
13002:
+13003: def wait(self, timeout_millis=0):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_13wait(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_12wait, "\n Wait for everything published through this lease to receive an OK\n ack; returns immediately if this lease published nothing.\n\n The wait is a pure ack barrier: only a terminal connection failure\n raises. Server rejections are delivered to the pool\047s\n ``error_handler`` (default: the ``questdb`` logger) instead.\n\n ``timeout_millis`` is a no-progress timeout; ``0`` waits indefinitely.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_13wait = {"wait", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_13wait, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_12wait}; static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_13wait(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_timeout_millis = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("wait (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_timeout_millis,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 13003, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13003, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "wait", 0) < (0)) __PYX_ERR(0, 13003, __pyx_L3_error) if (!values[0]) values[0] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); } else { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13003, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } if (!values[0]) values[0] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); } __pyx_v_timeout_millis = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("wait", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 13003, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.PooledSender.wait", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_12wait(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self), __pyx_v_timeout_millis); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_12wait(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_timeout_millis) { struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_23); __Pyx_AddTraceback("questdb._client.PooledSender.wait", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_handle); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_13wait, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_wait, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[162])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13003, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19); #endif __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_19, __pyx_mstate_global->__pyx_tuple[8]); if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_wait, __pyx_t_19) < (0)) __PYX_ERR(0, 13003, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
13004: """
13005: Wait for everything published through this lease to receive an OK
13006: ack; returns immediately if this lease published nothing.
13007:
13008: The wait is a pure ack barrier: only a terminal connection failure
13009: raises. Server rejections are delivered to the pool's
13010: ``error_handler`` (default: the ``questdb`` logger) instead.
13011:
13012: ``timeout_millis`` is a no-progress timeout; ``0`` waits indefinitely.
13013: """
+13014: if not isinstance(timeout_millis, int) or isinstance(timeout_millis, bool):
__pyx_t_2 = PyLong_Check(__pyx_v_timeout_millis); __pyx_t_3 = (!__pyx_t_2); if (!__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L4_bool_binop_done; } __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_timeout_millis, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); __pyx_t_1 = __pyx_t_3; __pyx_L4_bool_binop_done:; if (unlikely(__pyx_t_1)) { /* … */ }
+13015: raise TypeError('"timeout_millis" must be a non-negative int.')
__pyx_t_5 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_timeout_millis_must_be_a_non_ne};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13015, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 13015, __pyx_L1_error)
+13016: if timeout_millis < 0:
__pyx_t_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_timeout_millis, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 13016, __pyx_L1_error) if (unlikely(__pyx_t_1)) { /* … */ }
+13017: raise ValueError('timeout_millis must be non-negative.')
__pyx_t_5 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_timeout_millis_must_be_non_negat};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13017, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 13017, __pyx_L1_error)
13018: cdef QuestDB handle
+13019: with self._lock:
/*with:*/ {
__pyx_t_7 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13019, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_5 = NULL;
__pyx_t_8 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13019, __pyx_L7_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_6 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_8))) {
__pyx_t_5 = PyMethod_GET_SELF(__pyx_t_8);
assert(__pyx_t_5);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
__Pyx_INCREF(__pyx_t_5);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
__pyx_t_6 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13019, __pyx_L7_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
goto __pyx_L16_try_end;
__pyx_L11_error:;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledSender.wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_8, &__pyx_t_5) < 0) __PYX_ERR(0, 13019, __pyx_L13_except_error)
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_5);
{
PyObject* __pyx_temp[3] = {__pyx_t_4, __pyx_t_8, __pyx_t_5};
__pyx_t_23 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 13019, __pyx_L13_except_error)
__Pyx_GOTREF(__pyx_t_23);
}
__pyx_t_22 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_23, NULL);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 13019, __pyx_L13_except_error)
__Pyx_GOTREF(__pyx_t_22);
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_22);
__Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
if (__pyx_t_1 < (0)) __PYX_ERR(0, 13019, __pyx_L13_except_error)
__pyx_t_3 = (!__pyx_t_1);
if (unlikely(__pyx_t_3)) {
__Pyx_GIVEREF(__pyx_t_4);
__Pyx_GIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_8, __pyx_t_5);
__pyx_t_4 = 0; __pyx_t_8 = 0; __pyx_t_5 = 0;
__PYX_ERR(0, 13019, __pyx_L13_except_error)
}
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L12_exception_handled;
}
__pyx_L13_except_error:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
goto __pyx_L1_error;
__pyx_L12_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
__pyx_L16_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_7) {
__pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 13019, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
}
goto __pyx_L10;
}
__pyx_L10:;
}
goto __pyx_L25;
__pyx_L7_error:;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L1_error;
__pyx_L25:;
}
+13020: self._check_open('wait')
__pyx_t_12 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_wait); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13020, __pyx_L11_error)
+13021: handle = self._enter_call_locked()
__pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13021, __pyx_L11_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_4); __pyx_t_4 = 0;
+13022: try:
/*try:*/ {
+13023: self._wait_locked(<uint64_t>timeout_millis)
__pyx_t_13 = __Pyx_PyLong_As_uint64_t(__pyx_v_timeout_millis); if (unlikely((__pyx_t_13 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 13023, __pyx_L18_error) __pyx_t_12 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_wait_locked(__pyx_v_self, ((uint64_t)__pyx_t_13)); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13023, __pyx_L18_error) }
13024: finally:
+13025: self._exit_call_locked(handle)
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13025, __pyx_L11_error)
goto __pyx_L19;
}
__pyx_L18_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_ExceptionSwap(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
if ( unlikely(__Pyx_GetException(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19) < 0)) __Pyx_ErrFetch(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__Pyx_XGOTREF(__pyx_t_20);
__Pyx_XGOTREF(__pyx_t_21);
__Pyx_XGOTREF(__pyx_t_22);
__pyx_t_14 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_16 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13025, __pyx_L21_error)
}
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_XGIVEREF(__pyx_t_21);
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_ExceptionReset(__pyx_t_20, __pyx_t_21, __pyx_t_22);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ErrRestore(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
__pyx_lineno = __pyx_t_14; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_16;
goto __pyx_L11_error;
__pyx_L21_error:;
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_XGIVEREF(__pyx_t_21);
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_ExceptionReset(__pyx_t_20, __pyx_t_21, __pyx_t_22);
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
goto __pyx_L11_error;
}
__pyx_L19:;
}
+13026: return self
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_self);
__pyx_r = ((PyObject *)__pyx_v_self);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
13027:
+13028: def flush_and_get_fsn(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_15flush_and_get_fsn(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_14flush_and_get_fsn, "\n Publish and clear buffered rows, returning the frame sequence\n number (FSN) of the published frame, or ``None`` if the buffer was\n empty.\n\n FSNs are watermarks of the lease\047s pooled connection: use them for\n progress tracking while this lease is held (see\n :meth:`await_acked_fsn`); they are not portable receipts across\n leases, which may borrow different connections. Configure\n ``auto_flush=off`` when this call must publish and identify one whole\n application batch; auto-flush may already have published and cleared\n some or all buffered rows.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_15flush_and_get_fsn = {"flush_and_get_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_15flush_and_get_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_14flush_and_get_fsn}; static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_15flush_and_get_fsn(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("flush_and_get_fsn (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("flush_and_get_fsn", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("flush_and_get_fsn", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_14flush_and_get_fsn(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_14flush_and_get_fsn(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) { struct line_sender_error *__pyx_v_err; PyThreadState *__pyx_v_gs; struct line_sender_qwpws_fsn __pyx_v_fsn; int __pyx_v_ok; struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_20); __Pyx_AddTraceback("questdb._client.PooledSender.flush_and_get_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_handle); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_15flush_and_get_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_flush_and_get_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[163])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13028, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_flush_and_get_fsn, __pyx_t_19) < (0)) __PYX_ERR(0, 13028, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
13029: """
13030: Publish and clear buffered rows, returning the frame sequence
13031: number (FSN) of the published frame, or ``None`` if the buffer was
13032: empty.
13033:
13034: FSNs are watermarks of the lease's pooled connection: use them for
13035: progress tracking while this lease is held (see
13036: :meth:`await_acked_fsn`); they are not portable receipts across
13037: leases, which may borrow different connections. Configure
13038: ``auto_flush=off`` when this call must publish and identify one whole
13039: application batch; auto-flush may already have published and cleared
13040: some or all buffered rows.
13041: """
+13042: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+13043: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
13044: cdef line_sender_qwpws_fsn fsn
+13045: cdef bint ok = False
__pyx_v_ok = 0;
13046: cdef QuestDB handle
+13047: with self._lock:
/*with:*/ {
__pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13047, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = NULL;
__pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13047, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13047, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
goto __pyx_L12_try_end;
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledSender.flush_and_get_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 13047, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_3);
{
PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
__pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 13047, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_20);
}
__pyx_t_19 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_20, NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13047, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_19);
__pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_19);
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
if (__pyx_t_10 < (0)) __PYX_ERR(0, 13047, __pyx_L9_except_error)
__pyx_t_21 = (!__pyx_t_10);
if (unlikely(__pyx_t_21)) {
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_3);
__pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0;
__PYX_ERR(0, 13047, __pyx_L9_except_error)
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_exception_handled;
}
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L1_error;
__pyx_L8_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_L12_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_1) {
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13047, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
goto __pyx_L6;
}
__pyx_L6:;
}
goto __pyx_L22;
__pyx_L3_error:;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L1_error;
__pyx_L22:;
}
+13048: self._check_open('flush_and_get_fsn')
__pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush_and_get_fsn); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13048, __pyx_L7_error)
+13049: self._check_not_in_row('flush_and_get_fsn')
__pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_not_in_row(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush_and_get_fsn); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13049, __pyx_L7_error)
+13050: handle = self._enter_call_locked()
__pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13050, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2); __pyx_t_2 = 0;
+13051: try:
/*try:*/ {
+13052: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+13053: ok = qwp_sender_flush_buffer_and_get_fsn(
__pyx_v_ok = qwp_sender_flush_buffer_and_get_fsn(__pyx_v_self->_qwp, __pyx_v_self->_buffer->_impl, (&__pyx_v_fsn), (&__pyx_v_err));
13054: self._qwp, self._buffer._impl, &fsn, &err)
+13055: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+13056: if not ok:
__pyx_t_10 = (!__pyx_v_ok);
if (unlikely(__pyx_t_10)) {
/* … */
}
+13057: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13057, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 13057, __pyx_L14_error)
+13058: qdb_pystr_buf_clear(self._buffer._b)
qdb_pystr_buf_clear(__pyx_v_self->_buffer->_b);
+13059: self._batch_started_ms = 0
__pyx_v_self->_batch_started_ms = 0;
}
13060: finally:
+13061: self._exit_call_locked(handle)
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13061, __pyx_L7_error)
goto __pyx_L15;
}
__pyx_L14_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13061, __pyx_L18_error)
}
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
goto __pyx_L7_error;
__pyx_L18_error:;
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
goto __pyx_L7_error;
}
__pyx_L15:;
}
+13062: return fsn.value if fsn.has_value else None
__pyx_t_21 = (__pyx_v_fsn.has_value != 0);
if (__pyx_t_21) {
__pyx_t_4 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13062, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_3 = __pyx_t_4;
__pyx_t_4 = 0;
} else {
__Pyx_INCREF(Py_None);
__pyx_t_3 = Py_None;
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_3;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_3 = 0;
goto __pyx_L0;
13063:
+13064: def flush_and_keep_and_get_fsn(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_17flush_and_keep_and_get_fsn(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_16flush_and_keep_and_get_fsn, "\n Publish buffered rows without clearing the buffer, returning the\n published frame\047s FSN, or ``None`` if the buffer was empty.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_17flush_and_keep_and_get_fsn = {"flush_and_keep_and_get_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_17flush_and_keep_and_get_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_16flush_and_keep_and_get_fsn}; static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_17flush_and_keep_and_get_fsn(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("flush_and_keep_and_get_fsn (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("flush_and_keep_and_get_fsn", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("flush_and_keep_and_get_fsn", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_16flush_and_keep_and_get_fsn(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_16flush_and_keep_and_get_fsn(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) { struct line_sender_error *__pyx_v_err; PyThreadState *__pyx_v_gs; struct line_sender_qwpws_fsn __pyx_v_fsn; int __pyx_v_ok; struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_20); __Pyx_AddTraceback("questdb._client.PooledSender.flush_and_keep_and_get_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_handle); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_17flush_and_keep_and_get_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_flush_and_keep_and, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[164])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13064, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_flush_and_keep_and_get_fsn, __pyx_t_19) < (0)) __PYX_ERR(0, 13064, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
13065: """
13066: Publish buffered rows without clearing the buffer, returning the
13067: published frame's FSN, or ``None`` if the buffer was empty.
13068: """
+13069: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+13070: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
13071: cdef line_sender_qwpws_fsn fsn
+13072: cdef bint ok = False
__pyx_v_ok = 0;
13073: cdef QuestDB handle
+13074: with self._lock:
/*with:*/ {
__pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13074, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = NULL;
__pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13074, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13074, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
goto __pyx_L12_try_end;
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledSender.flush_and_keep_and_get_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 13074, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_3);
{
PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
__pyx_t_20 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 13074, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_20);
}
__pyx_t_19 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_20, NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13074, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_19);
__pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_19);
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
if (__pyx_t_10 < (0)) __PYX_ERR(0, 13074, __pyx_L9_except_error)
__pyx_t_21 = (!__pyx_t_10);
if (unlikely(__pyx_t_21)) {
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_3);
__pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0;
__PYX_ERR(0, 13074, __pyx_L9_except_error)
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_exception_handled;
}
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L1_error;
__pyx_L8_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_L12_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_1) {
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13074, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
goto __pyx_L6;
}
__pyx_L6:;
}
goto __pyx_L23;
__pyx_L3_error:;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L1_error;
__pyx_L23:;
}
+13075: self._check_open('flush_and_keep_and_get_fsn')
__pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush_and_keep_and_get_fsn); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13075, __pyx_L7_error)
+13076: self._check_not_in_row('flush_and_keep_and_get_fsn')
__pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_not_in_row(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush_and_keep_and_get_fsn); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13076, __pyx_L7_error)
+13077: handle = self._enter_call_locked()
__pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13077, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2); __pyx_t_2 = 0;
+13078: try:
/*try:*/ {
+13079: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+13080: ok = qwp_sender_flush_buffer_and_keep_and_get_fsn(
__pyx_v_ok = qwp_sender_flush_buffer_and_keep_and_get_fsn(__pyx_v_self->_qwp, __pyx_v_self->_buffer->_impl, (&__pyx_v_fsn), (&__pyx_v_err));
13081: self._qwp, self._buffer._impl, &fsn, &err)
+13082: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+13083: if not ok:
__pyx_t_10 = (!__pyx_v_ok);
if (unlikely(__pyx_t_10)) {
/* … */
}
+13084: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13084, __pyx_L14_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 13084, __pyx_L14_error)
+13085: if fsn.has_value:
__pyx_t_10 = (__pyx_v_fsn.has_value != 0);
if (__pyx_t_10) {
/* … */
}
}
+13086: self._batch_started_ms = (
__pyx_v_self->_batch_started_ms = __Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1);
13087: line_sender_now_micros() // 1000)
13088: finally:
+13089: self._exit_call_locked(handle)
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13089, __pyx_L7_error)
goto __pyx_L15;
}
__pyx_L14_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13089, __pyx_L19_error)
}
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
__pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
__pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
goto __pyx_L7_error;
__pyx_L19_error:;
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
goto __pyx_L7_error;
}
__pyx_L15:;
}
+13090: return fsn.value if fsn.has_value else None
__pyx_t_21 = (__pyx_v_fsn.has_value != 0);
if (__pyx_t_21) {
__pyx_t_4 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13090, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_3 = __pyx_t_4;
__pyx_t_4 = 0;
} else {
__Pyx_INCREF(Py_None);
__pyx_t_3 = Py_None;
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_3;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_3 = 0;
goto __pyx_L0;
13091:
+13092: def poll_error(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_19poll_error(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_18poll_error, "\n Poll the next server-rejection diagnostic recorded on the lease\047s\n connection since this lease was borrowed, as a\n :class:`SenderError`, or ``None`` when none is pending.\n\n The pool\047s ``error_handler`` independently receives every rejection\n the moment it is recorded; polling here is a per-lease pull\n alternative for code that wants diagnostics inline.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_19poll_error = {"poll_error", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_19poll_error, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_18poll_error}; static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_19poll_error(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("poll_error (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("poll_error", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("poll_error", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_18poll_error(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_18poll_error(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) { struct line_sender_error *__pyx_v_err; struct line_sender_qwpws_error *__pyx_v_c_error; struct line_sender_qwpws_error_view __pyx_v_view; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_11); __Pyx_AddTraceback("questdb._client.PooledSender.poll_error", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_19poll_error, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_poll_error, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[165])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13092, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_poll_error, __pyx_t_19) < (0)) __PYX_ERR(0, 13092, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
13093: """
13094: Poll the next server-rejection diagnostic recorded on the lease's
13095: connection since this lease was borrowed, as a
13096: :class:`SenderError`, or ``None`` when none is pending.
13097:
13098: The pool's ``error_handler`` independently receives every rejection
13099: the moment it is recorded; polling here is a per-lease pull
13100: alternative for code that wants diagnostics inline.
13101: """
+13102: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+13103: cdef line_sender_qwpws_error* c_error = NULL
__pyx_v_c_error = NULL;
13104: cdef line_sender_qwpws_error_view view
+13105: with self._lock:
/*with:*/ {
__pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13105, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = NULL;
__pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13105, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13105, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledSender.poll_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_11) < 0) __PYX_ERR(0, 13105, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_11);
{
PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_3, __pyx_t_11};
__pyx_t_4 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13105, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_4);
}
__pyx_t_20 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 13105, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_20);
__pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_20);
__Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
if (__pyx_t_10 < (0)) __PYX_ERR(0, 13105, __pyx_L9_except_error)
__pyx_t_21 = (!__pyx_t_10);
if (unlikely(__pyx_t_21)) {
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_3, __pyx_t_11);
__pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_11 = 0;
__PYX_ERR(0, 13105, __pyx_L9_except_error)
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
goto __pyx_L8_exception_handled;
}
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L1_error;
__pyx_L11_try_return:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L4_return;
__pyx_L8_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_1) {
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13105, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
goto __pyx_L6;
}
__pyx_L4_return: {
__pyx_t_8 = __pyx_r;
__pyx_r = 0;
if (__pyx_t_1) {
__pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13105, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
}
__pyx_r = __pyx_t_8;
__pyx_t_8 = 0;
goto __pyx_L0;
}
__pyx_L6:;
}
goto __pyx_L23;
__pyx_L3_error:;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L1_error;
__pyx_L23:;
}
+13106: self._check_open('poll_error')
__pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_poll_error); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13106, __pyx_L7_error)
+13107: if not qwp_sender_poll_error(self._qwp, &c_error, &err):
__pyx_t_10 = (!qwp_sender_poll_error(__pyx_v_self->_qwp, (&__pyx_v_c_error), (&__pyx_v_err)));
if (unlikely(__pyx_t_10)) {
/* … */
}
+13108: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13108, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 13108, __pyx_L7_error)
+13109: if c_error == NULL:
__pyx_t_10 = (__pyx_v_c_error == NULL);
if (__pyx_t_10) {
/* … */
}
+13110: return None
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L11_try_return;
+13111: try:
/*try:*/ {
+13112: view = line_sender_qwpws_error_get_view(c_error)
__pyx_v_view = line_sender_qwpws_error_get_view(__pyx_v_c_error);
+13113: return _sender_error_from_raw(
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_sender_error_from_raw); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13113, __pyx_L16_error)
__Pyx_GOTREF(__pyx_t_3);
+13114: c_sender_error_view_to_raw(view))
__pyx_t_11 = __pyx_f_7questdb_7_client_c_sender_error_view_to_raw(__pyx_v_view); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 13114, __pyx_L16_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_11}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13113, __pyx_L16_error) __Pyx_GOTREF(__pyx_t_2); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L15_return; }
13115: finally:
+13116: line_sender_qwpws_error_free(c_error)
/*finally:*/ {
__pyx_L16_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_ExceptionSwap(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
if ( unlikely(__Pyx_GetException(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17) < 0)) __Pyx_ErrFetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__Pyx_XGOTREF(__pyx_t_20);
__pyx_t_12 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_14 = __pyx_filename;
{
line_sender_qwpws_error_free(__pyx_v_c_error);
}
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_ExceptionReset(__pyx_t_18, __pyx_t_19, __pyx_t_20);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_ErrRestore(__pyx_t_15, __pyx_t_16, __pyx_t_17);
__pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
__pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_14;
goto __pyx_L7_error;
}
__pyx_L15_return: {
__pyx_t_20 = __pyx_r;
__pyx_r = 0;
line_sender_qwpws_error_free(__pyx_v_c_error);
__pyx_r = __pyx_t_20;
__pyx_t_20 = 0;
goto __pyx_L11_try_return;
}
}
13117:
+13118: def error_events_dropped(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_21error_events_dropped(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_20error_events_dropped, "\n Diagnostics dropped from the lease\047s connection ring\n (``error_inbox_capacity``).\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_21error_events_dropped = {"error_events_dropped", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_21error_events_dropped, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_20error_events_dropped}; static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_21error_events_dropped(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("error_events_dropped (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("error_events_dropped", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("error_events_dropped", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_20error_events_dropped(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_20error_events_dropped(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) { struct line_sender_error *__pyx_v_err; uint64_t __pyx_v_dropped; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_11); __Pyx_AddTraceback("questdb._client.PooledSender.error_events_dropped", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_21error_events_dropped, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_error_events_droppe, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[166])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13118, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_error_events_dropped, __pyx_t_19) < (0)) __PYX_ERR(0, 13118, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
13119: """
13120: Diagnostics dropped from the lease's connection ring
13121: (``error_inbox_capacity``).
13122: """
+13123: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+13124: cdef uint64_t dropped = 0
__pyx_v_dropped = 0;
+13125: with self._lock:
/*with:*/ {
__pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13125, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = NULL;
__pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13125, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13125, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
goto __pyx_L12_try_end;
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledSender.error_events_dropped", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 13125, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_3);
{
PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
__pyx_t_11 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 13125, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_11);
}
__pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 13125, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_12);
__pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_12);
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
if (__pyx_t_10 < (0)) __PYX_ERR(0, 13125, __pyx_L9_except_error)
__pyx_t_13 = (!__pyx_t_10);
if (unlikely(__pyx_t_13)) {
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_3);
__pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0;
__PYX_ERR(0, 13125, __pyx_L9_except_error)
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_exception_handled;
}
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L1_error;
__pyx_L8_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_L12_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_1) {
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13125, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
goto __pyx_L6;
}
__pyx_L6:;
}
goto __pyx_L17;
__pyx_L3_error:;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L1_error;
__pyx_L17:;
}
+13126: self._check_open('error_events_dropped')
__pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_error_events_dropped); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13126, __pyx_L7_error)
+13127: if not qwp_sender_error_events_dropped(
__pyx_t_10 = (!qwp_sender_error_events_dropped(__pyx_v_self->_qwp, (&__pyx_v_dropped), (&__pyx_v_err)));
if (unlikely(__pyx_t_10)) {
/* … */
}
13128: self._qwp, &dropped, &err):
+13129: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13129, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 13129, __pyx_L7_error)
+13130: return dropped
__pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_dropped); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13130, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_3; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_3 = 0; goto __pyx_L0;
13131:
+13132: def published_fsn(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_23published_fsn(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_22published_fsn, "\n Highest FSN published locally on the lease\047s pooled connection, or\n ``None`` if nothing has been published on it yet.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_23published_fsn = {"published_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_23published_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_22published_fsn}; static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_23published_fsn(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("published_fsn (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("published_fsn", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("published_fsn", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_22published_fsn(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_22published_fsn(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) { struct line_sender_error *__pyx_v_err; struct line_sender_qwpws_fsn __pyx_v_fsn; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_11); __Pyx_AddTraceback("questdb._client.PooledSender.published_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_23published_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_published_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[167])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13132, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_published_fsn, __pyx_t_19) < (0)) __PYX_ERR(0, 13132, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
13133: """
13134: Highest FSN published locally on the lease's pooled connection, or
13135: ``None`` if nothing has been published on it yet.
13136: """
+13137: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
13138: cdef line_sender_qwpws_fsn fsn
+13139: with self._lock:
/*with:*/ {
__pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13139, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = NULL;
__pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13139, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13139, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
goto __pyx_L12_try_end;
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledSender.published_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 13139, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_3);
{
PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
__pyx_t_11 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 13139, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_11);
}
__pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 13139, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_12);
__pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_12);
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
if (__pyx_t_10 < (0)) __PYX_ERR(0, 13139, __pyx_L9_except_error)
__pyx_t_13 = (!__pyx_t_10);
if (unlikely(__pyx_t_13)) {
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_3);
__pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0;
__PYX_ERR(0, 13139, __pyx_L9_except_error)
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_exception_handled;
}
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L1_error;
__pyx_L8_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_L12_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_1) {
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13139, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
goto __pyx_L6;
}
__pyx_L6:;
}
goto __pyx_L17;
__pyx_L3_error:;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L1_error;
__pyx_L17:;
}
+13140: self._check_open('published_fsn')
__pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_published_fsn); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13140, __pyx_L7_error)
+13141: if not qwp_sender_published_fsn(self._qwp, &fsn, &err):
__pyx_t_10 = (!qwp_sender_published_fsn(__pyx_v_self->_qwp, (&__pyx_v_fsn), (&__pyx_v_err)));
if (unlikely(__pyx_t_10)) {
/* … */
}
+13142: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13142, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 13142, __pyx_L7_error)
+13143: return fsn.value if fsn.has_value else None
__pyx_t_13 = (__pyx_v_fsn.has_value != 0);
if (__pyx_t_13) {
__pyx_t_4 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13143, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_3 = __pyx_t_4;
__pyx_t_4 = 0;
} else {
__Pyx_INCREF(Py_None);
__pyx_t_3 = Py_None;
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_3;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_3 = 0;
goto __pyx_L0;
13144:
+13145: def acked_fsn(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_25acked_fsn(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_24acked_fsn, "\n Highest FSN completed on the lease\047s pooled connection by ACK or\n drop-and-continue rejection, or ``None`` if no frame has completed\n yet. A completed frame is not necessarily applied: a rejected frame\n the queue drops to make progress also advances this watermark.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_25acked_fsn = {"acked_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_25acked_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_24acked_fsn}; static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_25acked_fsn(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("acked_fsn (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("acked_fsn", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("acked_fsn", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_24acked_fsn(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_24acked_fsn(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) { struct line_sender_error *__pyx_v_err; struct line_sender_qwpws_fsn __pyx_v_fsn; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_11); __Pyx_AddTraceback("questdb._client.PooledSender.acked_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_25acked_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_acked_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[168])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13145, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_acked_fsn, __pyx_t_19) < (0)) __PYX_ERR(0, 13145, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
13146: """
13147: Highest FSN completed on the lease's pooled connection by ACK or
13148: drop-and-continue rejection, or ``None`` if no frame has completed
13149: yet. A completed frame is not necessarily applied: a rejected frame
13150: the queue drops to make progress also advances this watermark.
13151: """
+13152: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
13153: cdef line_sender_qwpws_fsn fsn
+13154: with self._lock:
/*with:*/ {
__pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13154, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = NULL;
__pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13154, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13154, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
goto __pyx_L12_try_end;
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledSender.acked_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 13154, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_3);
{
PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
__pyx_t_11 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 13154, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_11);
}
__pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 13154, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_12);
__pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_12);
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
if (__pyx_t_10 < (0)) __PYX_ERR(0, 13154, __pyx_L9_except_error)
__pyx_t_13 = (!__pyx_t_10);
if (unlikely(__pyx_t_13)) {
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_3);
__pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0;
__PYX_ERR(0, 13154, __pyx_L9_except_error)
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_exception_handled;
}
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L1_error;
__pyx_L8_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_L12_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_1) {
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13154, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
goto __pyx_L6;
}
__pyx_L6:;
}
goto __pyx_L17;
__pyx_L3_error:;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L1_error;
__pyx_L17:;
}
+13155: self._check_open('acked_fsn')
__pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_acked_fsn); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13155, __pyx_L7_error)
+13156: if not qwp_sender_acked_fsn(self._qwp, &fsn, &err):
__pyx_t_10 = (!qwp_sender_acked_fsn(__pyx_v_self->_qwp, (&__pyx_v_fsn), (&__pyx_v_err)));
if (unlikely(__pyx_t_10)) {
/* … */
}
+13157: raise c_err_to_py(err)
__pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13157, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 13157, __pyx_L7_error)
+13158: return fsn.value if fsn.has_value else None
__pyx_t_13 = (__pyx_v_fsn.has_value != 0);
if (__pyx_t_13) {
__pyx_t_4 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13158, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_3 = __pyx_t_4;
__pyx_t_4 = 0;
} else {
__Pyx_INCREF(Py_None);
__pyx_t_3 = Py_None;
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = __pyx_t_3;
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_3 = 0;
goto __pyx_L0;
13159:
+13160: def await_acked_fsn(self, fsn, timeout_millis=0):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_27await_acked_fsn(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_26await_acked_fsn, "\n Wait until the acknowledgement watermark reaches ``fsn`` (as\n returned by :meth:`flush_and_get_fsn` on this lease).\n\n Returns ``True`` once ``fsn`` is acknowledged, or ``False`` if the\n no-progress timeout elapsed before ``fsn`` was acknowledged (``0``\n waits indefinitely). Only a terminal connection failure raises.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_27await_acked_fsn = {"await_acked_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_27await_acked_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_26await_acked_fsn}; static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_27await_acked_fsn(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_fsn = 0; PyObject *__pyx_v_timeout_millis = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("await_acked_fsn (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_fsn,&__pyx_mstate_global->__pyx_n_u_timeout_millis,0}; PyObject* values[2] = {0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 13160, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13160, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13160, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "await_acked_fsn", 0) < (0)) __PYX_ERR(0, 13160, __pyx_L3_error) if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("await_acked_fsn", 0, 1, 2, i); __PYX_ERR(0, 13160, __pyx_L3_error) } } } else { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13160, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13160, __pyx_L3_error) break; default: goto __pyx_L5_argtuple_error; } if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0)); } __pyx_v_fsn = values[0]; __pyx_v_timeout_millis = values[1]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("await_acked_fsn", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 13160, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.PooledSender.await_acked_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_26await_acked_fsn(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self), __pyx_v_fsn, __pyx_v_timeout_millis); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_26await_acked_fsn(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_fsn, PyObject *__pyx_v_timeout_millis) { struct line_sender_error *__pyx_v_err; PyThreadState *__pyx_v_gs; uint64_t __pyx_v_c_fsn; uint64_t __pyx_v_c_timeout_millis; struct line_sender_qwpws_fsn __pyx_v_acked; int __pyx_v_ok; struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_14); __Pyx_AddTraceback("questdb._client.PooledSender.await_acked_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_handle); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_27await_acked_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_await_acked_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[169])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19); #endif __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_19, __pyx_mstate_global->__pyx_tuple[8]); if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_await_acked_fsn, __pyx_t_19) < (0)) __PYX_ERR(0, 13160, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
13161: """
13162: Wait until the acknowledgement watermark reaches ``fsn`` (as
13163: returned by :meth:`flush_and_get_fsn` on this lease).
13164:
13165: Returns ``True`` once ``fsn`` is acknowledged, or ``False`` if the
13166: no-progress timeout elapsed before ``fsn`` was acknowledged (``0``
13167: waits indefinitely). Only a terminal connection failure raises.
13168: """
+13169: cdef line_sender_error* err = NULL
__pyx_v_err = NULL;
+13170: cdef PyThreadState* gs = NULL
__pyx_v_gs = NULL;
13171: cdef uint64_t c_fsn
13172: cdef uint64_t c_timeout_millis
13173: cdef line_sender_qwpws_fsn acked
+13174: cdef bint ok = False
__pyx_v_ok = 0;
13175: cdef QuestDB handle
+13176: if not isinstance(fsn, int) or isinstance(fsn, bool):
__pyx_t_2 = PyLong_Check(__pyx_v_fsn); __pyx_t_3 = (!__pyx_t_2); if (!__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L4_bool_binop_done; } __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_fsn, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); __pyx_t_1 = __pyx_t_3; __pyx_L4_bool_binop_done:; if (unlikely(__pyx_t_1)) { /* … */ }
+13177: raise TypeError('"fsn" must be a non-negative int.')
__pyx_t_5 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_fsn_must_be_a_non_negative_int};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13177, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 13177, __pyx_L1_error)
+13178: if fsn < 0:
__pyx_t_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_fsn, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 13178, __pyx_L1_error) if (unlikely(__pyx_t_1)) { /* … */ }
+13179: raise ValueError('"fsn" must be a non-negative int.')
__pyx_t_5 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_fsn_must_be_a_non_negative_int};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13179, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 13179, __pyx_L1_error)
+13180: if not isinstance(timeout_millis, int) or isinstance(timeout_millis, bool):
__pyx_t_3 = PyLong_Check(__pyx_v_timeout_millis); __pyx_t_2 = (!__pyx_t_3); if (!__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L8_bool_binop_done; } __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_timeout_millis, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); __pyx_t_1 = __pyx_t_2; __pyx_L8_bool_binop_done:; if (unlikely(__pyx_t_1)) { /* … */ }
+13181: raise TypeError('"timeout_millis" must be a non-negative int.')
__pyx_t_5 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_timeout_millis_must_be_a_non_ne};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13181, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 13181, __pyx_L1_error)
+13182: if timeout_millis < 0:
__pyx_t_1 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_timeout_millis, __pyx_mstate_global->__pyx_int_0, Py_LT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 13182, __pyx_L1_error) if (unlikely(__pyx_t_1)) { /* … */ }
+13183: raise ValueError('"timeout_millis" must be a non-negative int.')
__pyx_t_5 = NULL;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_timeout_millis_must_be_a_non_ne};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13183, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_Raise(__pyx_t_4, 0, 0, 0);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 13183, __pyx_L1_error)
+13184: c_fsn = fsn
__pyx_t_7 = __Pyx_PyLong_As_uint64_t(__pyx_v_fsn); if (unlikely((__pyx_t_7 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 13184, __pyx_L1_error) __pyx_v_c_fsn = __pyx_t_7;
+13185: c_timeout_millis = timeout_millis
__pyx_t_7 = __Pyx_PyLong_As_uint64_t(__pyx_v_timeout_millis); if (unlikely((__pyx_t_7 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 13185, __pyx_L1_error) __pyx_v_c_timeout_millis = __pyx_t_7;
+13186: with self._lock:
/*with:*/ {
__pyx_t_8 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13186, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_5 = NULL;
__pyx_t_9 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 13186, __pyx_L11_error)
__Pyx_GOTREF(__pyx_t_9);
__pyx_t_6 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_9))) {
__pyx_t_5 = PyMethod_GET_SELF(__pyx_t_9);
assert(__pyx_t_5);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
__Pyx_INCREF(__pyx_t_5);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
__pyx_t_6 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13186, __pyx_L11_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__pyx_L15_error:;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledSender.await_acked_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_9) < 0) __PYX_ERR(0, 13186, __pyx_L17_except_error)
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_5);
__Pyx_XGOTREF(__pyx_t_9);
{
PyObject* __pyx_temp[3] = {__pyx_t_4, __pyx_t_5, __pyx_t_9};
__pyx_t_14 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 13186, __pyx_L17_except_error)
__Pyx_GOTREF(__pyx_t_14);
}
__pyx_t_23 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_14, NULL);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 13186, __pyx_L17_except_error)
__Pyx_GOTREF(__pyx_t_23);
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_23);
__Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
if (__pyx_t_1 < (0)) __PYX_ERR(0, 13186, __pyx_L17_except_error)
__pyx_t_2 = (!__pyx_t_1);
if (unlikely(__pyx_t_2)) {
__Pyx_GIVEREF(__pyx_t_4);
__Pyx_GIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_5, __pyx_t_9);
__pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_t_9 = 0;
__PYX_ERR(0, 13186, __pyx_L17_except_error)
}
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
goto __pyx_L16_exception_handled;
}
__pyx_L17_except_error:;
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
goto __pyx_L1_error;
__pyx_L19_try_return:;
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
goto __pyx_L12_return;
__pyx_L16_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_8) {
__pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 13186, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_12);
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
}
goto __pyx_L14;
}
__pyx_L12_return: {
__pyx_t_12 = __pyx_r;
__pyx_r = 0;
if (__pyx_t_8) {
__pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 13186, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
}
__pyx_r = __pyx_t_12;
__pyx_t_12 = 0;
goto __pyx_L0;
}
__pyx_L14:;
}
goto __pyx_L38;
__pyx_L11_error:;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
goto __pyx_L1_error;
__pyx_L38:;
}
+13187: self._check_open('await_acked_fsn')
__pyx_t_13 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_await_acked_fsn); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13187, __pyx_L15_error)
+13188: handle = self._enter_call_locked()
__pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13188, __pyx_L15_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_4); __pyx_t_4 = 0;
+13189: try:
/*try:*/ {
+13190: if not qwp_sender_acked_fsn(self._qwp, &acked, &err):
__pyx_t_1 = (!qwp_sender_acked_fsn(__pyx_v_self->_qwp, (&__pyx_v_acked), (&__pyx_v_err)));
if (unlikely(__pyx_t_1)) {
/* … */
}
+13191: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13191, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 13191, __pyx_L22_error)
+13192: if acked.has_value and acked.value >= c_fsn:
__pyx_t_2 = (__pyx_v_acked.has_value != 0);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L26_bool_binop_done;
}
__pyx_t_2 = (__pyx_v_acked.value >= __pyx_v_c_fsn);
__pyx_t_1 = __pyx_t_2;
__pyx_L26_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+13193: return True
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF(Py_True);
__pyx_r = Py_True;
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L21_return;
13194: # The barrier drains every frame published so far (a
13195: # superset of ``fsn``); a no-progress expiry surfaces as
13196: # FailoverRetry.
+13197: _ensure_doesnt_have_gil(&gs)
(void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+13198: ok = qwp_sender_wait(
__pyx_v_ok = qwp_sender_wait(__pyx_v_self->_qwp, qwpws_ack_level_ok, __pyx_v_c_timeout_millis, (&__pyx_v_err));
13199: self._qwp,
13200: qwpws_ack_level.qwpws_ack_level_ok,
13201: c_timeout_millis,
13202: &err)
+13203: _ensure_has_gil(&gs)
__pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+13204: if not ok:
__pyx_t_1 = (!__pyx_v_ok);
if (__pyx_t_1) {
/* … */
}
+13205: if line_sender_error_get_code(err) != \
__pyx_t_1 = (line_sender_error_get_code(__pyx_v_err) != line_sender_error_failover_retry);
if (unlikely(__pyx_t_1)) {
/* … */
}
13206: line_sender_error_failover_retry:
+13207: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13207, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 13207, __pyx_L22_error)
+13208: line_sender_error_free(err)
line_sender_error_free(__pyx_v_err);
+13209: err = NULL
__pyx_v_err = NULL;
13210: # Re-read the watermark: the wait either drained ``fsn``
13211: # or expired with no progress; the current ack level is
13212: # the answer.
+13213: if not qwp_sender_acked_fsn(self._qwp, &acked, &err):
__pyx_t_1 = (!qwp_sender_acked_fsn(__pyx_v_self->_qwp, (&__pyx_v_acked), (&__pyx_v_err)));
if (unlikely(__pyx_t_1)) {
/* … */
}
+13214: raise c_err_to_py(err)
__pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13214, __pyx_L22_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 13214, __pyx_L22_error)
+13215: return bool(acked.has_value and acked.value >= c_fsn)
__pyx_t_9 = NULL;
if (__pyx_v_acked.has_value) {
} else {
__pyx_t_14 = __Pyx_PyLong_From_bool(__pyx_v_acked.has_value); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 13215, __pyx_L22_error)
__Pyx_GOTREF(__pyx_t_14);
__pyx_t_5 = __pyx_t_14;
__pyx_t_14 = 0;
goto __pyx_L31_bool_binop_done;
}
__pyx_t_1 = (__pyx_v_acked.value >= __pyx_v_c_fsn);
__pyx_t_14 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 13215, __pyx_L22_error)
__Pyx_GOTREF(__pyx_t_14);
__pyx_t_5 = __pyx_t_14;
__pyx_t_14 = 0;
__pyx_L31_bool_binop_done:;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_5};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13215, __pyx_L22_error)
__Pyx_GOTREF((PyObject *)__pyx_t_4);
}
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__pyx_r = ((PyObject *)__pyx_t_4);
}
__Pyx_XDECREF(__pyx_temp);
}
__pyx_t_4 = 0;
goto __pyx_L21_return;
}
13216: finally:
+13217: self._exit_call_locked(handle)
/*finally:*/ {
__pyx_L22_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
if ( unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__Pyx_XGOTREF(__pyx_t_20);
__Pyx_XGOTREF(__pyx_t_21);
__Pyx_XGOTREF(__pyx_t_22);
__Pyx_XGOTREF(__pyx_t_23);
__pyx_t_15 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_17 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13217, __pyx_L34_error)
}
__Pyx_XGIVEREF(__pyx_t_21);
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_ErrRestore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
__pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0;
__pyx_lineno = __pyx_t_15; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_17;
goto __pyx_L15_error;
__pyx_L34_error:;
__Pyx_XGIVEREF(__pyx_t_21);
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23);
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
__pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0;
goto __pyx_L15_error;
}
__pyx_L21_return: {
__pyx_t_23 = __pyx_r;
__pyx_r = 0;
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13217, __pyx_L15_error)
__pyx_r = __pyx_t_23;
__pyx_t_23 = 0;
goto __pyx_L19_try_return;
}
}
13218:
+13219: def close(self, flush: bool=True, wait: bool=False):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_29close(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_28close, "\n Return this sender to its pool. Idempotent.\n\n Pending rows are published by default; delivery is owned by the\n store-and-forward queue, which keeps delivering after the sender\n is returned. ``wait=True`` additionally waits for an OK ack before\n returning the sender to the pool; without it, a later server\n rejection of this lease\047s rows is reported through the pool\047s\n ``error_handler`` (default: the ``questdb`` logger).\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_29close = {"close", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_29close, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_28close}; static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_29close(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyLongObject *__pyx_v_flush = 0; PyLongObject *__pyx_v_wait = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("close (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_flush,&__pyx_mstate_global->__pyx_n_u_wait,0}; PyObject* values[2] = {0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 13219, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13219, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13219, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "close", 0) < (0)) __PYX_ERR(0, 13219, __pyx_L3_error) if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_True)); if (!values[1]) values[1] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_False)); } else { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13219, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13219, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_True)); if (!values[1]) values[1] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_False)); } __pyx_v_flush = ((PyLongObject *)values[0]); __pyx_v_wait = ((PyLongObject *)values[1]); } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("close", 0, 0, 2, __pyx_nargs); __PYX_ERR(0, 13219, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.PooledSender.close", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_flush), __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, 0, "flush", 0))) __PYX_ERR(0, 13219, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_wait), __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, 0, "wait", 0))) __PYX_ERR(0, 13219, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_28close(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self), __pyx_v_flush, __pyx_v_wait); /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_28close(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyLongObject *__pyx_v_flush, PyLongObject *__pyx_v_wait) { struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_21); __Pyx_AddTraceback("questdb._client.PooledSender.close", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_handle); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_19 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13219, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_flush, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(0, 13219, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_wait, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(0, 13219, __pyx_L1_error) __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_29close, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_close, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[170])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 13219, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17); #endif __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_17, __pyx_mstate_global->__pyx_tuple[73]); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_17, __pyx_t_19); __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_close, __pyx_t_17) < (0)) __PYX_ERR(0, 13219, __pyx_L1_error) __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
13220: """
13221: Return this sender to its pool. Idempotent.
13222:
13223: Pending rows are published by default; delivery is owned by the
13224: store-and-forward queue, which keeps delivering after the sender
13225: is returned. ``wait=True`` additionally waits for an OK ack before
13226: returning the sender to the pool; without it, a later server
13227: rejection of this lease's rows is reported through the pool's
13228: ``error_handler`` (default: the ``questdb`` logger).
13229: """
13230: cdef QuestDB handle
+13231: with self._lock:
/*with:*/ {
__pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13231, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = NULL;
__pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13231, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13231, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
goto __pyx_L12_try_end;
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledSender.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 13231, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_3);
{
PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
__pyx_t_21 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 13231, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_21);
}
__pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_21, NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 13231, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_15);
__pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_15);
__Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
if (__pyx_t_10 < (0)) __PYX_ERR(0, 13231, __pyx_L9_except_error)
__pyx_t_11 = (!__pyx_t_10);
if (unlikely(__pyx_t_11)) {
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_3);
__pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0;
__PYX_ERR(0, 13231, __pyx_L9_except_error)
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_exception_handled;
}
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L1_error;
__pyx_L8_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_L12_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_1) {
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13231, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
goto __pyx_L6;
}
__pyx_L6:;
}
goto __pyx_L29;
__pyx_L3_error:;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L1_error;
__pyx_L29:;
}
13232: # A part-way-through row is the sharper diagnosis and names
13233: # the buffer, so it is asked first; the broader "inside one
13234: # of this lease's own calls" answers everything else.
+13235: self._check_not_in_row('close')
__pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_not_in_row(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_close); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13235, __pyx_L7_error)
+13236: self._check_not_mid_call('close')
__pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_not_mid_call(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_close); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13236, __pyx_L7_error)
+13237: handle = self._enter_call_locked()
__pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13237, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2); __pyx_t_2 = 0;
+13238: try:
/*try:*/ {
+13239: try:
/*try:*/ {
+13240: if flush and self._qwp != NULL:
__pyx_t_11 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_flush)); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 13240, __pyx_L17_error) if (__pyx_t_11) { } else { __pyx_t_10 = __pyx_t_11; goto __pyx_L20_bool_binop_done; } __pyx_t_11 = (__pyx_v_self->_qwp != NULL); __pyx_t_10 = __pyx_t_11; __pyx_L20_bool_binop_done:; if (__pyx_t_10) { /* … */ } }
+13241: self._flush_locked(wait)
__pyx_t_10 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_wait)); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13241, __pyx_L17_error) __pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_flush_locked(__pyx_v_self, __pyx_t_10); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13241, __pyx_L17_error)
13242: finally:
+13243: self._release_locked()
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_release_locked(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13243, __pyx_L14_error)
goto __pyx_L18;
}
__pyx_L17_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_ExceptionSwap(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
if ( unlikely(__Pyx_GetException(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17) < 0)) __Pyx_ErrFetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_19);
__Pyx_XGOTREF(__pyx_t_20);
__pyx_t_12 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_14 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_release_locked(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13243, __pyx_L23_error)
}
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_ExceptionReset(__pyx_t_18, __pyx_t_19, __pyx_t_20);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_ErrRestore(__pyx_t_15, __pyx_t_16, __pyx_t_17);
__pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
__pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_14;
goto __pyx_L14_error;
__pyx_L23_error:;
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_ExceptionReset(__pyx_t_18, __pyx_t_19, __pyx_t_20);
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
goto __pyx_L14_error;
}
__pyx_L18:;
}
}
13244: finally:
+13245: self._exit_call_locked(handle)
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13245, __pyx_L7_error)
goto __pyx_L15;
}
__pyx_L14_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15);
if ( unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_20);
__Pyx_XGOTREF(__pyx_t_19);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_15);
__pyx_t_13 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_14 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13245, __pyx_L25_error)
}
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_16, __pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_XGIVEREF(__pyx_t_19);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_ErrRestore(__pyx_t_20, __pyx_t_19, __pyx_t_18);
__pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0;
__pyx_lineno = __pyx_t_13; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_14;
goto __pyx_L7_error;
__pyx_L25_error:;
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ExceptionReset(__pyx_t_17, __pyx_t_16, __pyx_t_15);
__Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
__Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0;
goto __pyx_L7_error;
}
__pyx_L15:;
}
13246:
+13247: def __exit__(self, exc_type, exc_val, exc_tb):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_31__exit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_31__exit__ = {"__exit__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_31__exit__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_31__exit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_exc_type = 0;
CYTHON_UNUSED PyObject *__pyx_v_exc_val = 0;
CYTHON_UNUSED PyObject *__pyx_v_exc_tb = 0;
#if !CYTHON_VECTORCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__exit__ (wrapper)", 0);
#if !CYTHON_VECTORCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_exc_type,&__pyx_mstate_global->__pyx_n_u_exc_val,&__pyx_mstate_global->__pyx_n_u_exc_tb,0};
PyObject* values[3] = {0,0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 13247, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 13247, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13247, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13247, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__exit__", 0) < (0)) __PYX_ERR(0, 13247, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, i); __PYX_ERR(0, 13247, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 3)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13247, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13247, __pyx_L3_error)
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 13247, __pyx_L3_error)
}
__pyx_v_exc_type = values[0];
__pyx_v_exc_val = values[1];
__pyx_v_exc_tb = values[2];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 13247, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.PooledSender.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_30__exit__(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self), __pyx_v_exc_type, __pyx_v_exc_val, __pyx_v_exc_tb);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_30__exit__(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_exc_type, CYTHON_UNUSED PyObject *__pyx_v_exc_val, CYTHON_UNUSED PyObject *__pyx_v_exc_tb) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.PooledSender.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_31__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender___exit, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[171])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 13247, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
#endif
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_exit, __pyx_t_17) < (0)) __PYX_ERR(0, 13247, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+13248: self.close(exc_type is None, False)
__pyx_t_2 = ((PyObject *)__pyx_v_self); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = (__pyx_v_exc_type == Py_None); __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13248, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = 0; { PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_4, Py_False}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13248, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
13249:
+13250: def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_12PooledSender_33__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_12PooledSender_33__dealloc__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_pf_7questdb_7_client_12PooledSender_32__dealloc__(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
}
static void __pyx_pf_7questdb_7_client_12PooledSender_32__dealloc__(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) {
size_t __pyx_v_discarded;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_WriteUnraisable("questdb._client.PooledSender.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
+13251: cdef size_t discarded = 0
__pyx_v_discarded = 0;
+13252: if self._lock is None:
__pyx_t_1 = (__pyx_v_self->_lock == Py_None);
if (__pyx_t_1) {
/* … */
}
+13253: return
{
}
goto __pyx_L0;
+13254: with self._lock:
/*with:*/ {
__pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13254, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_4 = NULL;
__pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13254, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_6 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_5))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
__pyx_t_6 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13254, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
goto __pyx_L13_try_end;
__pyx_L8_error:;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledSender.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_5, &__pyx_t_4) < 0) __PYX_ERR(0, 13254, __pyx_L10_except_error)
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_5);
__Pyx_XGOTREF(__pyx_t_4);
{
PyObject* __pyx_temp[3] = {__pyx_t_3, __pyx_t_5, __pyx_t_4};
__pyx_t_11 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 13254, __pyx_L10_except_error)
__Pyx_GOTREF(__pyx_t_11);
}
__pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_11, NULL);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 13254, __pyx_L10_except_error)
__Pyx_GOTREF(__pyx_t_12);
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_12);
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
if (__pyx_t_1 < (0)) __PYX_ERR(0, 13254, __pyx_L10_except_error)
__pyx_t_10 = (!__pyx_t_1);
if (unlikely(__pyx_t_10)) {
__Pyx_GIVEREF(__pyx_t_3);
__Pyx_GIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_5, __pyx_t_4);
__pyx_t_3 = 0; __pyx_t_5 = 0; __pyx_t_4 = 0;
__PYX_ERR(0, 13254, __pyx_L10_except_error)
}
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L9_exception_handled;
}
__pyx_L10_except_error:;
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
goto __pyx_L1_error;
__pyx_L9_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
__pyx_L13_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_2) {
__pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 13254, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
}
goto __pyx_L7;
}
__pyx_L7:;
}
goto __pyx_L20;
__pyx_L4_error:;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
goto __pyx_L1_error;
__pyx_L20:;
}
+13255: if self._qwp != NULL and self._buffer is not None:
__pyx_t_10 = (__pyx_v_self->_qwp != NULL);
if (__pyx_t_10) {
} else {
__pyx_t_1 = __pyx_t_10;
goto __pyx_L15_bool_binop_done;
}
__pyx_t_10 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
__pyx_t_1 = __pyx_t_10;
__pyx_L15_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+13256: discarded = line_sender_buffer_row_count(self._buffer._impl)
__pyx_v_discarded = line_sender_buffer_row_count(__pyx_v_self->_buffer->_impl);
+13257: self._release_locked()
((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_release_locked(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13257, __pyx_L8_error)
+13258: if discarded != 0:
__pyx_t_10 = (__pyx_v_discarded != 0);
if (__pyx_t_10) {
/* … */
}
+13259: _log_discarded_lease_rows(discarded)
__pyx_f_7questdb_7_client__log_discarded_lease_rows(__pyx_v_discarded);
13260:
13261:
+13262: cdef void _log_discarded_lease_rows(size_t rows) noexcept:
static void __pyx_f_7questdb_7_client__log_discarded_lease_rows(size_t __pyx_v_rows) {
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_WriteUnraisable("questdb._client._log_discarded_lease_rows", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
13263: """Report the rows a lease collected without ``close()`` took with it.
13264:
13265: Called from ``PooledSender.__dealloc__``, which cannot flush them: a
13266: lease reaches it only once nothing refers to it, often during garbage
13267: collection or interpreter exit. Without this record the rows would
13268: vanish with nothing said. Deallocation cannot report an error either,
13269: so a logging handler that raises, or a ``logging`` module already
13270: torn down at interpreter exit, costs the record and nothing else.
13271: """
+13272: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_try_end;
__pyx_L3_error:;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L5_except_error:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L1_error;
__pyx_L4_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
__pyx_L8_try_end:;
}
+13273: logging.getLogger('questdb').warning(
__pyx_t_7 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13273, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 13273, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_10 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_9))) {
__pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9);
assert(__pyx_t_7);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
__Pyx_INCREF(__pyx_t_7);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
__pyx_t_10 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_n_u_questdb};
__pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13273, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_6);
}
__pyx_t_5 = __pyx_t_6;
__Pyx_INCREF(__pyx_t_5);
13274: 'questdb: a PooledSender lease was garbage-collected without '
13275: 'close(), discarding %d buffered row(s) that were never sent. '
13276: 'Close every lease, or use it in a `with` block, so that its '
13277: 'rows are flushed.',
+13278: rows)
__pyx_t_9 = __Pyx_PyLong_FromSize_t(__pyx_v_rows); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 13278, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = 0; { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_questdb_a_PooledSender_lease_was, __pyx_t_9}; __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_warning, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13273, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+13279: except BaseException:
__pyx_t_11 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException)))); if (__pyx_t_11) { __Pyx_ErrRestore(0,0,0); goto __pyx_L4_exception_handled; } goto __pyx_L5_except_error;
13280: pass
13281:
13282:
+13283: @cython.no_gc_clear
struct __pyx_obj_7questdb_7_client_PooledReader {
PyObject_HEAD
struct __pyx_vtabstruct_7questdb_7_client_PooledReader *__pyx_vtab;
struct __pyx_obj_7questdb_7_client_QuestDB *_handle;
struct __pyx_obj_7questdb_7_client__ReaderHandle *_reader;
struct __pyx_obj_7questdb_7_client__CursorHandle *_last_cursor;
PyObject *_lock;
int64_t _call_depth;
};
/* … */
struct __pyx_vtabstruct_7questdb_7_client_PooledReader {
void (*_attach)(struct __pyx_obj_7questdb_7_client_PooledReader *, struct __pyx_obj_7questdb_7_client_QuestDB *, struct __pyx_obj_7questdb_7_client__ReaderHandle *);
__pyx_t_7questdb_7_client_void_int (*_check_open)(struct __pyx_obj_7questdb_7_client_PooledReader *, PyObject *);
struct __pyx_obj_7questdb_7_client_QuestDB *(*_enter_call_locked)(struct __pyx_obj_7questdb_7_client_PooledReader *);
void (*_exit_call_locked)(struct __pyx_obj_7questdb_7_client_PooledReader *, struct __pyx_obj_7questdb_7_client_QuestDB *);
__pyx_t_7questdb_7_client_void_int (*_check_not_mid_call)(struct __pyx_obj_7questdb_7_client_PooledReader *, PyObject *);
void (*_release_locked)(struct __pyx_obj_7questdb_7_client_PooledReader *);
};
static struct __pyx_vtabstruct_7questdb_7_client_PooledReader *__pyx_vtabptr_7questdb_7_client_PooledReader;
13284: cdef class PooledReader:
13285: """
13286: A reader lease borrowed from a :class:`QuestDB` pool.
13287:
13288: The read-side twin of :meth:`QuestDB.sender`: obtain a lease with
13289: :meth:`QuestDB.reader`; it holds one pooled reader connection for
13290: its lifetime and runs queries on it sequentially via :meth:`query`.
13291: ``close()`` (or leaving the ``with`` block) releases the
13292: connection: back to the pool if the last query reached its terminal
13293: on a live connection (a clean drain, a successful ``cancel()``, or a
13294: server-side error such as a parse error or a query timeout), dropped
13295: otherwise.
13296:
13297: Queries are strictly sequential — one result at a time. Fully drain
13298: (or ``close()``) each :class:`QueryResult` before calling
13299: :meth:`query` again; running the next query while the previous
13300: result is still open raises ``QuestDBError``. Closing an undrained
13301: result terminates the lease; call ``result.cancel()`` before
13302: ``result.close()`` to preserve it.
13303:
13304: Because every query shares one connection, passing
13305: ``reset_symbol_dict=False`` to follow-up queries keeps the
13306: connection's SYMBOL dictionary warm across them instead of
13307: resetting it per query.
13308:
13309: The lease counts as an active use of the :class:`QuestDB` handle
13310: (``QuestDB.close()`` waits for it) and has thread affinity: use one
13311: lease per thread, on the thread that created it. A
13312: :class:`QueryResult` returned by the lease may be handed to a worker
13313: under that result's thread hand-off rules; wait for it to finish
13314: before using the lease again.
13315: """
13316: cdef QuestDB _handle
13317: cdef _ReaderHandle _reader
13318: cdef _CursorHandle _last_cursor
13319: cdef object _lock
13320: cdef int64_t _call_depth
13321:
+13322: def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_12PooledReader_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_12PooledReader_1__cinit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
#if !CYTHON_VECTORCALL_TPNEW
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
#if !CYTHON_VECTORCALL_TPNEW
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__pyx_args, __pyx_nargs);
if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL_TPNEW(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) return -1;
if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
__pyx_r = __pyx_pf_7questdb_7_client_12PooledReader___cinit__(((struct __pyx_obj_7questdb_7_client_PooledReader *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_7questdb_7_client_12PooledReader___cinit__(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("questdb._client.PooledReader.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+13323: self._handle = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_handle); __Pyx_DECREF((PyObject *)__pyx_v_self->_handle); __pyx_v_self->_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)Py_None);
+13324: self._reader = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_reader); __Pyx_DECREF((PyObject *)__pyx_v_self->_reader); __pyx_v_self->_reader = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)Py_None);
+13325: self._last_cursor = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_last_cursor); __Pyx_DECREF((PyObject *)__pyx_v_self->_last_cursor); __pyx_v_self->_last_cursor = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)Py_None);
+13326: self._lock = threading.RLock()
__pyx_t_2 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13326, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_RLock); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13326, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13326, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v_self->_lock); __Pyx_DECREF(__pyx_v_self->_lock); __pyx_v_self->_lock = __pyx_t_1; __pyx_t_1 = 0;
+13327: self._call_depth = 0
__pyx_v_self->_call_depth = 0;
13328:
+13329: cdef void _attach(
static void __pyx_f_7questdb_7_client_12PooledReader__attach(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self, struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle, struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_reader) {
/* … */
/* function exit code */
__Pyx_RefNannyFinishContext();
}
13330: self,
13331: QuestDB handle,
13332: _ReaderHandle reader) noexcept:
+13333: self._handle = handle
__Pyx_INCREF((PyObject *)__pyx_v_handle); __Pyx_GIVEREF((PyObject *)__pyx_v_handle); __Pyx_GOTREF((PyObject *)__pyx_v_self->_handle); __Pyx_DECREF((PyObject *)__pyx_v_self->_handle); __pyx_v_self->_handle = __pyx_v_handle;
+13334: self._reader = reader
__Pyx_INCREF((PyObject *)__pyx_v_reader); __Pyx_GIVEREF((PyObject *)__pyx_v_reader); __Pyx_GOTREF((PyObject *)__pyx_v_self->_reader); __Pyx_DECREF((PyObject *)__pyx_v_self->_reader); __pyx_v_self->_reader = __pyx_v_reader;
13335:
+13336: cdef void_int _check_open(self, str method) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_12PooledReader__check_open(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self, PyObject *__pyx_v_method) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.PooledReader._check_open", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+13337: if self._reader is None:
__pyx_t_1 = (((PyObject *)__pyx_v_self->_reader) == Py_None);
if (unlikely(__pyx_t_1)) {
/* … */
}
+13338: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13338, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+13339: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13339, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13339, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+13340: f"{method}() can't be called: the reader lease is closed.")
__pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13340, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_the_reader_leas); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13340, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_7}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13338, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 13338, __pyx_L1_error)
13341:
+13342: cdef QuestDB _enter_call_locked(self):
static struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_f_7questdb_7_client_12PooledReader__enter_call_locked(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self) {
struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0;
struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.PooledReader._enter_call_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_handle);
__Pyx_XGIVEREF((PyObject *)__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
13343: """Count one of this lease's own calls, on the lease and on the
13344: handle it was borrowed from. Called with `self._lock` held.
13345:
13346: The mirror of `PooledSender._enter_call_locked`, and for the same
13347: two reasons: `QuestDB.close()` has to be able to see that the
13348: frame it would wait for is its own caller, and `close()` here has
13349: to be able to tell a call on *this* lease from a call somewhere
13350: else on the handle.
13351:
13352: A query runs the caller's Python while it holds the lease --
13353: `_bind_query_params` reads `value.bytes` off every bind parameter
13354: it is handed -- so this is the read side's re-entrancy window.
13355: """
+13356: cdef QuestDB handle = self._handle
__pyx_t_1 = ((PyObject *)__pyx_v_self->_handle);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_1);
__pyx_t_1 = 0;
+13357: self._call_depth += 1
__pyx_v_self->_call_depth = (__pyx_v_self->_call_depth + 1);
+13358: if handle is not None:
__pyx_t_2 = (((PyObject *)__pyx_v_handle) != Py_None);
if (__pyx_t_2) {
/* … */
}
+13359: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L1_error;
__pyx_L9_try_end:;
}
+13360: handle._enter_scoped_call()
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_enter_scoped_call(__pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13360, __pyx_L4_error)
+13361: except:
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledReader._enter_call_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 13361, __pyx_L6_except_error)
__Pyx_XGOTREF(__pyx_t_1);
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_7);
+13362: self._call_depth -= 1
__pyx_v_self->_call_depth = (__pyx_v_self->_call_depth - 1);
+13363: raise
__Pyx_GIVEREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_7); __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_6, __pyx_t_7); __pyx_t_1 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __PYX_ERR(0, 13363, __pyx_L6_except_error) }
+13364: return handle
{
struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_handle);
__pyx_r = __pyx_v_handle;
}
__Pyx_XDECREF((PyObject *)__pyx_temp);
}
goto __pyx_L0;
13365:
+13366: cdef void _exit_call_locked(self, QuestDB handle) except *:
static void __pyx_f_7questdb_7_client_12PooledReader__exit_call_locked(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self, struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle) {
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_AddTraceback("questdb._client.PooledReader._exit_call_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
}
13367: # The handle's thread-local update can raise; this lease is no longer
13368: # in its call either way, so unwind its guard first.
+13369: self._call_depth -= 1
__pyx_v_self->_call_depth = (__pyx_v_self->_call_depth - 1);
+13370: if handle is not None:
__pyx_t_1 = (((PyObject *)__pyx_v_handle) != Py_None);
if (__pyx_t_1) {
/* … */
}
+13371: handle._exit_scoped_call()
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_exit_scoped_call(__pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13371, __pyx_L1_error)
13372:
+13373: cdef void_int _check_not_mid_call(self, str method) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_12PooledReader__check_not_mid_call(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self, PyObject *__pyx_v_method) {
__pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("questdb._client.PooledReader._check_not_mid_call", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
13374: """
13375: Refuse a call that would end this lease while one of its own
13376: calls is still running: the reader connection would go back to
13377: the pool with the call still reading from it.
13378: """
+13379: if self._call_depth != 0:
__pyx_t_1 = (__pyx_v_self->_call_depth != 0);
if (unlikely(__pyx_t_1)) {
/* … */
}
+13380: raise QuestDBError(
__pyx_t_3 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13380, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
+13381: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13381, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13381, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+13382: f"{method}() can't be called from inside a call on this "
__pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13382, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_from_inside_a_c_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13382, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); assert(__pyx_t_3); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_4, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_7}; __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13380, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 13380, __pyx_L1_error)
13383: 'reader lease. It would release the connection while '
13384: 'that call is still using it. Close the lease after the '
13385: 'call returns.')
13386:
+13387: cdef void _release_locked(self) except *:
static void __pyx_f_7questdb_7_client_12PooledReader__release_locked(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self) {
struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_reader = 0;
struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_last = 0;
struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0;
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("questdb._client.PooledReader._release_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_reader);
__Pyx_XDECREF((PyObject *)__pyx_v_last);
__Pyx_XDECREF((PyObject *)__pyx_v_handle);
__Pyx_RefNannyFinishContext();
}
+13388: cdef _ReaderHandle reader = self._reader
__pyx_t_1 = ((PyObject *)__pyx_v_self->_reader);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_reader = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)__pyx_t_1);
__pyx_t_1 = 0;
+13389: cdef _CursorHandle last = self._last_cursor
__pyx_t_1 = ((PyObject *)__pyx_v_self->_last_cursor);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_last = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_1);
__pyx_t_1 = 0;
+13390: cdef QuestDB handle = self._handle
__pyx_t_1 = ((PyObject *)__pyx_v_self->_handle);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_1);
__pyx_t_1 = 0;
+13391: if reader is None:
__pyx_t_2 = (((PyObject *)__pyx_v_reader) == Py_None);
if (__pyx_t_2) {
/* … */
}
+13392: return
{
}
goto __pyx_L0;
+13393: self._reader = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_reader); __Pyx_DECREF((PyObject *)__pyx_v_self->_reader); __pyx_v_self->_reader = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)Py_None);
+13394: self._last_cursor = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_last_cursor); __Pyx_DECREF((PyObject *)__pyx_v_self->_last_cursor); __pyx_v_self->_last_cursor = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)Py_None);
+13395: self._handle = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF((PyObject *)__pyx_v_self->_handle); __Pyx_DECREF((PyObject *)__pyx_v_self->_handle); __pyx_v_self->_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)Py_None);
+13396: try:
/*try:*/ {
+13397: if last is not None:
__pyx_t_2 = (((PyObject *)__pyx_v_last) != Py_None);
if (__pyx_t_2) {
/* … */
}
}
+13398: last._close()
__pyx_t_3 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_last->__pyx_vtab)->_close(__pyx_v_last); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 13398, __pyx_L5_error)
13399: finally:
+13400: if last is not None and last._cursor != NULL:
/*finally:*/ {
/*normal exit:*/{
__pyx_t_4 = (((PyObject *)__pyx_v_last) != Py_None);
if (__pyx_t_4) {
} else {
__pyx_t_2 = __pyx_t_4;
goto __pyx_L9_bool_binop_done;
}
__pyx_t_4 = (__pyx_v_last->_cursor != NULL);
__pyx_t_2 = __pyx_t_4;
__pyx_L9_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
/* … */
__pyx_t_4 = (((PyObject *)__pyx_v_last) != Py_None);
if (__pyx_t_4) {
} else {
__pyx_t_2 = __pyx_t_4;
goto __pyx_L16_bool_binop_done;
}
__pyx_t_4 = (__pyx_v_last->_cursor != NULL);
__pyx_t_2 = __pyx_t_4;
__pyx_L16_bool_binop_done:;
if (__pyx_t_2) {
/* … */
}
13401: # Deferred or interrupted: whoever frees the cursor closes
13402: # the reader.
+13403: last._owns_reader = True
__pyx_v_last->_owns_reader = 1;
/* … */
__pyx_v_last->_owns_reader = 1;
+13404: reader = None
__Pyx_INCREF(Py_None); __Pyx_DECREF_SET(__pyx_v_reader, ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)Py_None)); /* … */ __Pyx_INCREF(Py_None); __Pyx_DECREF_SET(__pyx_v_reader, ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)Py_None));
+13405: if reader is not None:
__pyx_t_2 = (((PyObject *)__pyx_v_reader) != Py_None);
if (__pyx_t_2) {
/* … */
}
/* … */
__pyx_t_2 = (((PyObject *)__pyx_v_reader) != Py_None);
if (__pyx_t_2) {
/* … */
}
+13406: reader._close()
((struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle *)__pyx_v_reader->__pyx_vtab)->_close(__pyx_v_reader);
/* … */
((struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle *)__pyx_v_reader->__pyx_vtab)->_close(__pyx_v_reader);
+13407: if handle is not None:
__pyx_t_2 = (((PyObject *)__pyx_v_handle) != Py_None);
if (__pyx_t_2) {
/* … */
}
goto __pyx_L6;
}
__pyx_L5_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
if ( unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_9);
__Pyx_XGOTREF(__pyx_t_10);
__Pyx_XGOTREF(__pyx_t_11);
__Pyx_XGOTREF(__pyx_t_12);
__Pyx_XGOTREF(__pyx_t_13);
__pyx_t_3 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
{
/* … */
__pyx_t_2 = (((PyObject *)__pyx_v_handle) != Py_None);
if (__pyx_t_2) {
/* … */
}
}
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_9);
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
__pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
__pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7;
goto __pyx_L1_error;
__pyx_L14_error:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
goto __pyx_L1_error;
}
__pyx_L6:;
}
+13408: handle._end_db_use(scoped=False)
__pyx_t_5.__pyx_n = 1;
__pyx_t_5.scoped = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_end_db_use(__pyx_v_handle, &__pyx_t_5); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13408, __pyx_L1_error)
/* … */
__pyx_t_5.__pyx_n = 1;
__pyx_t_5.scoped = 0;
((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_end_db_use(__pyx_v_handle, &__pyx_t_5); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13408, __pyx_L14_error)
13409:
+13410: def __enter__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_3__enter__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledReader_3__enter__ = {"__enter__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledReader_3__enter__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_3__enter__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
#if !CYTHON_VECTORCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__enter__ (wrapper)", 0);
#if !CYTHON_VECTORCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__enter__", 1, 0, 0, __pyx_nargs); return NULL; }
const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) return NULL;
if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__enter__", __pyx_kwds); return NULL;}
__pyx_r = __pyx_pf_7questdb_7_client_12PooledReader_2__enter__(((struct __pyx_obj_7questdb_7_client_PooledReader *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_12PooledReader_2__enter__(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_AddTraceback("questdb._client.PooledReader.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledReader_3__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledReader___enter, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[174])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 13410, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_17);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
#endif
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledReader, __pyx_mstate_global->__pyx_n_u_enter, __pyx_t_17) < (0)) __PYX_ERR(0, 13410, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+13411: with self._lock:
/*with:*/ {
__pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13411, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = NULL;
__pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13411, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13411, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
goto __pyx_L12_try_end;
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledReader.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 13411, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_3);
{
PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
__pyx_t_10 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 13411, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_10);
}
__pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_10, NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 13411, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_11);
__pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_11);
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
if (__pyx_t_12 < (0)) __PYX_ERR(0, 13411, __pyx_L9_except_error)
__pyx_t_13 = (!__pyx_t_12);
if (unlikely(__pyx_t_13)) {
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_3);
__pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0;
__PYX_ERR(0, 13411, __pyx_L9_except_error)
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_exception_handled;
}
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L1_error;
__pyx_L8_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_L12_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_1) {
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13411, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
goto __pyx_L6;
}
__pyx_L6:;
}
goto __pyx_L16;
__pyx_L3_error:;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L1_error;
__pyx_L16:;
}
+13412: self._check_open('__enter__')
__pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13412, __pyx_L7_error)
+13413: return self
{
PyObject *__pyx_temp;
{
__pyx_temp = __pyx_r;
__Pyx_INCREF((PyObject *)__pyx_v_self);
__pyx_r = ((PyObject *)__pyx_v_self);
}
__Pyx_XDECREF(__pyx_temp);
}
goto __pyx_L0;
13414:
+13415: def query(
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_5query(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledReader_4query, "\n Execute a SQL query on the lease\047s connection and return a\n :class:`QueryResult`.\n\n ``sql``, ``binds``, ``reset_symbol_dict`` and ``timeout`` behave\n exactly as on :meth:`QuestDB.query`, except the query runs on the\n reader this lease holds instead of a per-call pool borrow. The\n previous query\047s result must be fully drained (or closed)\n first; ``reset_symbol_dict=False`` reuses the connection\047s\n SYMBOL dictionary built up by the lease\047s earlier queries.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledReader_5query = {"query", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledReader_5query, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledReader_4query}; static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_5query(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_sql = 0; PyObject *__pyx_v_binds = 0; int __pyx_v_reset_symbol_dict; PyObject *__pyx_v_timeout = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("query (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_sql,&__pyx_mstate_global->__pyx_n_u_binds,&__pyx_mstate_global->__pyx_n_u_reset_symbol_dict,&__pyx_mstate_global->__pyx_n_u_timeout,0}; PyObject* values[4] = {0,0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 13415, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13415, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13415, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "query", 0) < (0)) __PYX_ERR(0, 13415, __pyx_L3_error) /* … */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12PooledReader_4query(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self, PyObject *__pyx_v_sql, PyObject *__pyx_v_binds, int __pyx_v_reset_symbol_dict, PyObject *__pyx_v_timeout) { struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_cursor_handle = 0; struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_last = 0; int64_t __pyx_v_timeout_ms; struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_15); __Pyx_AddTraceback("questdb._client.PooledReader.query", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_cursor_handle); __Pyx_XDECREF((PyObject *)__pyx_v_last); __Pyx_XDECREF((PyObject *)__pyx_v_handle); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_17 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 13415, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); /* … */ __pyx_t_19 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13415, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_QueryResult) < (0)) __PYX_ERR(0, 13415, __pyx_L1_error) __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledReader_5query, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledReader_query, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[175])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 13415, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20); #endif __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_20, __pyx_mstate_global->__pyx_tuple[49]); __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_20, __pyx_t_17); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_20, __pyx_t_19); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledReader, __pyx_mstate_global->__pyx_n_u_query, __pyx_t_20) < (0)) __PYX_ERR(0, 13415, __pyx_L1_error) __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
13416: self,
13417: str sql,
+13418: object binds=None,
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); /* … */ if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
13419: *,
+13420: bint reset_symbol_dict=True,
__pyx_v_reset_symbol_dict = ((int)1);
}
__pyx_v_timeout = values[3];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("query", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 13415, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.PooledReader.query", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sql), (&PyUnicode_Type), 1, "sql", 1))) __PYX_ERR(0, 13417, __pyx_L1_error)
__pyx_r = __pyx_pf_7questdb_7_client_12PooledReader_4query(((struct __pyx_obj_7questdb_7_client_PooledReader *)__pyx_v_self), __pyx_v_sql, __pyx_v_binds, __pyx_v_reset_symbol_dict, __pyx_v_timeout);
/* … */
if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_reset_symbol_dict, Py_True) < (0)) __PYX_ERR(0, 13415, __pyx_L1_error)
+13421: object timeout=None) -> QueryResult:
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("query", 0, 1, 2, i); __PYX_ERR(0, 13415, __pyx_L3_error) } } } else { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13415, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13415, __pyx_L3_error) break; default: goto __pyx_L5_argtuple_error; } /* … */ if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_sql = ((PyObject*)values[0]); __pyx_v_binds = values[1]; if (values[2]) { __pyx_v_reset_symbol_dict = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_reset_symbol_dict == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13420, __pyx_L3_error) } else { /* … */ if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_timeout, Py_None) < (0)) __PYX_ERR(0, 13415, __pyx_L1_error)
13422: """
13423: Execute a SQL query on the lease's connection and return a
13424: :class:`QueryResult`.
13425:
13426: ``sql``, ``binds``, ``reset_symbol_dict`` and ``timeout`` behave
13427: exactly as on :meth:`QuestDB.query`, except the query runs on the
13428: reader this lease holds instead of a per-call pool borrow. The
13429: previous query's result must be fully drained (or closed)
13430: first; ``reset_symbol_dict=False`` reuses the connection's
13431: SYMBOL dictionary built up by the lease's earlier queries.
13432: """
13433: cdef _CursorHandle cursor_handle
13434: cdef _CursorHandle last
13435: cdef int64_t timeout_ms
13436: cdef QuestDB handle
+13437: if binds is not None and not isinstance(binds, (list, tuple)):
__pyx_t_2 = (__pyx_v_binds != Py_None);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_3 = PyList_Check(__pyx_v_binds);
if (!__pyx_t_3) {
} else {
__pyx_t_2 = __pyx_t_3;
goto __pyx_L6_bool_binop_done;
}
__pyx_t_3 = PyTuple_Check(__pyx_v_binds);
__pyx_t_2 = __pyx_t_3;
__pyx_L6_bool_binop_done:;
__pyx_t_3 = (!__pyx_t_2);
__pyx_t_1 = __pyx_t_3;
__pyx_L4_bool_binop_done:;
if (unlikely(__pyx_t_1)) {
/* … */
}
+13438: raise TypeError(
__pyx_t_5 = NULL;
+13439: '"binds" must be a list or tuple of positional bind '
__pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_binds_must_be_a_list_or_tuple_o, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13439, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13438, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 13438, __pyx_L1_error)
+13440: f'parameters (or None), not {_fqn(type(binds))}')
__pyx_t_6 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_binds)))); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13440, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13440, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
13441: # Validated before the lease is touched, so a bad argument is a
13442: # plain TypeError / ValueError and never disturbs the connection.
+13443: timeout_ms = _query_timeout_to_millis(timeout)
__pyx_t_9 = __pyx_f_7questdb_7_client__query_timeout_to_millis(__pyx_v_timeout); if (unlikely(__pyx_t_9 == ((int64_t)-2L))) __PYX_ERR(0, 13443, __pyx_L1_error)
__pyx_v_timeout_ms = __pyx_t_9;
+13444: with self._lock:
/*with:*/ {
__pyx_t_10 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 13444, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_6 = NULL;
__pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13444, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_8 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_5))) {
__pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
assert(__pyx_t_6);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
__Pyx_INCREF(__pyx_t_6);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
__pyx_t_8 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
__pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13444, __pyx_L8_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
goto __pyx_L17_try_end;
__pyx_L12_error:;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledReader.query", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_15, &__pyx_t_4, &__pyx_t_7) < 0) __PYX_ERR(0, 13444, __pyx_L14_except_error)
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_7);
{
PyObject* __pyx_temp[3] = {__pyx_t_15, __pyx_t_4, __pyx_t_7};
__pyx_t_6 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13444, __pyx_L14_except_error)
__Pyx_GOTREF(__pyx_t_6);
}
__pyx_t_25 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_6, NULL);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 13444, __pyx_L14_except_error)
__Pyx_GOTREF(__pyx_t_25);
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_25);
__Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
if (__pyx_t_1 < (0)) __PYX_ERR(0, 13444, __pyx_L14_except_error)
__pyx_t_3 = (!__pyx_t_1);
if (unlikely(__pyx_t_3)) {
__Pyx_GIVEREF(__pyx_t_15);
__Pyx_GIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ErrRestoreWithState(__pyx_t_15, __pyx_t_4, __pyx_t_7);
__pyx_t_15 = 0; __pyx_t_4 = 0; __pyx_t_7 = 0;
__PYX_ERR(0, 13444, __pyx_L14_except_error)
}
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L13_exception_handled;
}
__pyx_L14_except_error:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
goto __pyx_L1_error;
__pyx_L13_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__pyx_L17_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_10) {
__pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 13444, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_13);
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
}
goto __pyx_L11;
}
__pyx_L11:;
}
goto __pyx_L29;
__pyx_L8_error:;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
goto __pyx_L1_error;
__pyx_L29:;
}
+13445: self._check_open('query')
__pyx_t_14 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_query); if (unlikely(__pyx_t_14 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13445, __pyx_L12_error)
+13446: handle = self._enter_call_locked()
__pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13446, __pyx_L12_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_4); __pyx_t_4 = 0;
+13447: try:
/*try:*/ {
+13448: last = self._last_cursor
__pyx_t_4 = ((PyObject *)__pyx_v_self->_last_cursor);
__Pyx_INCREF(__pyx_t_4);
__pyx_v_last = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_4);
__pyx_t_4 = 0;
+13449: if last is not None:
__pyx_t_1 = (((PyObject *)__pyx_v_last) != Py_None);
if (__pyx_t_1) {
/* … */
}
+13450: if last._is_live():
__pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_last->__pyx_vtab)->_is_live(__pyx_v_last); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13450, __pyx_L19_error)
if (unlikely(__pyx_t_1)) {
/* … */
}
+13451: raise QuestDBError(
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13451, __pyx_L19_error)
__Pyx_GOTREF(__pyx_t_6);
+13452: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13452, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 13452, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_6, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_15, __pyx_mstate_global->__pyx_kp_u_the_previous_QueryResult_is_stil}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13451, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 13451, __pyx_L19_error)
13453: 'the previous QueryResult is still open: '
13454: 'drain it fully or close() it before '
13455: 'running the next query on this lease.')
+13456: if self._reader._must_close:
if (unlikely(__pyx_v_self->_reader->_must_close)) {
/* … */
}
+13457: raise QuestDBError(
__pyx_t_6 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 13457, __pyx_L19_error)
__Pyx_GOTREF(__pyx_t_15);
+13458: QuestDBErrorCode.InvalidApiCall,
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13458, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13458, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_15))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_15); assert(__pyx_t_6); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_15); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_15, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_the_lease_s_connection_is_termin}; __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_15, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13457, __pyx_L19_error) __Pyx_GOTREF(__pyx_t_4); } __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 13457, __pyx_L19_error)
13459: "the lease's connection is terminal: the "
13460: 'previous query did not reach its terminal '
13461: 'frame, so its transport was torn down. close() '
13462: 'this lease and obtain a new one with '
13463: 'QuestDB.reader().')
+13464: cursor_handle = _execute_query(
__pyx_t_16.__pyx_n = 3;
__pyx_t_16.reset_symbol_dict = __pyx_v_reset_symbol_dict;
__pyx_t_16.owns_reader = 0;
__pyx_t_16.timeout_ms = __pyx_v_timeout_ms;
__pyx_t_15 = ((PyObject *)__pyx_f_7questdb_7_client__execute_query(((struct __pyx_obj_7questdb_7_client__ReaderHandle *)__pyx_t_4), __pyx_v_sql, __pyx_v_binds, &__pyx_t_16)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 13464, __pyx_L19_error)
__Pyx_GOTREF(__pyx_t_15);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_v_cursor_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_15);
__pyx_t_15 = 0;
+13465: self._reader, sql, binds, reset_symbol_dict, False,
__pyx_t_4 = ((PyObject *)__pyx_v_self->_reader);
__Pyx_INCREF(__pyx_t_4);
13466: timeout_ms)
+13467: self._last_cursor = cursor_handle
__Pyx_INCREF((PyObject *)__pyx_v_cursor_handle); __Pyx_GIVEREF((PyObject *)__pyx_v_cursor_handle); __Pyx_GOTREF((PyObject *)__pyx_v_self->_last_cursor); __Pyx_DECREF((PyObject *)__pyx_v_self->_last_cursor); __pyx_v_self->_last_cursor = __pyx_v_cursor_handle; }
13468: finally:
+13469: self._exit_call_locked(handle)
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13469, __pyx_L12_error)
goto __pyx_L20;
}
__pyx_L19_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_ExceptionSwap(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25);
if ( unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
__Pyx_XGOTREF(__pyx_t_20);
__Pyx_XGOTREF(__pyx_t_21);
__Pyx_XGOTREF(__pyx_t_22);
__Pyx_XGOTREF(__pyx_t_23);
__Pyx_XGOTREF(__pyx_t_24);
__Pyx_XGOTREF(__pyx_t_25);
__pyx_t_17 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13469, __pyx_L25_error)
}
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_XGIVEREF(__pyx_t_24);
__Pyx_XGIVEREF(__pyx_t_25);
__Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25);
__Pyx_XGIVEREF(__pyx_t_20);
__Pyx_XGIVEREF(__pyx_t_21);
__Pyx_XGIVEREF(__pyx_t_22);
__Pyx_ErrRestore(__pyx_t_20, __pyx_t_21, __pyx_t_22);
__pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0;
__pyx_lineno = __pyx_t_17; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19;
goto __pyx_L12_error;
__pyx_L25_error:;
__Pyx_XGIVEREF(__pyx_t_23);
__Pyx_XGIVEREF(__pyx_t_24);
__Pyx_XGIVEREF(__pyx_t_25);
__Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25);
__Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
__Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
__Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
__pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0;
goto __pyx_L12_error;
}
__pyx_L20:;
}
+13470: return QueryResult(cursor_handle)
__pyx_t_4 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_QueryResult); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 13470, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); if (unlikely(!__pyx_v_cursor_handle)) { __Pyx_RaiseUnboundLocalError("cursor_handle"); __PYX_ERR(0, 13470, __pyx_L1_error) } __pyx_t_8 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_15))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_15); assert(__pyx_t_4); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_15); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_15, __pyx__function); __pyx_t_8 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_4, ((PyObject *)__pyx_v_cursor_handle)}; __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_15, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13470, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_7; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_7 = 0; goto __pyx_L0;
13471:
+13472: def execute(self, str sql, object binds=None, *, object timeout=None):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_7execute(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledReader_6execute, "\n Run a statement on the lease\047s connection and discard whatever\n it returns.\n\n Mirrors :meth:`QuestDB.execute`, including the\n :class:`ExecDone` ``(op_type, rows_affected)`` return value. The\n result is drained\n to its clean end, so the lease stays usable for the next call,\n and the connection\047s SYMBOL dictionary is left untouched \342\200\224 an\n interleaved statement does not invalidate a warm dictionary\n built with ``reset_symbol_dict=False``.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledReader_7execute = {"execute", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledReader_7execute, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledReader_6execute}; static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_7execute(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_sql = 0; PyObject *__pyx_v_binds = 0; PyObject *__pyx_v_timeout = 0; #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("execute (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_sql,&__pyx_mstate_global->__pyx_n_u_binds,&__pyx_mstate_global->__pyx_n_u_timeout,0}; PyObject* values[3] = {0,0,0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 13472, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13472, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13472, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "execute", 0) < (0)) __PYX_ERR(0, 13472, __pyx_L3_error) if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("execute", 0, 1, 2, i); __PYX_ERR(0, 13472, __pyx_L3_error) } } } else { switch (__pyx_nargs) { case 2: values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13472, __pyx_L3_error) CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13472, __pyx_L3_error) break; default: goto __pyx_L5_argtuple_error; } if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None)); if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None)); } __pyx_v_sql = ((PyObject*)values[0]); __pyx_v_binds = values[1]; __pyx_v_timeout = values[2]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("execute", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 13472, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("questdb._client.PooledReader.execute", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sql), (&PyUnicode_Type), 1, "sql", 1))) __PYX_ERR(0, 13472, __pyx_L1_error) __pyx_r = __pyx_pf_7questdb_7_client_12PooledReader_6execute(((struct __pyx_obj_7questdb_7_client_PooledReader *)__pyx_v_self), __pyx_v_sql, __pyx_v_binds, __pyx_v_timeout); /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } goto __pyx_L7_cleaned_up; __pyx_L0:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __pyx_L7_cleaned_up:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12PooledReader_6execute(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self, PyObject *__pyx_v_sql, PyObject *__pyx_v_binds, PyObject *__pyx_v_timeout) { struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0; PyObject *__pyx_v_result = NULL; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_19); __Pyx_AddTraceback("questdb._client.PooledReader.execute", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_handle); __Pyx_XDECREF(__pyx_v_result); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_20 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 13472, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_20); if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_timeout, Py_None) < (0)) __PYX_ERR(0, 13472, __pyx_L1_error) __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledReader_7execute, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledReader_execute, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[176])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13472, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19); #endif __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_19, __pyx_mstate_global->__pyx_tuple[49]); __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_19, __pyx_t_20); __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledReader, __pyx_mstate_global->__pyx_n_u_execute_2, __pyx_t_19) < (0)) __PYX_ERR(0, 13472, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
13473: """
13474: Run a statement on the lease's connection and discard whatever
13475: it returns.
13476:
13477: Mirrors :meth:`QuestDB.execute`, including the
13478: :class:`ExecDone` ``(op_type, rows_affected)`` return value. The
13479: result is drained
13480: to its clean end, so the lease stays usable for the next call,
13481: and the connection's SYMBOL dictionary is left untouched — an
13482: interleaved statement does not invalidate a warm dictionary
13483: built with ``reset_symbol_dict=False``.
13484: """
13485: cdef QuestDB handle
+13486: with self._lock:
/*with:*/ {
__pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13486, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = NULL;
__pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13486, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13486, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledReader.execute", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4) < 0) __PYX_ERR(0, 13486, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_3);
__Pyx_XGOTREF(__pyx_t_4);
{
PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_3, __pyx_t_4};
__pyx_t_19 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13486, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_19);
}
__pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_19, NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 13486, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_13);
__pyx_t_20 = __Pyx_PyObject_IsTrue(__pyx_t_13);
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
if (__pyx_t_20 < (0)) __PYX_ERR(0, 13486, __pyx_L9_except_error)
__pyx_t_21 = (!__pyx_t_20);
if (unlikely(__pyx_t_21)) {
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_3, __pyx_t_4);
__pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0;
__PYX_ERR(0, 13486, __pyx_L9_except_error)
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L8_exception_handled;
}
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L1_error;
__pyx_L11_try_return:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L4_return;
__pyx_L8_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_1) {
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13486, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
goto __pyx_L6;
}
__pyx_L4_return: {
__pyx_t_8 = __pyx_r;
__pyx_r = 0;
if (__pyx_t_1) {
__pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13486, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
}
__pyx_r = __pyx_t_8;
__pyx_t_8 = 0;
goto __pyx_L0;
}
__pyx_L6:;
}
goto __pyx_L26;
__pyx_L3_error:;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L1_error;
__pyx_L26:;
}
+13487: self._check_open('execute')
__pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_execute_2); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13487, __pyx_L7_error)
+13488: handle = self._enter_call_locked()
__pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13488, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2); __pyx_t_2 = 0;
13489: # Held for the whole statement, as in every method of a lease:
13490: # the call count is then visible only to the thread running it.
+13491: try:
/*try:*/ {
+13492: result = self.query(
__pyx_t_4 = ((PyObject *)__pyx_v_self);
__Pyx_INCREF(__pyx_t_4);
+13493: sql, binds, reset_symbol_dict=False, timeout=timeout)
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[5] = {__pyx_t_4, __pyx_v_sql, __pyx_v_binds, Py_False, __pyx_v_timeout};
#if CYTHON_VECTORCALL
__pyx_t_3 = __pyx_mstate_global->__pyx_tuple[33];
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13492, __pyx_L14_error)
__Pyx_INCREF(__pyx_t_3);
#else
{
PyObject *__pyx_temp[2] = {__pyx_mstate_global->__pyx_n_u_reset_symbol_dict, __pyx_mstate_global->__pyx_n_u_timeout};
__pyx_t_3 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+3, 2);
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13492, __pyx_L14_error)
__Pyx_GOTREF(__pyx_t_3);
}
#endif
__pyx_t_2 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_query, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3);
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13492, __pyx_L14_error)
__Pyx_GOTREF(__pyx_t_2);
}
__pyx_v_result = __pyx_t_2;
__pyx_t_2 = 0;
+13494: try:
/*try:*/ {
+13495: result._drain()
__pyx_t_3 = __pyx_v_result;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_drain, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13495, __pyx_L17_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+13496: return result.exec_done
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_mstate_global->__pyx_n_u_exec_done); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13496, __pyx_L17_error) __Pyx_GOTREF(__pyx_t_2); { PyObject *__pyx_temp; { __pyx_temp = __pyx_r; __pyx_r = __pyx_t_2; } __Pyx_XDECREF(__pyx_temp); } __pyx_t_2 = 0; goto __pyx_L16_return; }
13497: finally:
+13498: result.close()
/*finally:*/ {
__pyx_L17_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
if ( unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__pyx_t_10 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_12 = __pyx_filename;
{
__pyx_t_3 = __pyx_v_result;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13498, __pyx_L20_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
}
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ErrRestore(__pyx_t_13, __pyx_t_14, __pyx_t_15);
__pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
__pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_12;
goto __pyx_L14_error;
__pyx_L20_error:;
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
goto __pyx_L14_error;
}
__pyx_L16_return: {
__pyx_t_18 = __pyx_r;
__pyx_r = 0;
__pyx_t_3 = __pyx_v_result;
__Pyx_INCREF(__pyx_t_3);
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13498, __pyx_L14_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_r = __pyx_t_18;
__pyx_t_18 = 0;
goto __pyx_L13_return;
}
}
}
13499: finally:
+13500: self._exit_call_locked(handle)
/*finally:*/ {
__pyx_L14_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_14, &__pyx_t_13);
if ( unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_17, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_17, &__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_18);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_13);
__pyx_t_11 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_12 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13500, __pyx_L22_error)
}
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_15, __pyx_t_14, __pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_ErrRestore(__pyx_t_18, __pyx_t_17, __pyx_t_16);
__pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0;
__pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_12;
goto __pyx_L7_error;
__pyx_L22_error:;
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_15, __pyx_t_14, __pyx_t_13);
__Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
__Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
__pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0;
goto __pyx_L7_error;
}
__pyx_L13_return: {
__pyx_t_13 = __pyx_r;
__pyx_r = 0;
((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13500, __pyx_L7_error)
__pyx_r = __pyx_t_13;
__pyx_t_13 = 0;
goto __pyx_L11_try_return;
}
}
13501:
+13502: def close(self):
/* Python wrapper */ static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_9close(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledReader_8close, "\n Release the lease\047s reader connection. Idempotent.\n\n A still-open (undrained) last result is freed first, which\n tears down the connection; a connection whose last query reached\n its terminal (a clean drain, a successful ``cancel()``, or a\n server-side error) is returned to the pool, any other is dropped\n and the pool refills on demand.\n "); static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledReader_9close = {"close", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledReader_9close, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledReader_8close}; static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_9close(PyObject *__pyx_v_self, #if CYTHON_VECTORCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { #if !CYTHON_VECTORCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("close (wrapper)", 0); #if !CYTHON_VECTORCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("close", 1, 0, 0, __pyx_nargs); return NULL; } const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len < 0)) return NULL; if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("close", __pyx_kwds); return NULL;} __pyx_r = __pyx_pf_7questdb_7_client_12PooledReader_8close(((struct __pyx_obj_7questdb_7_client_PooledReader *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7questdb_7_client_12PooledReader_8close(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self) { struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_19); __Pyx_AddTraceback("questdb._client.PooledReader.close", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_handle); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledReader_9close, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledReader_close, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[177])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13502, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_19); #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000 PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19); #endif if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledReader, __pyx_mstate_global->__pyx_n_u_close, __pyx_t_19) < (0)) __PYX_ERR(0, 13502, __pyx_L1_error) __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
13503: """
13504: Release the lease's reader connection. Idempotent.
13505:
13506: A still-open (undrained) last result is freed first, which
13507: tears down the connection; a connection whose last query reached
13508: its terminal (a clean drain, a successful ``cancel()``, or a
13509: server-side error) is returned to the pool, any other is dropped
13510: and the pool refills on demand.
13511: """
13512: cdef QuestDB handle
+13513: with self._lock:
/*with:*/ {
__pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13513, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = NULL;
__pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13513, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_4))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
assert(__pyx_t_3);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
__pyx_t_5 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
__pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13513, __pyx_L3_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
goto __pyx_L12_try_end;
__pyx_L7_error:;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledReader.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 13513, __pyx_L9_except_error)
__Pyx_XGOTREF(__pyx_t_2);
__Pyx_XGOTREF(__pyx_t_4);
__Pyx_XGOTREF(__pyx_t_3);
{
PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
__pyx_t_19 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13513, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_19);
}
__pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_19, NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 13513, __pyx_L9_except_error)
__Pyx_GOTREF(__pyx_t_18);
__pyx_t_20 = __Pyx_PyObject_IsTrue(__pyx_t_18);
__Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
if (__pyx_t_20 < (0)) __PYX_ERR(0, 13513, __pyx_L9_except_error)
__pyx_t_21 = (!__pyx_t_20);
if (unlikely(__pyx_t_21)) {
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_3);
__pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0;
__PYX_ERR(0, 13513, __pyx_L9_except_error)
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_exception_handled;
}
__pyx_L9_except_error:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L1_error;
__pyx_L8_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_XGIVEREF(__pyx_t_8);
__Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_L12_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_1) {
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13513, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
goto __pyx_L6;
}
__pyx_L6:;
}
goto __pyx_L21;
__pyx_L3_error:;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L1_error;
__pyx_L21:;
}
+13514: self._check_not_mid_call('close')
__pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_check_not_mid_call(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_close); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13514, __pyx_L7_error)
+13515: handle = self._enter_call_locked()
__pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13515, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2); __pyx_t_2 = 0;
+13516: try:
/*try:*/ {
+13517: self._release_locked()
((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_release_locked(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13517, __pyx_L14_error)
}
13518: finally:
+13519: self._exit_call_locked(handle)
/*finally:*/ {
/*normal exit:*/{
((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13519, __pyx_L7_error)
goto __pyx_L15;
}
__pyx_L14_error:;
/*exception exit:*/{
__Pyx_PyThreadState_declare
__Pyx_PyThreadState_assign
__pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
if ( unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_13);
__Pyx_XGOTREF(__pyx_t_14);
__Pyx_XGOTREF(__pyx_t_15);
__Pyx_XGOTREF(__pyx_t_16);
__Pyx_XGOTREF(__pyx_t_17);
__Pyx_XGOTREF(__pyx_t_18);
__pyx_t_10 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_12 = __pyx_filename;
{
((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13519, __pyx_L17_error)
}
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_XGIVEREF(__pyx_t_14);
__Pyx_XGIVEREF(__pyx_t_15);
__Pyx_ErrRestore(__pyx_t_13, __pyx_t_14, __pyx_t_15);
__pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
__pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_12;
goto __pyx_L7_error;
__pyx_L17_error:;
__Pyx_XGIVEREF(__pyx_t_16);
__Pyx_XGIVEREF(__pyx_t_17);
__Pyx_XGIVEREF(__pyx_t_18);
__Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
__pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
goto __pyx_L7_error;
}
__pyx_L15:;
}
13520:
+13521: def __exit__(self, exc_type, exc_val, exc_tb):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_11__exit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledReader_11__exit__ = {"__exit__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledReader_11__exit__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_11__exit__(PyObject *__pyx_v_self,
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
CYTHON_UNUSED PyObject *__pyx_v_exc_type = 0;
CYTHON_UNUSED PyObject *__pyx_v_exc_val = 0;
CYTHON_UNUSED PyObject *__pyx_v_exc_tb = 0;
#if !CYTHON_VECTORCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__exit__ (wrapper)", 0);
#if !CYTHON_VECTORCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_exc_type,&__pyx_mstate_global->__pyx_n_u_exc_val,&__pyx_mstate_global->__pyx_n_u_exc_tb,0};
PyObject* values[3] = {0,0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(0, 13521, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 13521, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13521, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13521, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__exit__", 0) < (0)) __PYX_ERR(0, 13521, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, i); __PYX_ERR(0, 13521, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 3)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13521, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13521, __pyx_L3_error)
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 13521, __pyx_L3_error)
}
__pyx_v_exc_type = values[0];
__pyx_v_exc_val = values[1];
__pyx_v_exc_tb = values[2];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 13521, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("questdb._client.PooledReader.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7questdb_7_client_12PooledReader_10__exit__(((struct __pyx_obj_7questdb_7_client_PooledReader *)__pyx_v_self), __pyx_v_exc_type, __pyx_v_exc_val, __pyx_v_exc_tb);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_7questdb_7_client_12PooledReader_10__exit__(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_exc_type, CYTHON_UNUSED PyObject *__pyx_v_exc_val, CYTHON_UNUSED PyObject *__pyx_v_exc_tb) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("questdb._client.PooledReader.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledReader_11__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledReader___exit, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[178])); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 13521, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_19);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
#endif
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledReader, __pyx_mstate_global->__pyx_n_u_exit, __pyx_t_19) < (0)) __PYX_ERR(0, 13521, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+13522: self.close()
__pyx_t_2 = ((PyObject *)__pyx_v_self); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13522, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
13523:
+13524: def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_12PooledReader_13__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_12PooledReader_13__dealloc__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_pf_7questdb_7_client_12PooledReader_12__dealloc__(((struct __pyx_obj_7questdb_7_client_PooledReader *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
}
static void __pyx_pf_7questdb_7_client_12PooledReader_12__dealloc__(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self) {
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_WriteUnraisable("questdb._client.PooledReader.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
+13525: if self._lock is not None:
__pyx_t_1 = (__pyx_v_self->_lock != Py_None);
if (__pyx_t_1) {
/* … */
}
+13526: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L5_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
__pyx_L9_try_end:;
}
+13527: with self._lock:
/*with:*/ {
__pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13527, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_7 = NULL;
__pyx_t_8 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13527, __pyx_L10_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_9 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_8))) {
__pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8);
assert(__pyx_t_7);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
__Pyx_INCREF(__pyx_t_7);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
__pyx_t_9 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
__pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_9, (1-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13527, __pyx_L10_error)
__Pyx_GOTREF(__pyx_t_6);
}
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
/*try:*/ {
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
goto __pyx_L19_try_end;
__pyx_L14_error:;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/*except:*/ {
__Pyx_AddTraceback("questdb._client.PooledReader.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_8, &__pyx_t_7) < 0) __PYX_ERR(0, 13527, __pyx_L16_except_error)
__Pyx_XGOTREF(__pyx_t_6);
__Pyx_XGOTREF(__pyx_t_8);
__Pyx_XGOTREF(__pyx_t_7);
{
PyObject* __pyx_temp[3] = {__pyx_t_6, __pyx_t_8, __pyx_t_7};
__pyx_t_13 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 13527, __pyx_L16_except_error)
__Pyx_GOTREF(__pyx_t_13);
}
__pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_13, NULL);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 13527, __pyx_L16_except_error)
__Pyx_GOTREF(__pyx_t_14);
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_14);
__Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
if (__pyx_t_1 < (0)) __PYX_ERR(0, 13527, __pyx_L16_except_error)
__pyx_t_15 = (!__pyx_t_1);
if (unlikely(__pyx_t_15)) {
__Pyx_GIVEREF(__pyx_t_6);
__Pyx_GIVEREF(__pyx_t_8);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ErrRestoreWithState(__pyx_t_6, __pyx_t_8, __pyx_t_7);
__pyx_t_6 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0;
__PYX_ERR(0, 13527, __pyx_L16_except_error)
}
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L15_exception_handled;
}
__pyx_L16_except_error:;
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
goto __pyx_L4_error;
__pyx_L15_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_10);
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
__pyx_L19_try_end:;
}
}
/*finally:*/ {
/*normal exit:*/{
if (__pyx_t_5) {
__pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[6], NULL);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 13527, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_12);
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
}
goto __pyx_L13;
}
__pyx_L13:;
}
goto __pyx_L23;
__pyx_L10_error:;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L4_error;
__pyx_L23:;
}
+13528: self._release_locked()
((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_release_locked(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 13528, __pyx_L14_error)
+13529: except KeyboardInterrupt:
__pyx_t_16 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_KeyboardInterrupt)))); if (__pyx_t_16) { __Pyx_AddTraceback("questdb._client.PooledReader.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_6) < 0) __PYX_ERR(0, 13529, __pyx_L6_except_error) __Pyx_XGOTREF(__pyx_t_7); __Pyx_XGOTREF(__pyx_t_8); __Pyx_XGOTREF(__pyx_t_6);
+13530: _rearm_interrupt()
__pyx_f_7questdb_7_client__rearm_interrupt();
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
goto __pyx_L5_exception_handled;
}
goto __pyx_L6_except_error;