Generated by Cython 3.0.10

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: dataframe.pxi

 0001: # See: dataframe.md for technical overview.
 0002: 
 0003: # Auto-flush settings.
 0004: # The individual `interval`, `row_count` and `byte_count`
 0005: # settings are set to `-1` when disabled.
 0006: # If `.enabled`, then at least one of the settings are `!= -1`.
+0007: cdef struct auto_flush_mode_t:
struct __pyx_t_7questdb_7ingress_auto_flush_mode_t {
  int enabled;
  int64_t interval;
  int64_t row_count;
  int64_t byte_count;
};
 0008:     bint enabled
 0009:     int64_t interval
 0010:     int64_t row_count
 0011:     int64_t byte_count
 0012: 
 0013: 
+0014: cdef struct auto_flush_t:
struct __pyx_t_7questdb_7ingress_auto_flush_t {
  struct line_sender *sender;
  struct __pyx_t_7questdb_7ingress_auto_flush_mode_t mode;
  int64_t *last_flush_ms;
};
 0015:     line_sender* sender
 0016:     auto_flush_mode_t mode
 0017:     int64_t* last_flush_ms
 0018: 
 0019: 
+0020: cdef auto_flush_t auto_flush_blank() noexcept nogil:
static struct __pyx_t_7questdb_7ingress_auto_flush_t __pyx_f_7questdb_7ingress_auto_flush_blank(void) {
  struct __pyx_t_7questdb_7ingress_auto_flush_t __pyx_v_af;
  struct __pyx_t_7questdb_7ingress_auto_flush_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0021:     cdef auto_flush_t af
+0022:     af.sender = NULL
  __pyx_v_af.sender = NULL;
+0023:     af.mode.enabled = False
  __pyx_v_af.mode.enabled = 0;
+0024:     af.mode.interval = -1
  __pyx_v_af.mode.interval = -1L;
+0025:     af.mode.row_count = -1
  __pyx_v_af.mode.row_count = -1L;
+0026:     af.mode.byte_count = -1
  __pyx_v_af.mode.byte_count = -1L;
+0027:     af.last_flush_ms = NULL
  __pyx_v_af.last_flush_ms = NULL;
+0028:     return af
  __pyx_r = __pyx_v_af;
  goto __pyx_L0;
 0029: 
 0030: 
+0031: cdef bint should_auto_flush(
static int __pyx_f_7questdb_7ingress_should_auto_flush(struct __pyx_t_7questdb_7ingress_auto_flush_mode_t const *__pyx_v_af_mode, struct line_sender_buffer *__pyx_v_ls_buf, int64_t __pyx_v_last_flush_ms) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0032:             const auto_flush_mode_t* af_mode,
 0033:             line_sender_buffer* ls_buf,
 0034:             int64_t last_flush_ms):
+0035:     if not af_mode.enabled:
  __pyx_t_1 = (!(__pyx_v_af_mode->enabled != 0));
  if (__pyx_t_1) {
/* … */
  }
+0036:         return False
    __pyx_r = 0;
    goto __pyx_L0;
 0037: 
 0038:     # Check `auto_flush_rows` breach.
+0039:     if (af_mode.row_count != -1) and \
  __pyx_t_2 = (__pyx_v_af_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) {
/* … */
  }
+0040:         (<int64_t>line_sender_buffer_row_count(ls_buf) >= af_mode.row_count):
  __pyx_t_2 = (((int64_t)line_sender_buffer_row_count(__pyx_v_ls_buf)) >= __pyx_v_af_mode->row_count);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L5_bool_binop_done:;
+0041:         return True
    __pyx_r = 1;
    goto __pyx_L0;
 0042: 
 0043:     # Check `auto_flush_bytes` breach.
+0044:     if (af_mode.byte_count != -1) and \
  __pyx_t_2 = (__pyx_v_af_mode->byte_count != -1L);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L8_bool_binop_done;
  }
/* … */
  if (__pyx_t_1) {
/* … */
  }
+0045:         (<int64_t>line_sender_buffer_size(ls_buf) >= af_mode.byte_count):
  __pyx_t_2 = (((int64_t)line_sender_buffer_size(__pyx_v_ls_buf)) >= __pyx_v_af_mode->byte_count);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L8_bool_binop_done:;
+0046:         return True
    __pyx_r = 1;
    goto __pyx_L0;
 0047: 
 0048:     # Check for interval breach.
+0049:     if (af_mode.interval != -1) and \
  __pyx_t_2 = (__pyx_v_af_mode->interval != -1L);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L11_bool_binop_done;
  }
/* … */
  if (__pyx_t_1) {
/* … */
  }
+0050:         (((line_sender_now_micros() / 1000) - last_flush_ms) >= af_mode.interval):
  __pyx_t_2 = (((((double)line_sender_now_micros()) / 1000.0) - __pyx_v_last_flush_ms) >= __pyx_v_af_mode->interval);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L11_bool_binop_done:;
+0051:         return True
    __pyx_r = 1;
    goto __pyx_L0;
 0052: 
+0053:     return False
  __pyx_r = 0;
  goto __pyx_L0;
 0054: 
 0055: 
+0056: cdef struct col_chunks_t:
struct __pyx_t_7questdb_7ingress_col_chunks_t {
  size_t n_chunks;
  struct ArrowArray *chunks;
};
 0057:     size_t n_chunks
 0058:     ArrowArray* chunks  # We calloc `n_chunks + 1` of these.
 0059: 
 0060: 
+0061: cdef struct col_cursor_t:
struct __pyx_t_7questdb_7ingress_col_cursor_t {
  struct ArrowArray *chunk;
  size_t chunk_index;
  size_t offset;
};
 0062:     ArrowArray* chunk  # Current chunk.
 0063:     size_t chunk_index
 0064:     size_t offset  # i.e. the element index (not byte offset)
 0065: 
 0066: 
+0067: cdef enum col_target_t:
enum __pyx_t_7questdb_7ingress_col_target_t {
  __pyx_e_7questdb_7ingress_col_target_skip = 0,
  __pyx_e_7questdb_7ingress_col_target_table = 1,
  __pyx_e_7questdb_7ingress_col_target_symbol = 2,
  __pyx_e_7questdb_7ingress_col_target_column_bool = 3,
  __pyx_e_7questdb_7ingress_col_target_column_i64 = 4,
  __pyx_e_7questdb_7ingress_col_target_column_f64 = 5,
  __pyx_e_7questdb_7ingress_col_target_column_str = 6,
  __pyx_e_7questdb_7ingress_col_target_column_ts = 7,
  __pyx_e_7questdb_7ingress_col_target_at = 8
};
 0068:     col_target_skip = 0
 0069:     col_target_table = 1
 0070:     col_target_symbol = 2
 0071:     col_target_column_bool = 3
 0072:     col_target_column_i64 = 4
 0073:     col_target_column_f64 = 5
 0074:     col_target_column_str = 6
 0075:     col_target_column_ts = 7
 0076:     col_target_at = 8
 0077: 
 0078: 
 0079: cdef dict _TARGET_NAMES = {
+0080:     col_target_t.col_target_skip: "skipped",
  __pyx_t_2 = __Pyx_PyDict_NewPresized(9); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 80, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_skip); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 80, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_t_3, __pyx_n_u_skipped) < 0) __PYX_ERR(1, 80, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0081:     col_target_t.col_target_table: "table name",
  __pyx_t_3 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_table); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 81, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_t_3, __pyx_kp_u_table_name_2) < 0) __PYX_ERR(1, 80, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0082:     col_target_t.col_target_symbol: "symbol",
  __pyx_t_3 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_symbol); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 82, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_t_3, __pyx_n_u_symbol) < 0) __PYX_ERR(1, 80, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0083:     col_target_t.col_target_column_bool: "boolean",
  __pyx_t_3 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_column_bool); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_t_3, __pyx_n_u_boolean) < 0) __PYX_ERR(1, 80, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0084:     col_target_t.col_target_column_i64: "integer",
  __pyx_t_3 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_column_i64); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 84, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_t_3, __pyx_n_u_integer) < 0) __PYX_ERR(1, 80, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0085:     col_target_t.col_target_column_f64: "float",
  __pyx_t_3 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_column_f64); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_t_3, __pyx_n_u_float) < 0) __PYX_ERR(1, 80, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0086:     col_target_t.col_target_column_str: "string",
  __pyx_t_3 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_column_str); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 86, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_t_3, __pyx_n_u_string) < 0) __PYX_ERR(1, 80, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0087:     col_target_t.col_target_column_ts: "timestamp",
  __pyx_t_3 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_column_ts); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 87, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_t_3, __pyx_n_u_timestamp) < 0) __PYX_ERR(1, 80, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0088:     col_target_t.col_target_at: "designated timestamp",
  __pyx_t_3 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_at); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_t_3, __pyx_kp_u_designated_timestamp) < 0) __PYX_ERR(1, 80, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__TARGET_NAMES);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__TARGET_NAMES, ((PyObject*)__pyx_t_2));
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
 0089: }
 0090: 
 0091: 
+0092: cdef enum col_source_t:
enum __pyx_t_7questdb_7ingress_col_source_t {
  __pyx_e_7questdb_7ingress_col_source_nulls = 0,
  __pyx_e_7questdb_7ingress_col_source_bool_pyobj = 0x18AEC,
  __pyx_e_7questdb_7ingress_col_source_bool_numpy = 0x18E70,
  __pyx_e_7questdb_7ingress_col_source_bool_arrow = 0x19258,
  __pyx_e_7questdb_7ingress_col_source_int_pyobj = 0x3118C,
  __pyx_e_7questdb_7ingress_col_source_u8_numpy = 0x31510,
  __pyx_e_7questdb_7ingress_col_source_i8_numpy = 0x318F8,
  __pyx_e_7questdb_7ingress_col_source_u16_numpy = 0x31CE0,
  __pyx_e_7questdb_7ingress_col_source_i16_numpy = 0x320C8,
  __pyx_e_7questdb_7ingress_col_source_u32_numpy = 0x324B0,
  __pyx_e_7questdb_7ingress_col_source_i32_numpy = 0x32898,
  __pyx_e_7questdb_7ingress_col_source_u64_numpy = 0x32C80,
  __pyx_e_7questdb_7ingress_col_source_i64_numpy = 0x33068,
  __pyx_e_7questdb_7ingress_col_source_u8_arrow = 0x33450,
  __pyx_e_7questdb_7ingress_col_source_i8_arrow = 0x33838,
  __pyx_e_7questdb_7ingress_col_source_u16_arrow = 0x33C20,
  __pyx_e_7questdb_7ingress_col_source_i16_arrow = 0x34008,
  __pyx_e_7questdb_7ingress_col_source_u32_arrow = 0x343F0,
  __pyx_e_7questdb_7ingress_col_source_i32_arrow = 0x347D8,
  __pyx_e_7questdb_7ingress_col_source_u64_arrow = 0x34BC0,
  __pyx_e_7questdb_7ingress_col_source_i64_arrow = 0x34FA8,
  __pyx_e_7questdb_7ingress_col_source_float_pyobj = 0x4982C,
  __pyx_e_7questdb_7ingress_col_source_f32_numpy = 0x49BB0,
  __pyx_e_7questdb_7ingress_col_source_f64_numpy = 0x49F98,
  __pyx_e_7questdb_7ingress_col_source_f32_arrow = 0x4A380,
  __pyx_e_7questdb_7ingress_col_source_f64_arrow = 0x4A768,
  __pyx_e_7questdb_7ingress_col_source_str_pyobj = 0x61ECC,
  __pyx_e_7questdb_7ingress_col_source_str_utf8_arrow = 0x62250,
  __pyx_e_7questdb_7ingress_col_source_str_i8_cat = 0x62638,
  __pyx_e_7questdb_7ingress_col_source_str_i16_cat = 0x62A20,
  __pyx_e_7questdb_7ingress_col_source_str_i32_cat = 0x62E08,
  __pyx_e_7questdb_7ingress_col_source_str_lrg_utf8_arrow = 0x631F0,
  __pyx_e_7questdb_7ingress_col_source_dt64ns_numpy = 0x7A508,
  __pyx_e_7questdb_7ingress_col_source_dt64ns_tz_arrow = 0x7A8F0
};
 0093:     # Note: Hundreds digit set to 1 if GIL is required.
 0094:     col_source_nulls =                       0
 0095:     col_source_bool_pyobj =             101100
 0096:     col_source_bool_numpy =             102000
 0097:     col_source_bool_arrow =             103000
 0098:     col_source_int_pyobj =              201100
 0099:     col_source_u8_numpy =               202000
 0100:     col_source_i8_numpy =               203000
 0101:     col_source_u16_numpy =              204000
 0102:     col_source_i16_numpy =              205000
 0103:     col_source_u32_numpy =              206000
 0104:     col_source_i32_numpy =              207000
 0105:     col_source_u64_numpy =              208000
 0106:     col_source_i64_numpy =              209000
 0107:     col_source_u8_arrow =               210000
 0108:     col_source_i8_arrow =               211000
 0109:     col_source_u16_arrow =              212000
 0110:     col_source_i16_arrow =              213000
 0111:     col_source_u32_arrow =              214000
 0112:     col_source_i32_arrow =              215000
 0113:     col_source_u64_arrow =              216000
 0114:     col_source_i64_arrow =              217000
 0115:     col_source_float_pyobj =            301100
 0116:     col_source_f32_numpy =              302000
 0117:     col_source_f64_numpy =              303000
 0118:     col_source_f32_arrow =              304000
 0119:     col_source_f64_arrow =              305000
 0120:     col_source_str_pyobj =              401100
 0121:     col_source_str_utf8_arrow =         402000
 0122:     col_source_str_i8_cat =             403000
 0123:     col_source_str_i16_cat =            404000
 0124:     col_source_str_i32_cat =            405000
 0125:     col_source_str_lrg_utf8_arrow =     406000
 0126:     col_source_dt64ns_numpy =           501000
 0127:     col_source_dt64ns_tz_arrow =        502000
 0128: 
 0129: 
+0130: cdef bint col_source_needs_gil(col_source_t source) noexcept nogil:
static int __pyx_f_7questdb_7ingress_col_source_needs_gil(enum __pyx_t_7questdb_7ingress_col_source_t __pyx_v_source) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0131:     # Check if hundreds digit is 1.
+0132:     return <int>source // 100 % 10 == 1
  __pyx_r = (__Pyx_mod_long(__Pyx_div_long(((int)__pyx_v_source), 0x64), 10) == 1);
  goto __pyx_L0;
 0133: 
 0134: 
 0135: cdef set _STR_SOURCES = {
+0136:     col_source_t.col_source_str_pyobj,
  __pyx_t_2 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_pyobj); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 136, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
+0137:     col_source_t.col_source_str_utf8_arrow,
  __pyx_t_3 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_utf8_arrow); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
+0138:     col_source_t.col_source_str_lrg_utf8_arrow,
  __pyx_t_4 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_lrg_utf8_arrow); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
+0139:     col_source_t.col_source_str_i8_cat,
  __pyx_t_5 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_i8_cat); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
+0140:     col_source_t.col_source_str_i16_cat,
  __pyx_t_6 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_i16_cat); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 140, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
+0141:     col_source_t.col_source_str_i32_cat,
  __pyx_t_7 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_i32_cat); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = PySet_New(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 136, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  if (PySet_Add(__pyx_t_8, __pyx_t_2) < 0) __PYX_ERR(1, 136, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PySet_Add(__pyx_t_8, __pyx_t_3) < 0) __PYX_ERR(1, 136, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PySet_Add(__pyx_t_8, __pyx_t_4) < 0) __PYX_ERR(1, 136, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PySet_Add(__pyx_t_8, __pyx_t_5) < 0) __PYX_ERR(1, 136, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PySet_Add(__pyx_t_8, __pyx_t_6) < 0) __PYX_ERR(1, 136, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PySet_Add(__pyx_t_8, __pyx_t_7) < 0) __PYX_ERR(1, 136, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__STR_SOURCES);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__STR_SOURCES, ((PyObject*)__pyx_t_8));
  __Pyx_GIVEREF(__pyx_t_8);
  __pyx_t_8 = 0;
 0142: }
 0143: 
 0144: 
 0145: cdef dict _PYOBJ_SOURCE_DESCR = {
+0146:     col_source_t.col_source_bool_pyobj: "bool",
  __pyx_t_8 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 146, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_7 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_bool_pyobj); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 146, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_8, __pyx_t_7, __pyx_n_u_bool) < 0) __PYX_ERR(1, 146, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+0147:     col_source_t.col_source_int_pyobj: "int",
  __pyx_t_7 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_int_pyobj); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_8, __pyx_t_7, __pyx_n_u_int) < 0) __PYX_ERR(1, 146, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+0148:     col_source_t.col_source_float_pyobj: "float",
  __pyx_t_7 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_float_pyobj); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_8, __pyx_t_7, __pyx_n_u_float) < 0) __PYX_ERR(1, 146, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+0149:     col_source_t.col_source_str_pyobj: "str",
  __pyx_t_7 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_pyobj); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_8, __pyx_t_7, __pyx_n_u_str) < 0) __PYX_ERR(1, 146, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__PYOBJ_SOURCE_DESCR);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__PYOBJ_SOURCE_DESCR, ((PyObject*)__pyx_t_8));
  __Pyx_GIVEREF(__pyx_t_8);
  __pyx_t_8 = 0;
 0150: }
 0151: 
 0152: 
 0153: cdef dict _TARGET_TO_SOURCES = {
+0154:     col_target_t.col_target_skip: {
  __pyx_t_8 = __Pyx_PyDict_NewPresized(9); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_7 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_skip); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
+0155:         col_source_t.col_source_nulls,
  __pyx_t_6 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_nulls); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = PySet_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PySet_Add(__pyx_t_5, __pyx_t_6) < 0) __PYX_ERR(1, 155, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem(__pyx_t_8, __pyx_t_7, __pyx_t_5) < 0) __PYX_ERR(1, 154, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 0156:     },
+0157:     col_target_t.col_target_table: {
  __pyx_t_5 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_table); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 157, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
+0158:         col_source_t.col_source_str_pyobj,
  __pyx_t_7 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_pyobj); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 158, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
+0159:         col_source_t.col_source_str_utf8_arrow,
  __pyx_t_6 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_utf8_arrow); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
+0160:         col_source_t.col_source_str_lrg_utf8_arrow,
  __pyx_t_4 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_lrg_utf8_arrow); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 160, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
+0161:         col_source_t.col_source_str_i8_cat,
  __pyx_t_3 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_i8_cat); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 161, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
+0162:         col_source_t.col_source_str_i16_cat,
  __pyx_t_2 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_i16_cat); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 162, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
+0163:         col_source_t.col_source_str_i32_cat,
  __pyx_t_9 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_i32_cat); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_10 = PySet_New(0); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 158, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  if (PySet_Add(__pyx_t_10, __pyx_t_7) < 0) __PYX_ERR(1, 158, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (PySet_Add(__pyx_t_10, __pyx_t_6) < 0) __PYX_ERR(1, 158, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PySet_Add(__pyx_t_10, __pyx_t_4) < 0) __PYX_ERR(1, 158, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PySet_Add(__pyx_t_10, __pyx_t_3) < 0) __PYX_ERR(1, 158, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PySet_Add(__pyx_t_10, __pyx_t_2) < 0) __PYX_ERR(1, 158, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PySet_Add(__pyx_t_10, __pyx_t_9) < 0) __PYX_ERR(1, 158, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (PyDict_SetItem(__pyx_t_8, __pyx_t_5, __pyx_t_10) < 0) __PYX_ERR(1, 154, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
 0164:     },
+0165:     col_target_t.col_target_symbol: {
  __pyx_t_10 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_symbol); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 165, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
+0166:         col_source_t.col_source_str_pyobj,
  __pyx_t_5 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_pyobj); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 166, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
+0167:         col_source_t.col_source_str_utf8_arrow,
  __pyx_t_9 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_utf8_arrow); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 167, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
+0168:         col_source_t.col_source_str_lrg_utf8_arrow,
  __pyx_t_2 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_lrg_utf8_arrow); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
+0169:         col_source_t.col_source_str_i8_cat,
  __pyx_t_3 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_i8_cat); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 169, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
+0170:         col_source_t.col_source_str_i16_cat,
  __pyx_t_4 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_i16_cat); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 170, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
+0171:         col_source_t.col_source_str_i32_cat,
  __pyx_t_6 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_i32_cat); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 171, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PySet_New(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 166, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PySet_Add(__pyx_t_7, __pyx_t_5) < 0) __PYX_ERR(1, 166, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PySet_Add(__pyx_t_7, __pyx_t_9) < 0) __PYX_ERR(1, 166, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (PySet_Add(__pyx_t_7, __pyx_t_2) < 0) __PYX_ERR(1, 166, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PySet_Add(__pyx_t_7, __pyx_t_3) < 0) __PYX_ERR(1, 166, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PySet_Add(__pyx_t_7, __pyx_t_4) < 0) __PYX_ERR(1, 166, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PySet_Add(__pyx_t_7, __pyx_t_6) < 0) __PYX_ERR(1, 166, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem(__pyx_t_8, __pyx_t_10, __pyx_t_7) < 0) __PYX_ERR(1, 154, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 0172:     },
+0173:     col_target_t.col_target_column_bool: {
  __pyx_t_7 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_column_bool); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
+0174:         col_source_t.col_source_bool_pyobj,
  __pyx_t_10 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_bool_pyobj); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 174, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
+0175:         col_source_t.col_source_bool_numpy,
  __pyx_t_6 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_bool_numpy); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
+0176:         col_source_t.col_source_bool_arrow,
  __pyx_t_4 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_bool_arrow); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 176, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = PySet_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 174, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PySet_Add(__pyx_t_3, __pyx_t_10) < 0) __PYX_ERR(1, 174, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (PySet_Add(__pyx_t_3, __pyx_t_6) < 0) __PYX_ERR(1, 174, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PySet_Add(__pyx_t_3, __pyx_t_4) < 0) __PYX_ERR(1, 174, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PyDict_SetItem(__pyx_t_8, __pyx_t_7, __pyx_t_3) < 0) __PYX_ERR(1, 154, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 0177:     },
+0178:     col_target_t.col_target_column_i64: {
  __pyx_t_3 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_column_i64); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 178, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
+0179:         col_source_t.col_source_int_pyobj,
  __pyx_t_7 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_int_pyobj); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 179, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
+0180:         col_source_t.col_source_u8_numpy,
  __pyx_t_4 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_u8_numpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 180, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
+0181:         col_source_t.col_source_i8_numpy,
  __pyx_t_6 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_i8_numpy); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
+0182:         col_source_t.col_source_u16_numpy,
  __pyx_t_10 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_u16_numpy); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 182, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
+0183:         col_source_t.col_source_i16_numpy,
  __pyx_t_2 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_i16_numpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 183, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
+0184:         col_source_t.col_source_u32_numpy,
  __pyx_t_9 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_u32_numpy); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
+0185:         col_source_t.col_source_i32_numpy,
  __pyx_t_5 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_i32_numpy); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
+0186:         col_source_t.col_source_u64_numpy,
  __pyx_t_11 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_u64_numpy); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
+0187:         col_source_t.col_source_i64_numpy,
  __pyx_t_12 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_i64_numpy); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 187, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
+0188:         col_source_t.col_source_u8_arrow,
  __pyx_t_13 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_u8_arrow); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
+0189:         col_source_t.col_source_i8_arrow,
  __pyx_t_14 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_i8_arrow); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
+0190:         col_source_t.col_source_u16_arrow,
  __pyx_t_15 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_u16_arrow); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 190, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
+0191:         col_source_t.col_source_i16_arrow,
  __pyx_t_16 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_i16_arrow); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
+0192:         col_source_t.col_source_u32_arrow,
  __pyx_t_17 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_u32_arrow); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
+0193:         col_source_t.col_source_i32_arrow,
  __pyx_t_18 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_i32_arrow); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
+0194:         col_source_t.col_source_u64_arrow,
  __pyx_t_19 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_u64_arrow); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 194, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
+0195:         col_source_t.col_source_i64_arrow,
  __pyx_t_20 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_i64_arrow); if (unlikely(!__pyx_t_20)) __PYX_ERR(1, 195, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_21 = PySet_New(0); if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 179, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
  if (PySet_Add(__pyx_t_21, __pyx_t_7) < 0) __PYX_ERR(1, 179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (PySet_Add(__pyx_t_21, __pyx_t_4) < 0) __PYX_ERR(1, 179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PySet_Add(__pyx_t_21, __pyx_t_6) < 0) __PYX_ERR(1, 179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PySet_Add(__pyx_t_21, __pyx_t_10) < 0) __PYX_ERR(1, 179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (PySet_Add(__pyx_t_21, __pyx_t_2) < 0) __PYX_ERR(1, 179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PySet_Add(__pyx_t_21, __pyx_t_9) < 0) __PYX_ERR(1, 179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (PySet_Add(__pyx_t_21, __pyx_t_5) < 0) __PYX_ERR(1, 179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PySet_Add(__pyx_t_21, __pyx_t_11) < 0) __PYX_ERR(1, 179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  if (PySet_Add(__pyx_t_21, __pyx_t_12) < 0) __PYX_ERR(1, 179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  if (PySet_Add(__pyx_t_21, __pyx_t_13) < 0) __PYX_ERR(1, 179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  if (PySet_Add(__pyx_t_21, __pyx_t_14) < 0) __PYX_ERR(1, 179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  if (PySet_Add(__pyx_t_21, __pyx_t_15) < 0) __PYX_ERR(1, 179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  if (PySet_Add(__pyx_t_21, __pyx_t_16) < 0) __PYX_ERR(1, 179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (PySet_Add(__pyx_t_21, __pyx_t_17) < 0) __PYX_ERR(1, 179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (PySet_Add(__pyx_t_21, __pyx_t_18) < 0) __PYX_ERR(1, 179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  if (PySet_Add(__pyx_t_21, __pyx_t_19) < 0) __PYX_ERR(1, 179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  if (PySet_Add(__pyx_t_21, __pyx_t_20) < 0) __PYX_ERR(1, 179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (PyDict_SetItem(__pyx_t_8, __pyx_t_3, __pyx_t_21) < 0) __PYX_ERR(1, 154, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
 0196:     },
+0197:     col_target_t.col_target_column_f64: {
  __pyx_t_21 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_column_f64); if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 197, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
+0198:         col_source_t.col_source_float_pyobj,
  __pyx_t_3 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_float_pyobj); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 198, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
+0199:         col_source_t.col_source_f32_numpy,
  __pyx_t_20 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_f32_numpy); if (unlikely(!__pyx_t_20)) __PYX_ERR(1, 199, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
+0200:         col_source_t.col_source_f64_numpy,
  __pyx_t_19 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_f64_numpy); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
+0201:         col_source_t.col_source_f32_arrow,
  __pyx_t_18 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_f32_arrow); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
+0202:         col_source_t.col_source_f64_arrow,
  __pyx_t_17 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_f64_arrow); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_16 = PySet_New(0); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 198, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  if (PySet_Add(__pyx_t_16, __pyx_t_3) < 0) __PYX_ERR(1, 198, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PySet_Add(__pyx_t_16, __pyx_t_20) < 0) __PYX_ERR(1, 198, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (PySet_Add(__pyx_t_16, __pyx_t_19) < 0) __PYX_ERR(1, 198, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  if (PySet_Add(__pyx_t_16, __pyx_t_18) < 0) __PYX_ERR(1, 198, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  if (PySet_Add(__pyx_t_16, __pyx_t_17) < 0) __PYX_ERR(1, 198, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (PyDict_SetItem(__pyx_t_8, __pyx_t_21, __pyx_t_16) < 0) __PYX_ERR(1, 154, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 0203:     },
+0204:     col_target_t.col_target_column_str: {
  __pyx_t_16 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_column_str); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
+0205:         col_source_t.col_source_str_pyobj,
  __pyx_t_21 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_pyobj); if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 205, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
+0206:         col_source_t.col_source_str_utf8_arrow,
  __pyx_t_17 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_utf8_arrow); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 206, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
+0207:         col_source_t.col_source_str_lrg_utf8_arrow,
  __pyx_t_18 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_lrg_utf8_arrow); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
+0208:         col_source_t.col_source_str_i8_cat,
  __pyx_t_19 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_i8_cat); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
+0209:         col_source_t.col_source_str_i16_cat,
  __pyx_t_20 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_i16_cat); if (unlikely(!__pyx_t_20)) __PYX_ERR(1, 209, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
+0210:         col_source_t.col_source_str_i32_cat,
  __pyx_t_3 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_str_i32_cat); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 210, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_15 = PySet_New(0); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 205, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  if (PySet_Add(__pyx_t_15, __pyx_t_21) < 0) __PYX_ERR(1, 205, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
  if (PySet_Add(__pyx_t_15, __pyx_t_17) < 0) __PYX_ERR(1, 205, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (PySet_Add(__pyx_t_15, __pyx_t_18) < 0) __PYX_ERR(1, 205, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  if (PySet_Add(__pyx_t_15, __pyx_t_19) < 0) __PYX_ERR(1, 205, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  if (PySet_Add(__pyx_t_15, __pyx_t_20) < 0) __PYX_ERR(1, 205, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (PySet_Add(__pyx_t_15, __pyx_t_3) < 0) __PYX_ERR(1, 205, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_8, __pyx_t_16, __pyx_t_15) < 0) __PYX_ERR(1, 154, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
 0211:     },
+0212:     col_target_t.col_target_column_ts: {
  __pyx_t_15 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_column_ts); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 212, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
+0213:         col_source_t.col_source_dt64ns_numpy,
  __pyx_t_16 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_dt64ns_numpy); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 213, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
+0214:         col_source_t.col_source_dt64ns_tz_arrow,
  __pyx_t_3 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_dt64ns_tz_arrow); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 214, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_20 = PySet_New(0); if (unlikely(!__pyx_t_20)) __PYX_ERR(1, 213, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  if (PySet_Add(__pyx_t_20, __pyx_t_16) < 0) __PYX_ERR(1, 213, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (PySet_Add(__pyx_t_20, __pyx_t_3) < 0) __PYX_ERR(1, 213, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_8, __pyx_t_15, __pyx_t_20) < 0) __PYX_ERR(1, 154, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 0215:     },
+0216:     col_target_t.col_target_at: {
  __pyx_t_20 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_at); if (unlikely(!__pyx_t_20)) __PYX_ERR(1, 216, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
+0217:         col_source_t.col_source_dt64ns_numpy,
  __pyx_t_15 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_dt64ns_numpy); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 217, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
+0218:         col_source_t.col_source_dt64ns_tz_arrow,
  __pyx_t_3 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_e_7questdb_7ingress_col_source_dt64ns_tz_arrow); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_16 = PySet_New(0); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 217, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  if (PySet_Add(__pyx_t_16, __pyx_t_15) < 0) __PYX_ERR(1, 217, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  if (PySet_Add(__pyx_t_16, __pyx_t_3) < 0) __PYX_ERR(1, 217, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_8, __pyx_t_20, __pyx_t_16) < 0) __PYX_ERR(1, 154, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__TARGET_TO_SOURCES);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__TARGET_TO_SOURCES, ((PyObject*)__pyx_t_8));
  __Pyx_GIVEREF(__pyx_t_8);
  __pyx_t_8 = 0;
 0219:     },
 0220: }
 0221: 
 0222: 
 0223: # Targets associated with col_meta_target.field.
 0224: cdef tuple _FIELD_TARGETS = (
+0225:     col_target_t.col_target_skip,
  __pyx_t_8 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_skip); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 225, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
/* … */
  __pyx_t_18 = PyTuple_New(6); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 225, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_GIVEREF(__pyx_t_8);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_8)) __PYX_ERR(1, 225, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_16);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_18, 1, __pyx_t_16)) __PYX_ERR(1, 225, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_20);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_18, 2, __pyx_t_20)) __PYX_ERR(1, 225, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_3);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_18, 3, __pyx_t_3)) __PYX_ERR(1, 225, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_15);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_18, 4, __pyx_t_15)) __PYX_ERR(1, 225, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_19);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_18, 5, __pyx_t_19)) __PYX_ERR(1, 225, __pyx_L1_error);
  __pyx_t_8 = 0;
  __pyx_t_16 = 0;
  __pyx_t_20 = 0;
  __pyx_t_3 = 0;
  __pyx_t_15 = 0;
  __pyx_t_19 = 0;
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__FIELD_TARGETS);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__FIELD_TARGETS, ((PyObject*)__pyx_t_18));
  __Pyx_GIVEREF(__pyx_t_18);
  __pyx_t_18 = 0;
+0226:     col_target_t.col_target_column_bool,
  __pyx_t_16 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_column_bool); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 226, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
+0227:     col_target_t.col_target_column_i64,
  __pyx_t_20 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_column_i64); if (unlikely(!__pyx_t_20)) __PYX_ERR(1, 227, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
+0228:     col_target_t.col_target_column_f64,
  __pyx_t_3 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_column_f64); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 228, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
+0229:     col_target_t.col_target_column_str,
  __pyx_t_15 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_column_str); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 229, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
+0230:     col_target_t.col_target_column_ts)
  __pyx_t_19 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_column_ts); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 230, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
 0231: 
 0232: 
 0233: # Targets that map directly from a meta target.
 0234: cdef set _DIRECT_META_TARGETS = {
+0235:     col_target_t.col_target_table,
  __pyx_t_18 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_table); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
+0236:     col_target_t.col_target_symbol,
  __pyx_t_19 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_symbol); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 236, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
+0237:     col_target_t.col_target_at,
  __pyx_t_15 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_e_7questdb_7ingress_col_target_at); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_3 = PySet_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PySet_Add(__pyx_t_3, __pyx_t_18) < 0) __PYX_ERR(1, 235, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  if (PySet_Add(__pyx_t_3, __pyx_t_19) < 0) __PYX_ERR(1, 235, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  if (PySet_Add(__pyx_t_3, __pyx_t_15) < 0) __PYX_ERR(1, 235, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__DIRECT_META_TARGETS);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__DIRECT_META_TARGETS, ((PyObject*)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;
 0238: }
 0239: 
 0240: 
 0241: # This is verbose, but..
 0242: #   * Enums give us constants.
 0243: #   * Constants allow unfolding `if` statements into `switch`
 0244: #   * Switch statements can be more heavily optimized by the C compiler.
+0245: cdef enum col_dispatch_code_t:
enum __pyx_t_7questdb_7ingress_col_dispatch_code_t {
 0246:     col_dispatch_code_skip_nulls = \
 0247:         col_target_t.col_target_skip + col_source_t.col_source_nulls
 0248: 
 0249:     col_dispatch_code_table__str_pyobj = \
 0250:         col_target_t.col_target_table + col_source_t.col_source_str_pyobj
 0251:     col_dispatch_code_table__str_utf8_arrow = \
 0252:         col_target_t.col_target_table + col_source_t.col_source_str_utf8_arrow
 0253:     col_dispatch_code_table__str_lrg_utf8_arrow = \
 0254:         col_target_t.col_target_table + col_source_t.col_source_str_lrg_utf8_arrow
 0255:     col_dispatch_code_table__str_i8_cat = \
 0256:         col_target_t.col_target_table + col_source_t.col_source_str_i8_cat
 0257:     col_dispatch_code_table__str_i16_cat = \
 0258:         col_target_t.col_target_table + col_source_t.col_source_str_i16_cat
 0259:     col_dispatch_code_table__str_i32_cat = \
 0260:         col_target_t.col_target_table + col_source_t.col_source_str_i32_cat
 0261: 
 0262:     col_dispatch_code_symbol__str_pyobj = \
 0263:         col_target_t.col_target_symbol + col_source_t.col_source_str_pyobj
 0264:     col_dispatch_code_symbol__str_utf8_arrow = \
 0265:         col_target_t.col_target_symbol + col_source_t.col_source_str_utf8_arrow
 0266:     col_dispatch_code_symbol__str_lrg_utf8_arrow = \
 0267:         col_target_t.col_target_symbol + col_source_t.col_source_str_lrg_utf8_arrow
 0268:     col_dispatch_code_symbol__str_i8_cat = \
 0269:         col_target_t.col_target_symbol + col_source_t.col_source_str_i8_cat
 0270:     col_dispatch_code_symbol__str_i16_cat = \
 0271:         col_target_t.col_target_symbol + col_source_t.col_source_str_i16_cat
 0272:     col_dispatch_code_symbol__str_i32_cat = \
 0273:         col_target_t.col_target_symbol + col_source_t.col_source_str_i32_cat
 0274: 
 0275:     col_dispatch_code_column_bool__bool_pyobj = \
 0276:         col_target_t.col_target_column_bool + col_source_t.col_source_bool_pyobj
 0277:     col_dispatch_code_column_bool__bool_numpy = \
 0278:         col_target_t.col_target_column_bool + col_source_t.col_source_bool_numpy
 0279:     col_dispatch_code_column_bool__bool_arrow = \
 0280:         col_target_t.col_target_column_bool + col_source_t.col_source_bool_arrow
 0281: 
 0282:     col_dispatch_code_column_i64__int_pyobj = \
 0283:         col_target_t.col_target_column_i64 + col_source_t.col_source_int_pyobj
 0284:     col_dispatch_code_column_i64__u8_numpy = \
 0285:         col_target_t.col_target_column_i64 + col_source_t.col_source_u8_numpy
 0286:     col_dispatch_code_column_i64__i8_numpy = \
 0287:         col_target_t.col_target_column_i64 + col_source_t.col_source_i8_numpy
 0288:     col_dispatch_code_column_i64__u16_numpy = \
 0289:         col_target_t.col_target_column_i64 + col_source_t.col_source_u16_numpy
 0290:     col_dispatch_code_column_i64__i16_numpy = \
 0291:         col_target_t.col_target_column_i64 + col_source_t.col_source_i16_numpy
 0292:     col_dispatch_code_column_i64__u32_numpy = \
 0293:         col_target_t.col_target_column_i64 + col_source_t.col_source_u32_numpy
 0294:     col_dispatch_code_column_i64__i32_numpy = \
 0295:         col_target_t.col_target_column_i64 + col_source_t.col_source_i32_numpy
 0296:     col_dispatch_code_column_i64__u64_numpy = \
 0297:         col_target_t.col_target_column_i64 + col_source_t.col_source_u64_numpy
 0298:     col_dispatch_code_column_i64__i64_numpy = \
 0299:         col_target_t.col_target_column_i64 + col_source_t.col_source_i64_numpy
 0300:     col_dispatch_code_column_i64__u8_arrow = \
 0301:         col_target_t.col_target_column_i64 + col_source_t.col_source_u8_arrow
 0302:     col_dispatch_code_column_i64__i8_arrow = \
 0303:         col_target_t.col_target_column_i64 + col_source_t.col_source_i8_arrow
 0304:     col_dispatch_code_column_i64__u16_arrow = \
 0305:         col_target_t.col_target_column_i64 + col_source_t.col_source_u16_arrow
 0306:     col_dispatch_code_column_i64__i16_arrow = \
 0307:         col_target_t.col_target_column_i64 + col_source_t.col_source_i16_arrow
 0308:     col_dispatch_code_column_i64__u32_arrow = \
 0309:         col_target_t.col_target_column_i64 + col_source_t.col_source_u32_arrow
 0310:     col_dispatch_code_column_i64__i32_arrow = \
 0311:         col_target_t.col_target_column_i64 + col_source_t.col_source_i32_arrow
 0312:     col_dispatch_code_column_i64__u64_arrow = \
 0313:         col_target_t.col_target_column_i64 + col_source_t.col_source_u64_arrow
 0314:     col_dispatch_code_column_i64__i64_arrow = \
 0315:         col_target_t.col_target_column_i64 + col_source_t.col_source_i64_arrow
 0316: 
 0317:     col_dispatch_code_column_f64__float_pyobj = \
 0318:         col_target_t.col_target_column_f64 + col_source_t.col_source_float_pyobj
 0319:     col_dispatch_code_column_f64__f32_numpy = \
 0320:         col_target_t.col_target_column_f64 + col_source_t.col_source_f32_numpy
 0321:     col_dispatch_code_column_f64__f64_numpy = \
 0322:         col_target_t.col_target_column_f64 + col_source_t.col_source_f64_numpy
 0323:     col_dispatch_code_column_f64__f32_arrow = \
 0324:         col_target_t.col_target_column_f64 + col_source_t.col_source_f32_arrow
 0325:     col_dispatch_code_column_f64__f64_arrow = \
 0326:         col_target_t.col_target_column_f64 + col_source_t.col_source_f64_arrow
 0327: 
 0328:     col_dispatch_code_column_str__str_pyobj = \
 0329:         col_target_t.col_target_column_str + col_source_t.col_source_str_pyobj
 0330:     col_dispatch_code_column_str__str_utf8_arrow = \
 0331:         col_target_t.col_target_column_str + col_source_t.col_source_str_utf8_arrow
 0332:     col_dispatch_code_column_str__str_lrg_utf8_arrow = \
 0333:         col_target_t.col_target_column_str + col_source_t.col_source_str_lrg_utf8_arrow
 0334:     col_dispatch_code_column_str__str_i8_cat = \
 0335:         col_target_t.col_target_column_str + col_source_t.col_source_str_i8_cat
 0336:     col_dispatch_code_column_str__str_i16_cat = \
 0337:         col_target_t.col_target_column_str + col_source_t.col_source_str_i16_cat
 0338:     col_dispatch_code_column_str__str_i32_cat = \
 0339:         col_target_t.col_target_column_str + col_source_t.col_source_str_i32_cat
 0340: 
 0341:     col_dispatch_code_column_ts__dt64ns_numpy = \
 0342:         col_target_t.col_target_column_ts + col_source_t.col_source_dt64ns_numpy
 0343:     col_dispatch_code_column_ts__dt64ns_tz_arrow = \
 0344:         col_target_t.col_target_column_ts + \
 0345:         col_source_t.col_source_dt64ns_tz_arrow
 0346: 
 0347:     col_dispatch_code_at__dt64ns_numpy = \
 0348:         col_target_t.col_target_at + col_source_t.col_source_dt64ns_numpy
 0349:     col_dispatch_code_at__dt64ns_tz_arrow = \
+0350:         col_target_t.col_target_at + col_source_t.col_source_dt64ns_tz_arrow
  __pyx_e_7questdb_7ingress_col_dispatch_code_skip_nulls = (__pyx_e_7questdb_7ingress_col_target_skip + __pyx_e_7questdb_7ingress_col_source_nulls),
  __pyx_e_7questdb_7ingress_col_dispatch_code_table__str_pyobj = (__pyx_e_7questdb_7ingress_col_target_table + __pyx_e_7questdb_7ingress_col_source_str_pyobj),
  __pyx_e_7questdb_7ingress_col_dispatch_code_table__str_utf8_arrow = (__pyx_e_7questdb_7ingress_col_target_table + __pyx_e_7questdb_7ingress_col_source_str_utf8_arrow),
  __pyx_e_7questdb_7ingress_col_dispatch_code_table__str_lrg_utf8_arrow = (__pyx_e_7questdb_7ingress_col_target_table + __pyx_e_7questdb_7ingress_col_source_str_lrg_utf8_arrow),
  __pyx_e_7questdb_7ingress_col_dispatch_code_table__str_i8_cat = (__pyx_e_7questdb_7ingress_col_target_table + __pyx_e_7questdb_7ingress_col_source_str_i8_cat),
  __pyx_e_7questdb_7ingress_col_dispatch_code_table__str_i16_cat = (__pyx_e_7questdb_7ingress_col_target_table + __pyx_e_7questdb_7ingress_col_source_str_i16_cat),
  __pyx_e_7questdb_7ingress_col_dispatch_code_table__str_i32_cat = (__pyx_e_7questdb_7ingress_col_target_table + __pyx_e_7questdb_7ingress_col_source_str_i32_cat),
  __pyx_e_7questdb_7ingress_col_dispatch_code_symbol__str_pyobj = (__pyx_e_7questdb_7ingress_col_target_symbol + __pyx_e_7questdb_7ingress_col_source_str_pyobj),
  __pyx_e_7questdb_7ingress_col_dispatch_code_symbol__str_utf8_arrow = (__pyx_e_7questdb_7ingress_col_target_symbol + __pyx_e_7questdb_7ingress_col_source_str_utf8_arrow),
  __pyx_e_7questdb_7ingress_col_dispatch_code_symbol__str_lrg_utf8_arrow = (__pyx_e_7questdb_7ingress_col_target_symbol + __pyx_e_7questdb_7ingress_col_source_str_lrg_utf8_arrow),
  __pyx_e_7questdb_7ingress_col_dispatch_code_symbol__str_i8_cat = (__pyx_e_7questdb_7ingress_col_target_symbol + __pyx_e_7questdb_7ingress_col_source_str_i8_cat),
  __pyx_e_7questdb_7ingress_col_dispatch_code_symbol__str_i16_cat = (__pyx_e_7questdb_7ingress_col_target_symbol + __pyx_e_7questdb_7ingress_col_source_str_i16_cat),
  __pyx_e_7questdb_7ingress_col_dispatch_code_symbol__str_i32_cat = (__pyx_e_7questdb_7ingress_col_target_symbol + __pyx_e_7questdb_7ingress_col_source_str_i32_cat),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_bool__bool_pyobj = (__pyx_e_7questdb_7ingress_col_target_column_bool + __pyx_e_7questdb_7ingress_col_source_bool_pyobj),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_bool__bool_numpy = (__pyx_e_7questdb_7ingress_col_target_column_bool + __pyx_e_7questdb_7ingress_col_source_bool_numpy),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_bool__bool_arrow = (__pyx_e_7questdb_7ingress_col_target_column_bool + __pyx_e_7questdb_7ingress_col_source_bool_arrow),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__int_pyobj = (__pyx_e_7questdb_7ingress_col_target_column_i64 + __pyx_e_7questdb_7ingress_col_source_int_pyobj),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__u8_numpy = (__pyx_e_7questdb_7ingress_col_target_column_i64 + __pyx_e_7questdb_7ingress_col_source_u8_numpy),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__i8_numpy = (__pyx_e_7questdb_7ingress_col_target_column_i64 + __pyx_e_7questdb_7ingress_col_source_i8_numpy),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__u16_numpy = (__pyx_e_7questdb_7ingress_col_target_column_i64 + __pyx_e_7questdb_7ingress_col_source_u16_numpy),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__i16_numpy = (__pyx_e_7questdb_7ingress_col_target_column_i64 + __pyx_e_7questdb_7ingress_col_source_i16_numpy),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__u32_numpy = (__pyx_e_7questdb_7ingress_col_target_column_i64 + __pyx_e_7questdb_7ingress_col_source_u32_numpy),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__i32_numpy = (__pyx_e_7questdb_7ingress_col_target_column_i64 + __pyx_e_7questdb_7ingress_col_source_i32_numpy),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__u64_numpy = (__pyx_e_7questdb_7ingress_col_target_column_i64 + __pyx_e_7questdb_7ingress_col_source_u64_numpy),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__i64_numpy = (__pyx_e_7questdb_7ingress_col_target_column_i64 + __pyx_e_7questdb_7ingress_col_source_i64_numpy),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__u8_arrow = (__pyx_e_7questdb_7ingress_col_target_column_i64 + __pyx_e_7questdb_7ingress_col_source_u8_arrow),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__i8_arrow = (__pyx_e_7questdb_7ingress_col_target_column_i64 + __pyx_e_7questdb_7ingress_col_source_i8_arrow),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__u16_arrow = (__pyx_e_7questdb_7ingress_col_target_column_i64 + __pyx_e_7questdb_7ingress_col_source_u16_arrow),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__i16_arrow = (__pyx_e_7questdb_7ingress_col_target_column_i64 + __pyx_e_7questdb_7ingress_col_source_i16_arrow),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__u32_arrow = (__pyx_e_7questdb_7ingress_col_target_column_i64 + __pyx_e_7questdb_7ingress_col_source_u32_arrow),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__i32_arrow = (__pyx_e_7questdb_7ingress_col_target_column_i64 + __pyx_e_7questdb_7ingress_col_source_i32_arrow),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__u64_arrow = (__pyx_e_7questdb_7ingress_col_target_column_i64 + __pyx_e_7questdb_7ingress_col_source_u64_arrow),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__i64_arrow = (__pyx_e_7questdb_7ingress_col_target_column_i64 + __pyx_e_7questdb_7ingress_col_source_i64_arrow),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_f64__float_pyobj = (__pyx_e_7questdb_7ingress_col_target_column_f64 + __pyx_e_7questdb_7ingress_col_source_float_pyobj),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_f64__f32_numpy = (__pyx_e_7questdb_7ingress_col_target_column_f64 + __pyx_e_7questdb_7ingress_col_source_f32_numpy),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_f64__f64_numpy = (__pyx_e_7questdb_7ingress_col_target_column_f64 + __pyx_e_7questdb_7ingress_col_source_f64_numpy),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_f64__f32_arrow = (__pyx_e_7questdb_7ingress_col_target_column_f64 + __pyx_e_7questdb_7ingress_col_source_f32_arrow),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_f64__f64_arrow = (__pyx_e_7questdb_7ingress_col_target_column_f64 + __pyx_e_7questdb_7ingress_col_source_f64_arrow),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_str__str_pyobj = (__pyx_e_7questdb_7ingress_col_target_column_str + __pyx_e_7questdb_7ingress_col_source_str_pyobj),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_str__str_utf8_arrow = (__pyx_e_7questdb_7ingress_col_target_column_str + __pyx_e_7questdb_7ingress_col_source_str_utf8_arrow),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_str__str_lrg_utf8_arrow = (__pyx_e_7questdb_7ingress_col_target_column_str + __pyx_e_7questdb_7ingress_col_source_str_lrg_utf8_arrow),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_str__str_i8_cat = (__pyx_e_7questdb_7ingress_col_target_column_str + __pyx_e_7questdb_7ingress_col_source_str_i8_cat),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_str__str_i16_cat = (__pyx_e_7questdb_7ingress_col_target_column_str + __pyx_e_7questdb_7ingress_col_source_str_i16_cat),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_str__str_i32_cat = (__pyx_e_7questdb_7ingress_col_target_column_str + __pyx_e_7questdb_7ingress_col_source_str_i32_cat),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_ts__dt64ns_numpy = (__pyx_e_7questdb_7ingress_col_target_column_ts + __pyx_e_7questdb_7ingress_col_source_dt64ns_numpy),
  __pyx_e_7questdb_7ingress_col_dispatch_code_column_ts__dt64ns_tz_arrow = (__pyx_e_7questdb_7ingress_col_target_column_ts + __pyx_e_7questdb_7ingress_col_source_dt64ns_tz_arrow),
  __pyx_e_7questdb_7ingress_col_dispatch_code_at__dt64ns_numpy = (__pyx_e_7questdb_7ingress_col_target_at + __pyx_e_7questdb_7ingress_col_source_dt64ns_numpy),
  __pyx_e_7questdb_7ingress_col_dispatch_code_at__dt64ns_tz_arrow = (__pyx_e_7questdb_7ingress_col_target_at + __pyx_e_7questdb_7ingress_col_source_dt64ns_tz_arrow)
};
 0351: 
 0352: 
 0353: # Int values in order for sorting (as needed for API's sequential coupling).
+0354: cdef enum meta_target_t:
enum __pyx_t_7questdb_7ingress_meta_target_t {
 0355:     meta_target_table = <int>col_target_t.col_target_table
 0356:     meta_target_symbol = <int>col_target_t.col_target_symbol
 0357:     meta_target_field = <int>col_target_t.col_target_column_bool
+0358:     meta_target_at = <int>col_target_t.col_target_at
  __pyx_e_7questdb_7ingress_meta_target_table = ((int)__pyx_e_7questdb_7ingress_col_target_table),
  __pyx_e_7questdb_7ingress_meta_target_symbol = ((int)__pyx_e_7questdb_7ingress_col_target_symbol),
  __pyx_e_7questdb_7ingress_meta_target_field = ((int)__pyx_e_7questdb_7ingress_col_target_column_bool),
  __pyx_e_7questdb_7ingress_meta_target_at = ((int)__pyx_e_7questdb_7ingress_col_target_at)
};
 0359: 
 0360: 
+0361: cdef struct col_setup_t:
struct __pyx_t_7questdb_7ingress_col_setup_t {
  struct __pyx_t_7questdb_7ingress_col_chunks_t chunks;
  size_t orig_index;
  Py_buffer pybuf;
  struct ArrowSchema arrow_schema;
  enum __pyx_t_7questdb_7ingress_col_source_t source;
  enum __pyx_t_7questdb_7ingress_meta_target_t meta_target;
  enum __pyx_t_7questdb_7ingress_col_target_t target;
};
 0362:     col_chunks_t chunks
 0363:     size_t orig_index
 0364:     Py_buffer pybuf
 0365:     ArrowSchema arrow_schema  # Schema of first chunk.
 0366:     col_source_t source
 0367:     meta_target_t meta_target
 0368:     col_target_t target
 0369: 
 0370: 
+0371: cdef struct col_t:
struct __pyx_t_7questdb_7ingress_col_t {
  enum __pyx_t_7questdb_7ingress_col_dispatch_code_t dispatch_code;
  struct line_sender_column_name name;
  struct __pyx_t_7questdb_7ingress_col_cursor_t cursor;
  struct __pyx_t_7questdb_7ingress_col_setup_t *setup;
};
 0372:     col_dispatch_code_t dispatch_code  # source + target. Determines serializer.
 0373:     line_sender_column_name name
 0374:     col_cursor_t cursor
 0375:     col_setup_t* setup  # Grouping to reduce size of struct.
 0376: 
 0377: 
+0378: cdef void col_t_release(col_t* col) noexcept:
static void __pyx_f_7questdb_7ingress_col_t_release(struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col) {
  size_t __pyx_v_chunk_index;
  struct ArrowArray *__pyx_v_chunk;
/* … */
  /* function exit code */
}
 0379:     """
 0380:     Release a (possibly) initialized column.
 0381: 
 0382:     col_t objects are `calloc`ed, so uninitialized (or partially) initialized
 0383:     objects will have their pointers and other values set to 0.
 0384:     """
 0385:     cdef size_t chunk_index
 0386:     cdef ArrowArray* chunk
 0387: 
+0388:     if Py_buffer_obj_is_set(&col.setup.pybuf):
  __pyx_t_1 = Py_buffer_obj_is_set((&__pyx_v_col->setup->pybuf));
  if (__pyx_t_1) {
/* … */
  }
+0389:         PyBuffer_Release(&col.setup.pybuf)  # Note: Sets `.pybuf.obj` to NULL.
    PyBuffer_Release((&__pyx_v_col->setup->pybuf));
 0390: 
+0391:     for chunk_index in range(col.setup.chunks.n_chunks):
  __pyx_t_2 = __pyx_v_col->setup->chunks.n_chunks;
  __pyx_t_3 = __pyx_t_2;
  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
    __pyx_v_chunk_index = __pyx_t_4;
+0392:         chunk = &col.setup.chunks.chunks[chunk_index]
    __pyx_v_chunk = (&(__pyx_v_col->setup->chunks.chunks[__pyx_v_chunk_index]));
+0393:         if chunk.release != NULL:
    __pyx_t_1 = (__pyx_v_chunk->release != NULL);
    if (__pyx_t_1) {
/* … */
    }
+0394:             chunk.release(chunk)
      __pyx_v_chunk->release(__pyx_v_chunk);
+0395:         memset(chunk, 0, sizeof(ArrowArray))
    (void)(memset(__pyx_v_chunk, 0, (sizeof(struct ArrowArray))));
  }
 0396: 
+0397:     if col.setup.arrow_schema.release != NULL:
  __pyx_t_1 = (__pyx_v_col->setup->arrow_schema.release != NULL);
  if (__pyx_t_1) {
/* … */
  }
+0398:         col.setup.arrow_schema.release(&col.setup.arrow_schema)
    __pyx_v_col->setup->arrow_schema.release((&__pyx_v_col->setup->arrow_schema));
 0399: 
+0400:     free(col.setup.chunks.chunks)
  free(__pyx_v_col->setup->chunks.chunks);
+0401:     col.setup.chunks.chunks = NULL
  __pyx_v_col->setup->chunks.chunks = NULL;
+0402:     col.setup.chunks.n_chunks = 0
  __pyx_v_col->setup->chunks.n_chunks = 0;
 0403: 
+0404:     free(col.setup)
  free(__pyx_v_col->setup);
+0405:     col.setup = NULL
  __pyx_v_col->setup = NULL;
 0406: 
 0407: 
 0408: # Calloc'd array of col_t.
+0409: cdef struct col_t_arr:
struct __pyx_t_7questdb_7ingress_col_t_arr {
  size_t size;
  struct __pyx_t_7questdb_7ingress_col_t *d;
};
 0410:     size_t size
 0411:     col_t* d
 0412: 
 0413: 
+0414: cdef col_t_arr col_t_arr_blank() noexcept nogil:
static struct __pyx_t_7questdb_7ingress_col_t_arr __pyx_f_7questdb_7ingress_col_t_arr_blank(void) {
  struct __pyx_t_7questdb_7ingress_col_t_arr __pyx_v_arr;
  struct __pyx_t_7questdb_7ingress_col_t_arr __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0415:     cdef col_t_arr arr
+0416:     arr.size = 0
  __pyx_v_arr.size = 0;
+0417:     arr.d = NULL
  __pyx_v_arr.d = NULL;
+0418:     return arr
  __pyx_r = __pyx_v_arr;
  goto __pyx_L0;
 0419: 
 0420: 
+0421: cdef col_t_arr col_t_arr_new(size_t size) noexcept nogil:
static struct __pyx_t_7questdb_7ingress_col_t_arr __pyx_f_7questdb_7ingress_col_t_arr_new(size_t __pyx_v_size) {
  struct __pyx_t_7questdb_7ingress_col_t_arr __pyx_v_arr;
  size_t __pyx_v_index;
  struct __pyx_t_7questdb_7ingress_col_t_arr __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0422:     cdef col_t_arr arr
 0423:     cdef size_t index
+0424:     arr.size = size
  __pyx_v_arr.size = __pyx_v_size;
+0425:     arr.d = <col_t*>calloc(size, sizeof(col_t))
  __pyx_v_arr.d = ((struct __pyx_t_7questdb_7ingress_col_t *)calloc(__pyx_v_size, (sizeof(struct __pyx_t_7questdb_7ingress_col_t))));
+0426:     for index in range(size):
  __pyx_t_1 = __pyx_v_size;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_index = __pyx_t_3;
+0427:         arr.d[index].setup = <col_setup_t*>calloc(1, sizeof(col_setup_t))
    (__pyx_v_arr.d[__pyx_v_index]).setup = ((struct __pyx_t_7questdb_7ingress_col_setup_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7ingress_col_setup_t))));
  }
+0428:     return arr
  __pyx_r = __pyx_v_arr;
  goto __pyx_L0;
 0429: 
 0430: 
+0431: cdef void col_t_arr_release(col_t_arr* arr) noexcept:
static void __pyx_f_7questdb_7ingress_col_t_arr_release(struct __pyx_t_7questdb_7ingress_col_t_arr *__pyx_v_arr) {
  size_t __pyx_v_index;
/* … */
  /* function exit code */
}
 0432:     cdef size_t index
+0433:     if arr.d:
  __pyx_t_1 = (__pyx_v_arr->d != 0);
  if (__pyx_t_1) {
/* … */
  }
+0434:         for index in range(arr.size):
    __pyx_t_2 = __pyx_v_arr->size;
    __pyx_t_3 = __pyx_t_2;
    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
      __pyx_v_index = __pyx_t_4;
+0435:             col_t_release(&arr.d[index])
      __pyx_f_7questdb_7ingress_col_t_release((&(__pyx_v_arr->d[__pyx_v_index])));
    }
+0436:         free(arr.d)
    free(__pyx_v_arr->d);
+0437:         arr.size = 0
    __pyx_v_arr->size = 0;
+0438:         arr.d = NULL
    __pyx_v_arr->d = NULL;
 0439: 
 0440: 
+0441: cdef object _NUMPY = None  # module object
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY, Py_None);
  __Pyx_GIVEREF(Py_None);
+0442: cdef object _NUMPY_BOOL = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_BOOL);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_BOOL, Py_None);
  __Pyx_GIVEREF(Py_None);
+0443: cdef object _NUMPY_UINT8 = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_UINT8);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_UINT8, Py_None);
  __Pyx_GIVEREF(Py_None);
+0444: cdef object _NUMPY_INT8 = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_INT8);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_INT8, Py_None);
  __Pyx_GIVEREF(Py_None);
+0445: cdef object _NUMPY_UINT16 = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_UINT16);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_UINT16, Py_None);
  __Pyx_GIVEREF(Py_None);
+0446: cdef object _NUMPY_INT16 = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_INT16);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_INT16, Py_None);
  __Pyx_GIVEREF(Py_None);
+0447: cdef object _NUMPY_UINT32 = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_UINT32);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_UINT32, Py_None);
  __Pyx_GIVEREF(Py_None);
+0448: cdef object _NUMPY_INT32 = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_INT32);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_INT32, Py_None);
  __Pyx_GIVEREF(Py_None);
+0449: cdef object _NUMPY_UINT64 = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_UINT64);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_UINT64, Py_None);
  __Pyx_GIVEREF(Py_None);
+0450: cdef object _NUMPY_INT64 = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_INT64);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_INT64, Py_None);
  __Pyx_GIVEREF(Py_None);
+0451: cdef object _NUMPY_FLOAT32 = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_FLOAT32);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_FLOAT32, Py_None);
  __Pyx_GIVEREF(Py_None);
+0452: cdef object _NUMPY_FLOAT64 = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_FLOAT64);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_FLOAT64, Py_None);
  __Pyx_GIVEREF(Py_None);
+0453: cdef object _NUMPY_DATETIME64_NS = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_DATETIME64_NS);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_DATETIME64_NS, Py_None);
  __Pyx_GIVEREF(Py_None);
+0454: cdef object _NUMPY_OBJECT = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_OBJECT);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_OBJECT, Py_None);
  __Pyx_GIVEREF(Py_None);
+0455: cdef object _PANDAS = None  # module object
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__PANDAS);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__PANDAS, Py_None);
  __Pyx_GIVEREF(Py_None);
+0456: cdef object _PANDAS_NA = None  # pandas.NA
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__PANDAS_NA);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__PANDAS_NA, Py_None);
  __Pyx_GIVEREF(Py_None);
+0457: cdef object _PYARROW = None  # module object, if available or None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__PYARROW);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__PYARROW, Py_None);
  __Pyx_GIVEREF(Py_None);
 0458: 
+0459: cdef int64_t _NAT = INT64_MIN  # pandas NaT
  __pyx_v_7questdb_7ingress__NAT = INT64_MIN;
 0460: 
 0461: 
+0462: cdef object _dataframe_may_import_deps():
static PyObject *__pyx_f_7questdb_7ingress__dataframe_may_import_deps(void) {
  PyObject *__pyx_v_pandas = NULL;
  PyObject *__pyx_v_numpy = NULL;
  PyObject *__pyx_v_pyarrow = NULL;
  PyObject *__pyx_v_ie = 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_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb.ingress._dataframe_may_import_deps", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_pandas);
  __Pyx_XDECREF(__pyx_v_numpy);
  __Pyx_XDECREF(__pyx_v_pyarrow);
  __Pyx_XDECREF(__pyx_v_ie);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0463:     """"
 0464:     Lazily import module dependencies on first use to avoid startup overhead.
 0465: 
 0466:     $ cat imp_test.py
 0467:     import numpy
 0468:     import pandas
 0469:     import pyarrow
 0470: 
 0471:     $ time python3 ./imp_test.py
 0472:     python3 ./imp_test.py  0.56s user 1.60s system 852% cpu 0.254 total
 0473:     """
 0474:     global _NUMPY, _PANDAS, _PYARROW, _PANDAS_NA
 0475:     global _NUMPY_BOOL
 0476:     global _NUMPY_UINT8
 0477:     global _NUMPY_INT8
 0478:     global _NUMPY_UINT16
 0479:     global _NUMPY_INT16
 0480:     global _NUMPY_UINT32
 0481:     global _NUMPY_INT32
 0482:     global _NUMPY_UINT64
 0483:     global _NUMPY_INT64
 0484:     global _NUMPY_FLOAT32
 0485:     global _NUMPY_FLOAT64
 0486:     global _NUMPY_DATETIME64_NS
 0487:     global _NUMPY_OBJECT
+0488:     if _NUMPY is not None:
  __pyx_t_1 = (__pyx_v_7questdb_7ingress__NUMPY != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0489:         return
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+0490:     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_L9_try_end:;
  }
+0491:         import pandas
      __pyx_t_5 = __Pyx_ImportDottedModule(__pyx_n_s_pandas, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 491, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_v_pandas = __pyx_t_5;
      __pyx_t_5 = 0;
+0492:         import numpy
      __pyx_t_5 = __Pyx_ImportDottedModule(__pyx_n_s_numpy, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 492, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_v_numpy = __pyx_t_5;
      __pyx_t_5 = 0;
+0493:         import pyarrow
      __pyx_t_5 = __Pyx_ImportDottedModule(__pyx_n_s_pyarrow, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 493, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_v_pyarrow = __pyx_t_5;
      __pyx_t_5 = 0;
+0494:     except ImportError as ie:
    __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError);
    if (__pyx_t_6) {
      __Pyx_AddTraceback("questdb.ingress._dataframe_may_import_deps", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_7, &__pyx_t_8) < 0) __PYX_ERR(1, 494, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_7);
      __pyx_v_ie = __pyx_t_7;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L15_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_9); __pyx_t_9 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
          if ((PY_MAJOR_VERSION < 3) || 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_6 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_11 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_ie); __pyx_v_ie = 0;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __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_6; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_11;
          goto __pyx_L6_except_error;
        }
      }
    }
    goto __pyx_L6_except_error;
+0495:         raise ImportError(
        __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 495, __pyx_L15_error)
        __Pyx_GOTREF(__pyx_t_9);
/* … */
  __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_u_Missing_dependencies_pandas_nump); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(1, 495, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__3);
  __Pyx_GIVEREF(__pyx_tuple__3);
 0496:             'Missing dependencies: `pandas`, `numpy` and `pyarrow` must all ' +
 0497:             'be installed to use the `.dataframe()` method. ' +
 0498:             'See: https://py-questdb-client.readthedocs.io/' +
+0499:             'en/latest/installation.html.') from ie
        __Pyx_Raise(__pyx_t_9, 0, 0, __pyx_v_ie);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __PYX_ERR(1, 495, __pyx_L15_error)
      }
+0500:     _NUMPY = numpy
  __Pyx_INCREF(__pyx_v_numpy);
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY, __pyx_v_numpy);
  __Pyx_GIVEREF(__pyx_v_numpy);
+0501:     _NUMPY_BOOL = type(_NUMPY.dtype('bool'))
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__NUMPY, __pyx_n_s_dtype); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = NULL;
  __pyx_t_10 = 0;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_10 = 1;
    }
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_n_u_bool};
    __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 501, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_BOOL);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_BOOL, ((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_GIVEREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0502:     _NUMPY_UINT8 = type(_NUMPY.dtype('uint8'))
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__NUMPY, __pyx_n_s_dtype); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 502, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = NULL;
  __pyx_t_10 = 0;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_10 = 1;
    }
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_n_u_uint8};
    __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 502, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_UINT8);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_UINT8, ((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_GIVEREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0503:     _NUMPY_INT8 = type(_NUMPY.dtype('int8'))
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__NUMPY, __pyx_n_s_dtype); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 503, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = NULL;
  __pyx_t_10 = 0;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_10 = 1;
    }
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_n_u_int8};
    __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 503, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_INT8);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_INT8, ((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_GIVEREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0504:     _NUMPY_UINT16 = type(_NUMPY.dtype('uint16'))
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__NUMPY, __pyx_n_s_dtype); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 504, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = NULL;
  __pyx_t_10 = 0;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_10 = 1;
    }
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_n_u_uint16};
    __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 504, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_UINT16);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_UINT16, ((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_GIVEREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0505:     _NUMPY_INT16 = type(_NUMPY.dtype('int16'))
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__NUMPY, __pyx_n_s_dtype); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 505, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = NULL;
  __pyx_t_10 = 0;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_10 = 1;
    }
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_n_u_int16};
    __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 505, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_INT16);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_INT16, ((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_GIVEREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0506:     _NUMPY_UINT32 = type(_NUMPY.dtype('uint32'))
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__NUMPY, __pyx_n_s_dtype); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 506, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = NULL;
  __pyx_t_10 = 0;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_10 = 1;
    }
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_n_u_uint32};
    __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 506, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_UINT32);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_UINT32, ((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_GIVEREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0507:     _NUMPY_INT32 = type(_NUMPY.dtype('int32'))
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__NUMPY, __pyx_n_s_dtype); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = NULL;
  __pyx_t_10 = 0;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_10 = 1;
    }
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_n_u_int32};
    __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 507, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_INT32);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_INT32, ((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_GIVEREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0508:     _NUMPY_UINT64 = type(_NUMPY.dtype('uint64'))
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__NUMPY, __pyx_n_s_dtype); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 508, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = NULL;
  __pyx_t_10 = 0;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_10 = 1;
    }
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_n_u_uint64};
    __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 508, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_UINT64);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_UINT64, ((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_GIVEREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0509:     _NUMPY_INT64 = type(_NUMPY.dtype('int64'))
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__NUMPY, __pyx_n_s_dtype); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 509, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = NULL;
  __pyx_t_10 = 0;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_10 = 1;
    }
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_n_u_int64};
    __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 509, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_INT64);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_INT64, ((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_GIVEREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0510:     _NUMPY_FLOAT32 = type(_NUMPY.dtype('float32'))
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__NUMPY, __pyx_n_s_dtype); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = NULL;
  __pyx_t_10 = 0;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_10 = 1;
    }
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_n_u_float32};
    __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 510, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_FLOAT32);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_FLOAT32, ((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_GIVEREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0511:     _NUMPY_FLOAT64 = type(_NUMPY.dtype('float64'))
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__NUMPY, __pyx_n_s_dtype); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = NULL;
  __pyx_t_10 = 0;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_10 = 1;
    }
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_n_u_float64};
    __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 511, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_FLOAT64);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_FLOAT64, ((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_GIVEREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0512:     _NUMPY_DATETIME64_NS = type(_NUMPY.dtype('datetime64[ns]'))
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__NUMPY, __pyx_n_s_dtype); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 512, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = NULL;
  __pyx_t_10 = 0;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_10 = 1;
    }
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_kp_u_datetime64_ns};
    __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 512, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_DATETIME64_NS);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_DATETIME64_NS, ((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_GIVEREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0513:     _NUMPY_OBJECT = type(_NUMPY.dtype('object'))
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__NUMPY, __pyx_n_s_dtype); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 513, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = NULL;
  __pyx_t_10 = 0;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_10 = 1;
    }
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_n_u_object};
    __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 513, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__NUMPY_OBJECT);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__NUMPY_OBJECT, ((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_GIVEREF(((PyObject *)Py_TYPE(__pyx_t_8)));
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0514:     _PANDAS = pandas
  __Pyx_INCREF(__pyx_v_pandas);
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__PANDAS);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__PANDAS, __pyx_v_pandas);
  __Pyx_GIVEREF(__pyx_v_pandas);
+0515:     _PANDAS_NA = pandas.NA
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_pandas, __pyx_n_s_NA); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__PANDAS_NA);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__PANDAS_NA, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_8);
  __pyx_t_8 = 0;
+0516:     _PYARROW = pyarrow
  __Pyx_INCREF(__pyx_v_pyarrow);
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__PYARROW);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__PYARROW, __pyx_v_pyarrow);
  __Pyx_GIVEREF(__pyx_v_pyarrow);
 0517: 
 0518: 
+0519: cdef object _dataframe_check_is_dataframe(object df):
static PyObject *__pyx_f_7questdb_7ingress__dataframe_check_is_dataframe(PyObject *__pyx_v_df) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("questdb.ingress._dataframe_check_is_dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0520:     if not isinstance(df, _PANDAS.DataFrame):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__PANDAS, __pyx_n_s_DataFrame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 520, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_df, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 520, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (!__pyx_t_2);
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+0521:         raise IngressError(
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_IngressError); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 521, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+0522:             IngressErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_IngressErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 522, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 522, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0523:             f'Bad argument `df`: Expected {_fqn(_PANDAS.DataFrame)}, ' +
    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 523, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = 0;
    __pyx_t_8 = 127;
    __Pyx_INCREF(__pyx_kp_u_Bad_argument_df_Expected);
    __pyx_t_7 += 28;
    __Pyx_GIVEREF(__pyx_kp_u_Bad_argument_df_Expected);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_Bad_argument_df_Expected);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__PANDAS, __pyx_n_s_DataFrame); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 523, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (!(likely(PyType_CheckExact(__pyx_t_9))||((__pyx_t_9) == Py_None) || __Pyx_RaiseUnexpectedTypeError("type", __pyx_t_9))) __PYX_ERR(1, 523, __pyx_L1_error)
    __pyx_t_10 = __pyx_f_7questdb_7ingress__fqn(((PyTypeObject*)__pyx_t_9)); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 523, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyUnicode_Unicode(__pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 523, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) : __pyx_t_8;
    __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_9);
    __pyx_t_9 = 0;
    __Pyx_INCREF(__pyx_kp_u__4);
    __pyx_t_7 += 2;
    __Pyx_GIVEREF(__pyx_kp_u__4);
    PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u__4);
    __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 523, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
    __pyx_t_5 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_9, __pyx_t_11); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 523, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = NULL;
    __pyx_t_12 = 0;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_12 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_t_6, __pyx_t_5};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_12, 2+__pyx_t_12);
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 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(1, 521, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(1, 521, __pyx_L1_error)
+0524:             f'not an object of type {_fqn(type(df))}.')
    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 524, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = 0;
    __pyx_t_8 = 127;
    __Pyx_INCREF(__pyx_kp_u_not_an_object_of_type);
    __pyx_t_7 += 22;
    __Pyx_GIVEREF(__pyx_kp_u_not_an_object_of_type);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_not_an_object_of_type);
    __pyx_t_10 = __pyx_f_7questdb_7ingress__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_df)))); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 524, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_11 = __Pyx_PyUnicode_Unicode(__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 524, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11) : __pyx_t_8;
    __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_11);
    __pyx_t_11 = 0;
    __Pyx_INCREF(__pyx_kp_u__5);
    __pyx_t_7 += 1;
    __Pyx_GIVEREF(__pyx_kp_u__5);
    PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u__5);
    __pyx_t_11 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 524, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 0525: 
 0526: 
+0527: cdef ssize_t _dataframe_resolve_table_name(
static Py_ssize_t __pyx_f_7questdb_7ingress__dataframe_resolve_table_name(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_df, PyObject *__pyx_v_pandas_cols, struct __pyx_t_7questdb_7ingress_col_t_arr *__pyx_v_cols, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, size_t __pyx_v_col_count, struct line_sender_table_name *__pyx_v_name_out) {
  size_t __pyx_v_col_index;
  struct __pyx_obj_7questdb_7ingress_PandasCol *__pyx_v_pandas_col = 0;
  struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col;
  PyObject *__pyx_v_ie = NULL;
  Py_ssize_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("questdb.ingress._dataframe_resolve_table_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2L;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pandas_col);
  __Pyx_XDECREF(__pyx_v_ie);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0528:         qdb_pystr_buf* b,
 0529:         object df,
 0530:         list pandas_cols,
 0531:         col_t_arr* cols,
 0532:         object table_name,
 0533:         object table_name_col,
 0534:         size_t col_count,
 0535:         line_sender_table_name* name_out) except -2:
 0536:     """
 0537:     Resolve the table name string or column.
 0538: 
 0539:     Returns -1 if the table name is a string, otherwise the column index.
 0540:     """
+0541:     cdef size_t col_index = 0
  __pyx_v_col_index = 0;
 0542:     cdef PandasCol pandas_col
 0543:     cdef col_t* col
+0544:     if table_name is not None:
  __pyx_t_1 = (__pyx_v_table_name != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0545:         if table_name_col is not None:
    __pyx_t_1 = (__pyx_v_table_name_col != Py_None);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+0546:             raise ValueError(
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 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(1, 546, __pyx_L1_error)
/* … */
  __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_u_Can_specify_only_one_of_table_na); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(1, 546, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__6);
  __Pyx_GIVEREF(__pyx_tuple__6);
 0547:                 'Can specify only one of `table_name` or `table_name_col`.')
+0548:         if isinstance(table_name, str):
    __pyx_t_1 = PyUnicode_Check(__pyx_v_table_name); 
    if (likely(__pyx_t_1)) {
/* … */
    }
+0549:             try:
      {
        /*try:*/ {
/* … */
        }
        __pyx_L6_error:;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
        __pyx_L8_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_L10_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_L0;
      }
+0550:                 str_to_table_name_copy(b, <PyObject*>table_name, name_out)
          __pyx_t_6 = __pyx_f_7questdb_7ingress_str_to_table_name_copy(__pyx_v_b, ((PyObject *)__pyx_v_table_name), __pyx_v_name_out); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 550, __pyx_L6_error)
+0551:                 return -1  # Magic value for "no column index".
          __pyx_r = -1L;
          goto __pyx_L10_try_return;
+0552:             except IngressError as ie:
        __Pyx_ErrFetch(&__pyx_t_2, &__pyx_t_7, &__pyx_t_8);
        __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_IngressError); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 552, __pyx_L8_except_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_10 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_2, __pyx_t_9);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_ErrRestore(__pyx_t_2, __pyx_t_7, __pyx_t_8);
        __pyx_t_2 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0;
        if (__pyx_t_10) {
          __Pyx_AddTraceback("questdb.ingress._dataframe_resolve_table_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_2) < 0) __PYX_ERR(1, 552, __pyx_L8_except_error)
          __Pyx_XGOTREF(__pyx_t_8);
          __Pyx_XGOTREF(__pyx_t_7);
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_7);
          __pyx_v_ie = __pyx_t_7;
          /*try:*/ {
/* … */
          /*finally:*/ {
            __pyx_L17_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_11); __pyx_t_11 = 0;
              __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
              if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
              if ((PY_MAJOR_VERSION < 3) || 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_10 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
              {
                __Pyx_DECREF(__pyx_v_ie); __pyx_v_ie = 0;
              }
              if (PY_MAJOR_VERSION >= 3) {
                __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_10; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
              goto __pyx_L8_except_error;
            }
          }
        }
        goto __pyx_L8_except_error;
+0553:                 raise ValueError(
            __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 553, __pyx_L17_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_Raise(__pyx_t_9, 0, 0, 0);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            __PYX_ERR(1, 553, __pyx_L17_error)
          }
+0554:                     f'Bad argument `table_name`: {ie}')
            __pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_v_ie, __pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 554, __pyx_L17_error)
            __Pyx_GOTREF(__pyx_t_9);
            __pyx_t_11 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Bad_argument_table_name, __pyx_t_9); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 554, __pyx_L17_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 0555:         else:
+0556:             raise TypeError('Bad argument `table_name`: Must be str.')
    /*else*/ {
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 556, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 556, __pyx_L1_error)
    }
/* … */
  __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_u_Bad_argument_table_name_Must_be); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(1, 556, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__7);
  __Pyx_GIVEREF(__pyx_tuple__7);
+0557:     elif table_name_col is not None:
  __pyx_t_1 = (__pyx_v_table_name_col != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0558:         if isinstance(table_name_col, str):
    __pyx_t_1 = PyUnicode_Check(__pyx_v_table_name_col); 
    if (__pyx_t_1) {
/* … */
      goto __pyx_L23;
    }
+0559:             _dataframe_get_loc(df, table_name_col, 'table_name_col', &col_index)
      if (!(likely(PyUnicode_CheckExact(__pyx_v_table_name_col))||((__pyx_v_table_name_col) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_v_table_name_col))) __PYX_ERR(1, 559, __pyx_L1_error)
      __pyx_t_6 = __pyx_f_7questdb_7ingress__dataframe_get_loc(__pyx_v_df, ((PyObject*)__pyx_v_table_name_col), __pyx_n_u_table_name_col, (&__pyx_v_col_index)); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 559, __pyx_L1_error)
+0560:         elif isinstance(table_name_col, int):
    __pyx_t_1 = PyInt_Check(__pyx_v_table_name_col); 
    if (likely(__pyx_t_1)) {
/* … */
      goto __pyx_L23;
    }
+0561:             _bind_col_index(
      __pyx_t_6 = __pyx_f_7questdb_7ingress__bind_col_index(__pyx_n_u_table_name_col, __pyx_t_12, __pyx_v_col_count, (&__pyx_v_col_index)); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 561, __pyx_L1_error)
+0562:                 'table_name_col', table_name_col, col_count, &col_index)
      __pyx_t_12 = __Pyx_PyInt_As_int(__pyx_v_table_name_col); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 562, __pyx_L1_error)
 0563:         else:
+0564:             raise TypeError(
    /*else*/ {
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 564, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 564, __pyx_L1_error)
    }
    __pyx_L23:;
/* … */
  __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_u_Bad_argument_table_name_col_must); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(1, 564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__8);
  __Pyx_GIVEREF(__pyx_tuple__8);
 0565:                 'Bad argument `table_name_col`: ' +
 0566:                 'must be a column name (str) or index (int).')
+0567:         pandas_col = pandas_cols[col_index]
    if (unlikely(__pyx_v_pandas_cols == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 567, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_pandas_cols, __pyx_v_col_index, size_t, 0, __Pyx_PyInt_FromSize_t, 1, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 567, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_7questdb_7ingress_PandasCol))))) __PYX_ERR(1, 567, __pyx_L1_error)
    __pyx_v_pandas_col = ((struct __pyx_obj_7questdb_7ingress_PandasCol *)__pyx_t_2);
    __pyx_t_2 = 0;
+0568:         col = &cols.d[col_index]
    __pyx_v_col = (&(__pyx_v_cols->d[__pyx_v_col_index]));
+0569:         _dataframe_check_column_is_str(
    __pyx_t_6 = __pyx_f_7questdb_7ingress__dataframe_check_column_is_str(__pyx_kp_u_Bad_argument_table_name_col, __pyx_v_pandas_col, __pyx_v_col->setup->source); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 569, __pyx_L1_error)
 0570:             'Bad argument `table_name_col`: ',
 0571:             pandas_col,
 0572:             col.setup.source)
+0573:         col.setup.meta_target = meta_target_t.meta_target_table
    __pyx_v_col->setup->meta_target = __pyx_e_7questdb_7ingress_meta_target_table;
+0574:         name_out.len = 0
    __pyx_v_name_out->len = 0;
+0575:         name_out.buf = NULL
    __pyx_v_name_out->buf = NULL;
+0576:         return col_index
    __pyx_r = __pyx_v_col_index;
    goto __pyx_L0;
+0577:     elif df.index.name:
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_n_s_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 577, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 577, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 577, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (likely(__pyx_t_1)) {
/* … */
  }
+0578:         if not isinstance(df.index.name, str):
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_n_s_index); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 578, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 578, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_1 = PyUnicode_Check(__pyx_t_2); 
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_20 = (!__pyx_t_1);
    if (unlikely(__pyx_t_20)) {
/* … */
    }
+0579:             raise TypeError(
      __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 579, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __PYX_ERR(1, 579, __pyx_L1_error)
+0580:                 'Bad dataframe index name as table name: Expected str, ' +
      __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Bad_dataframe_index_name_as_tabl, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 580, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0581:                 f'not an object of type {_fqn(type(df.index.name))}.')
      __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 581, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_21 = 0;
      __pyx_t_22 = 127;
      __Pyx_INCREF(__pyx_kp_u_not_an_object_of_type);
      __pyx_t_21 += 22;
      __Pyx_GIVEREF(__pyx_kp_u_not_an_object_of_type);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_not_an_object_of_type);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_n_s_index); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 581, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 581, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = __pyx_f_7questdb_7ingress__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_t_8)))); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 581, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 581, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_22 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_22) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_22;
      __pyx_t_21 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_8);
      __pyx_t_8 = 0;
      __Pyx_INCREF(__pyx_kp_u__5);
      __pyx_t_21 += 1;
      __Pyx_GIVEREF(__pyx_kp_u__5);
      PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u__5);
      __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_21, __pyx_t_22); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 581, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0582: 
 0583:         # If the index has a name, use that as the table name.
+0584:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L25_error:;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 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_L27_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_L29_try_return:;
      __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_L0;
    }
+0585:             str_to_table_name_copy(b, <PyObject*>df.index.name, name_out)
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_n_s_index); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 585, __pyx_L25_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 585, __pyx_L25_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_6 = __pyx_f_7questdb_7ingress_str_to_table_name_copy(__pyx_v_b, ((PyObject *)__pyx_t_2), __pyx_v_name_out); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 585, __pyx_L25_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0586:             return -1  # Magic value for "no column index".
        __pyx_r = -1L;
        goto __pyx_L29_try_return;
+0587:         except IngressError as ie:
      __Pyx_ErrFetch(&__pyx_t_2, &__pyx_t_8, &__pyx_t_7);
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_IngressError); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 587, __pyx_L27_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_12 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_2, __pyx_t_9);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_ErrRestore(__pyx_t_2, __pyx_t_8, __pyx_t_7);
      __pyx_t_2 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0;
      if (__pyx_t_12) {
        __Pyx_AddTraceback("questdb.ingress._dataframe_resolve_table_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_2) < 0) __PYX_ERR(1, 587, __pyx_L27_except_error)
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_8);
        __pyx_v_ie = __pyx_t_8;
        /*try:*/ {
/* … */
        /*finally:*/ {
          __pyx_L36_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_11); __pyx_t_11 = 0;
            __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
            if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_15, &__pyx_t_14);
            if ((PY_MAJOR_VERSION < 3) || 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_10 = __pyx_clineno; __pyx_t_23 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_ie); __pyx_v_ie = 0;
            }
            if (PY_MAJOR_VERSION >= 3) {
              __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_10; __pyx_filename = __pyx_t_23;
            goto __pyx_L27_except_error;
          }
        }
      }
      goto __pyx_L27_except_error;
+0588:             raise ValueError(
          __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 588, __pyx_L36_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_Raise(__pyx_t_9, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __PYX_ERR(1, 588, __pyx_L36_error)
        }
+0589:                 f'Bad dataframe index name as table name: {ie}')
          __pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_v_ie, __pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 589, __pyx_L36_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_11 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Bad_dataframe_index_name_as_tabl_2, __pyx_t_9); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 589, __pyx_L36_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 0590:     else:
+0591:         raise ValueError(
  /*else*/ {
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 591, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 591, __pyx_L1_error)
  }
/* … */
  __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_u_Must_specify_at_least_one_of_tab); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(1, 591, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__9);
  __Pyx_GIVEREF(__pyx_tuple__9);
 0592:             'Must specify at least one of `table_name` or `table_name_col`, ' +
 0593:             'or set the dataframe index name (df.index.name = \'tbl_name\').')
 0594: 
 0595: 
+0596: cdef void_int _bind_col_index(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__bind_col_index(PyObject *__pyx_v_arg_name, int __pyx_v_col_num, size_t __pyx_v_col_count, size_t *__pyx_v_col_index) {
  int __pyx_v_bad;
  int __pyx_v_orig_col_num;
  __pyx_t_7questdb_7ingress_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_6);
  __Pyx_AddTraceback("questdb.ingress._bind_col_index", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0597:         str arg_name, int col_num, size_t col_count,
 0598:         size_t* col_index) except -1:
 0599:     """
 0600:     Validate that `col_index` is in bounds for `col_count`.
 0601:     This function also converts negative indicies (e.g. -1 for last column) to
 0602:     positive indicies.
 0603:     """
+0604:     cdef bint bad = False
  __pyx_v_bad = 0;
+0605:     cdef int orig_col_num = col_num
  __pyx_v_orig_col_num = __pyx_v_col_num;
+0606:     if col_num < 0:
  __pyx_t_1 = (__pyx_v_col_num < 0);
  if (__pyx_t_1) {
/* … */
  }
+0607:         col_num += col_count  # Try convert negative offsets to positive ones.
    __pyx_v_col_num = (__pyx_v_col_num + __pyx_v_col_count);
+0608:     if col_num < 0:
  __pyx_t_1 = (__pyx_v_col_num < 0);
  if (__pyx_t_1) {
/* … */
  }
+0609:         bad = True
    __pyx_v_bad = 1;
+0610:     if (not bad) and (<size_t>col_num >= col_count):
  __pyx_t_2 = (!__pyx_v_bad);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_2 = (((size_t)__pyx_v_col_num) >= __pyx_v_col_count);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+0611:         bad = True
    __pyx_v_bad = 1;
+0612:     if bad:
  if (unlikely(__pyx_v_bad)) {
/* … */
  }
+0613:         raise IndexError(
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 613, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(1, 613, __pyx_L1_error)
+0614:             f'Bad argument `{arg_name}`: {orig_col_num} index out of range')
    __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 614, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = 0;
    __pyx_t_5 = 127;
    __Pyx_INCREF(__pyx_kp_u_Bad_argument);
    __pyx_t_4 += 14;
    __Pyx_GIVEREF(__pyx_kp_u_Bad_argument);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Bad_argument);
    __pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_v_arg_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 614, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_5;
    __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_INCREF(__pyx_kp_u__10);
    __pyx_t_4 += 3;
    __Pyx_GIVEREF(__pyx_kp_u__10);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u__10);
    __pyx_t_6 = __Pyx_PyUnicode_From_int(__pyx_v_orig_col_num, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 614, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_INCREF(__pyx_kp_u_index_out_of_range);
    __pyx_t_4 += 19;
    __Pyx_GIVEREF(__pyx_kp_u_index_out_of_range);
    PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_kp_u_index_out_of_range);
    __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_3, 5, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 614, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0615:     col_index[0] = <size_t>col_num
  (__pyx_v_col_index[0]) = ((size_t)__pyx_v_col_num);
 0616: 
 0617: 
+0618: cdef void_int _dataframe_check_column_is_str(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_check_column_is_str(PyObject *__pyx_v_err_msg_prefix, struct __pyx_obj_7questdb_7ingress_PandasCol *__pyx_v_pandas_col, enum __pyx_t_7questdb_7ingress_col_source_t __pyx_v_source) {
  PyObject *__pyx_v_inferred_descr = 0;
  __pyx_t_7questdb_7ingress_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_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb.ingress._dataframe_check_column_is_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_inferred_descr);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0619:         str err_msg_prefix,
 0620:         PandasCol pandas_col,
 0621:         col_source_t source) except -1:
+0622:     cdef str inferred_descr = ""
  __Pyx_INCREF(__pyx_kp_u__11);
  __pyx_v_inferred_descr = __pyx_kp_u__11;
+0623:     if not source in _STR_SOURCES:
  __pyx_t_1 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_v_source); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 623, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(__pyx_v_7questdb_7ingress__STR_SOURCES == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(1, 623, __pyx_L1_error)
  }
  __pyx_t_2 = (__Pyx_PySet_ContainsTF(__pyx_t_1, __pyx_v_7questdb_7ingress__STR_SOURCES, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 623, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+0624:         if isinstance(pandas_col.dtype, _NUMPY_OBJECT):
    __pyx_t_1 = __pyx_v_pandas_col->dtype;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_3 = __pyx_v_7questdb_7ingress__NUMPY_OBJECT;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_2 = PyObject_IsInstance(__pyx_t_1, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 624, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_2) {
/* … */
    }
+0625:             inferred_descr = f' (inferred type: {_PYOBJ_SOURCE_DESCR[source]})'
      __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 625, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = 0;
      __pyx_t_5 = 127;
      __Pyx_INCREF(__pyx_kp_u_inferred_type);
      __pyx_t_4 += 17;
      __Pyx_GIVEREF(__pyx_kp_u_inferred_type);
      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_inferred_type);
      if (unlikely(__pyx_v_7questdb_7ingress__PYOBJ_SOURCE_DESCR == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(1, 625, __pyx_L1_error)
      }
      __pyx_t_1 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_v_source); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 625, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = __Pyx_PyDict_GetItem(__pyx_v_7questdb_7ingress__PYOBJ_SOURCE_DESCR, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 625, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_t_6, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 625, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_5;
      __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
      __pyx_t_1 = 0;
      __Pyx_INCREF(__pyx_kp_u__12);
      __pyx_t_4 += 1;
      __Pyx_GIVEREF(__pyx_kp_u__12);
      PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u__12);
      __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 625, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF_SET(__pyx_v_inferred_descr, ((PyObject*)__pyx_t_1));
      __pyx_t_1 = 0;
+0626:         raise IngressError(
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_IngressError); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 626, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
+0627:             IngressErrorCode.BadDataFrame,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_IngressErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 627, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_BadDataFrame); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 627, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+0628:             err_msg_prefix +
    __pyx_t_6 = __Pyx_PyUnicode_ConcatSafe(__pyx_v_err_msg_prefix, __pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0629:             f'Bad dtype `{pandas_col.dtype}`{inferred_descr} for the ' +
    __pyx_t_6 = PyTuple_New(5); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 629, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_4 = 0;
    __pyx_t_5 = 127;
    __Pyx_INCREF(__pyx_kp_u_Bad_dtype);
    __pyx_t_4 += 11;
    __Pyx_GIVEREF(__pyx_kp_u_Bad_dtype);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_kp_u_Bad_dtype);
    __pyx_t_8 = __Pyx_PyObject_FormatSimple(__pyx_v_pandas_col->dtype, __pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 629, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_5;
    __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_8);
    __pyx_t_8 = 0;
    __Pyx_INCREF(__pyx_kp_u__13);
    __pyx_t_4 += 1;
    __Pyx_GIVEREF(__pyx_kp_u__13);
    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_kp_u__13);
    __Pyx_INCREF(__pyx_v_inferred_descr);
    __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_v_inferred_descr) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_v_inferred_descr) : __pyx_t_5;
    __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_v_inferred_descr);
    __Pyx_GIVEREF(__pyx_v_inferred_descr);
    PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_v_inferred_descr);
    __Pyx_INCREF(__pyx_kp_u_for_the);
    __pyx_t_4 += 9;
    __Pyx_GIVEREF(__pyx_kp_u_for_the);
    PyTuple_SET_ITEM(__pyx_t_6, 4, __pyx_kp_u_for_the);
    __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_6, 5, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 629, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
    __pyx_t_8 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_6, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 629, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = NULL;
    __pyx_t_10 = 0;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_10 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_9, __pyx_t_7, __pyx_t_8};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_10, 2+__pyx_t_10);
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 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(1, 626, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(1, 626, __pyx_L1_error)
+0630:             f'{pandas_col.name!r} column: Must be a strings column.')
    __pyx_t_8 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_pandas_col->name), __pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 630, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_8, __pyx_kp_u_column_Must_be_a_strings_column); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 630, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 0631: 
 0632: 
 0633: @cython.internal
+0634: cdef class PandasCol:
struct __pyx_obj_7questdb_7ingress_PandasCol {
  PyObject_HEAD
  PyObject *name;
  PyObject *dtype;
  PyObject *series;
};

 0635:     """Python object representing a column to parse .dataframe() arguments."""
 0636:     cdef str name
 0637:     cdef object dtype
 0638:     cdef object series
 0639: 
+0640:     def __init__(
/* Python wrapper */
static int __pyx_pw_7questdb_7ingress_9PandasCol_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7questdb_7ingress_9PandasCol_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_dtype = 0;
  PyObject *__pyx_v_series = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_MACROS
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  {
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_dtype,&__pyx_n_s_series,0};
  PyObject* values[3] = {0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_name)) != 0)) {
          (void)__Pyx_Arg_NewRef_VARARGS(values[0]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 640, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_dtype)) != 0)) {
          (void)__Pyx_Arg_NewRef_VARARGS(values[1]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 640, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 1); __PYX_ERR(1, 640, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_series)) != 0)) {
          (void)__Pyx_Arg_NewRef_VARARGS(values[2]);
          kw_args--;
        }
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 640, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 2); __PYX_ERR(1, 640, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(1, 640, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
      values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
      values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);
    }
    __pyx_v_name = ((PyObject*)values[0]);
    __pyx_v_dtype = values[1];
    __pyx_v_series = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, __pyx_nargs); __PYX_ERR(1, 640, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
    }
  }
  __Pyx_AddTraceback("questdb.ingress.PandasCol.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyUnicode_Type), 1, "name", 1))) __PYX_ERR(1, 642, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7ingress_9PandasCol___init__(((struct __pyx_obj_7questdb_7ingress_PandasCol *)__pyx_v_self), __pyx_v_name, __pyx_v_dtype, __pyx_v_series);
  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;
  __pyx_L0:;
  {
    Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
      __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
    }
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_7questdb_7ingress_9PandasCol___init__(struct __pyx_obj_7questdb_7ingress_PandasCol *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_dtype, PyObject *__pyx_v_series) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0641:             self,
 0642:             str name,
 0643:             object dtype,
 0644:             object series):
+0645:         self.name = name
  __Pyx_INCREF(__pyx_v_name);
  __Pyx_GIVEREF(__pyx_v_name);
  __Pyx_GOTREF(__pyx_v_self->name);
  __Pyx_DECREF(__pyx_v_self->name);
  __pyx_v_self->name = __pyx_v_name;
+0646:         self.dtype = dtype
  __Pyx_INCREF(__pyx_v_dtype);
  __Pyx_GIVEREF(__pyx_v_dtype);
  __Pyx_GOTREF(__pyx_v_self->dtype);
  __Pyx_DECREF(__pyx_v_self->dtype);
  __pyx_v_self->dtype = __pyx_v_dtype;
+0647:         self.series = series
  __Pyx_INCREF(__pyx_v_series);
  __Pyx_GIVEREF(__pyx_v_series);
  __Pyx_GOTREF(__pyx_v_self->series);
  __Pyx_DECREF(__pyx_v_self->series);
  __pyx_v_self->series = __pyx_v_series;
 0648: 
+0649: cdef void_int _dataframe_resolve_symbols(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_resolve_symbols(PyObject *__pyx_v_df, PyObject *__pyx_v_pandas_cols, struct __pyx_t_7questdb_7ingress_col_t_arr *__pyx_v_cols, Py_ssize_t __pyx_v_table_name_col, Py_ssize_t __pyx_v_at_col, PyObject *__pyx_v_symbols) {
  size_t __pyx_v_col_index;
  PyObject *__pyx_v_symbol = 0;
  struct __pyx_obj_7questdb_7ingress_PandasCol *__pyx_v_pandas_col = 0;
  struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col;
  __pyx_t_7questdb_7ingress_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_12);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("questdb.ingress._dataframe_resolve_symbols", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_symbol);
  __Pyx_XDECREF((PyObject *)__pyx_v_pandas_col);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0650:         object df,
 0651:         list pandas_cols,
 0652:         col_t_arr* cols,
 0653:         ssize_t table_name_col,
 0654:         ssize_t at_col,
 0655:         object symbols) except -1:
+0656:     cdef size_t col_index = 0
  __pyx_v_col_index = 0;
 0657:     cdef object symbol
 0658:     cdef PandasCol pandas_col
 0659:     cdef col_t* col
+0660:     if symbols == 'auto':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_symbols, __pyx_n_u_auto, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 660, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+0661:         for col_index in range(cols.size):
    __pyx_t_2 = __pyx_v_cols->size;
    __pyx_t_3 = __pyx_t_2;
    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
      __pyx_v_col_index = __pyx_t_4;
+0662:             pandas_col = pandas_cols[col_index]
      if (unlikely(__pyx_v_pandas_cols == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(1, 662, __pyx_L1_error)
      }
      __pyx_t_5 = __Pyx_GetItemInt_List(__pyx_v_pandas_cols, __pyx_v_col_index, size_t, 0, __Pyx_PyInt_FromSize_t, 1, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 662, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_7questdb_7ingress_PandasCol))))) __PYX_ERR(1, 662, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_pandas_col, ((struct __pyx_obj_7questdb_7ingress_PandasCol *)__pyx_t_5));
      __pyx_t_5 = 0;
+0663:             col = &cols.d[col_index]
      __pyx_v_col = (&(__pyx_v_cols->d[__pyx_v_col_index]));
+0664:             if col.setup.meta_target == meta_target_t.meta_target_field:
      __pyx_t_1 = (__pyx_v_col->setup->meta_target == __pyx_e_7questdb_7ingress_meta_target_field);
      if (__pyx_t_1) {
/* … */
      }
    }
+0665:                 if isinstance(pandas_col.dtype, _PANDAS.CategoricalDtype):
        __pyx_t_5 = __pyx_v_pandas_col->dtype;
        __Pyx_INCREF(__pyx_t_5);
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__PANDAS, __pyx_n_s_CategoricalDtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 665, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_1 = PyObject_IsInstance(__pyx_t_5, __pyx_t_6); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 665, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (__pyx_t_1) {
/* … */
        }
+0666:                     col.setup.meta_target = meta_target_t.meta_target_symbol
          __pyx_v_col->setup->meta_target = __pyx_e_7questdb_7ingress_meta_target_symbol;
+0667:     elif symbols is False:
  __pyx_t_1 = (__pyx_v_symbols == Py_False);
  if (__pyx_t_1) {
    goto __pyx_L3;
  }
 0668:         pass
+0669:     elif symbols is True:
  __pyx_t_1 = (__pyx_v_symbols == Py_True);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+0670:         for col_index in range(cols.size):
    __pyx_t_2 = __pyx_v_cols->size;
    __pyx_t_3 = __pyx_t_2;
    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
      __pyx_v_col_index = __pyx_t_4;
+0671:             col = &cols.d[col_index]
      __pyx_v_col = (&(__pyx_v_cols->d[__pyx_v_col_index]));
+0672:             if col.setup.source in _STR_SOURCES:
      __pyx_t_6 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_v_col->setup->source); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 672, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (unlikely(__pyx_v_7questdb_7ingress__STR_SOURCES == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(1, 672, __pyx_L1_error)
      }
      __pyx_t_1 = (__Pyx_PySet_ContainsTF(__pyx_t_6, __pyx_v_7questdb_7ingress__STR_SOURCES, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 672, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (__pyx_t_1) {
/* … */
      }
    }
+0673:                 pandas_col = pandas_cols[col_index]
        if (unlikely(__pyx_v_pandas_cols == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(1, 673, __pyx_L1_error)
        }
        __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_pandas_cols, __pyx_v_col_index, size_t, 0, __Pyx_PyInt_FromSize_t, 1, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 673, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_7questdb_7ingress_PandasCol))))) __PYX_ERR(1, 673, __pyx_L1_error)
        __Pyx_XDECREF_SET(__pyx_v_pandas_col, ((struct __pyx_obj_7questdb_7ingress_PandasCol *)__pyx_t_6));
        __pyx_t_6 = 0;
+0674:                 if col.setup.meta_target == meta_target_t.meta_target_field:
        __pyx_t_1 = (__pyx_v_col->setup->meta_target == __pyx_e_7questdb_7ingress_meta_target_field);
        if (__pyx_t_1) {
/* … */
        }
+0675:                     col.setup.meta_target = meta_target_t.meta_target_symbol
          __pyx_v_col->setup->meta_target = __pyx_e_7questdb_7ingress_meta_target_symbol;
 0676:     else:
+0677:         if not isinstance(symbols, (tuple, list)):
  /*else*/ {
    __pyx_t_7 = PyTuple_Check(__pyx_v_symbols); 
    if (!__pyx_t_7) {
    } else {
      __pyx_t_1 = __pyx_t_7;
      goto __pyx_L13_bool_binop_done;
    }
    __pyx_t_7 = PyList_Check(__pyx_v_symbols); 
    __pyx_t_1 = __pyx_t_7;
    __pyx_L13_bool_binop_done:;
    __pyx_t_7 = (!__pyx_t_1);
    if (unlikely(__pyx_t_7)) {
/* … */
    }
+0678:             raise TypeError(
      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 678, __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(1, 678, __pyx_L1_error)
/* … */
  __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_u_Bad_argument_symbols_Must_be_a_b); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(1, 678, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__14);
  __Pyx_GIVEREF(__pyx_tuple__14);
 0679:                 f'Bad argument `symbols`: Must be a bool or a tuple or list '+
 0680:                 'of column names (str) or indices (int).')
+0681:         for symbol in symbols:
    if (likely(PyList_CheckExact(__pyx_v_symbols)) || PyTuple_CheckExact(__pyx_v_symbols)) {
      __pyx_t_6 = __pyx_v_symbols; __Pyx_INCREF(__pyx_t_6);
      __pyx_t_8 = 0;
      __pyx_t_9 = NULL;
    } else {
      __pyx_t_8 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_v_symbols); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 681, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_9 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 681, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_9)) {
        if (likely(PyList_CheckExact(__pyx_t_6))) {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_6);
            #if !CYTHON_ASSUME_SAFE_MACROS
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 681, __pyx_L1_error)
            #endif
            if (__pyx_t_8 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_8); __Pyx_INCREF(__pyx_t_5); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(1, 681, __pyx_L1_error)
          #else
          __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_6, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 681, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_6);
            #if !CYTHON_ASSUME_SAFE_MACROS
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 681, __pyx_L1_error)
            #endif
            if (__pyx_t_8 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_8); __Pyx_INCREF(__pyx_t_5); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(1, 681, __pyx_L1_error)
          #else
          __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_6, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 681, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        }
      } else {
        __pyx_t_5 = __pyx_t_9(__pyx_t_6);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(1, 681, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_XDECREF_SET(__pyx_v_symbol, __pyx_t_5);
      __pyx_t_5 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __pyx_L3:;
+0682:             if isinstance(symbol, str):
      __pyx_t_7 = PyUnicode_Check(__pyx_v_symbol); 
      if (__pyx_t_7) {
/* … */
        goto __pyx_L17;
      }
+0683:                 _dataframe_get_loc(df, symbol, 'symbols', &col_index)
        if (!(likely(PyUnicode_CheckExact(__pyx_v_symbol))||((__pyx_v_symbol) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_v_symbol))) __PYX_ERR(1, 683, __pyx_L1_error)
        __pyx_t_10 = __pyx_f_7questdb_7ingress__dataframe_get_loc(__pyx_v_df, ((PyObject*)__pyx_v_symbol), __pyx_n_u_symbols, (&__pyx_v_col_index)); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 683, __pyx_L1_error)
+0684:             elif isinstance(symbol, int):
      __pyx_t_7 = PyInt_Check(__pyx_v_symbol); 
      if (likely(__pyx_t_7)) {
/* … */
        goto __pyx_L17;
      }
+0685:                 _bind_col_index('symbol', symbol, cols.size, &col_index)
        __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_v_symbol); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 685, __pyx_L1_error)
        __pyx_t_10 = __pyx_f_7questdb_7ingress__bind_col_index(__pyx_n_u_symbol, __pyx_t_11, __pyx_v_cols->size, (&__pyx_v_col_index)); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 685, __pyx_L1_error)
 0686:             else:
+0687:                 raise TypeError(
      /*else*/ {
        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 687, __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(1, 687, __pyx_L1_error)
      }
      __pyx_L17:;
/* … */
  __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_u_Bad_argument_symbols_Elements_mu); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(1, 687, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__15);
  __Pyx_GIVEREF(__pyx_tuple__15);
 0688:                     f'Bad argument `symbols`: Elements must ' +
 0689:                     'be a column name (str) or index (int).')
+0690:             if (table_name_col >= 0) and (col_index == <size_t>table_name_col):
      __pyx_t_1 = (__pyx_v_table_name_col >= 0);
      if (__pyx_t_1) {
      } else {
        __pyx_t_7 = __pyx_t_1;
        goto __pyx_L19_bool_binop_done;
      }
      __pyx_t_1 = (__pyx_v_col_index == ((size_t)__pyx_v_table_name_col));
      __pyx_t_7 = __pyx_t_1;
      __pyx_L19_bool_binop_done:;
      if (unlikely(__pyx_t_7)) {
/* … */
      }
+0691:                 raise ValueError(
        __pyx_t_12 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_5); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 691, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_Raise(__pyx_t_12, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __PYX_ERR(1, 691, __pyx_L1_error)
+0692:                     f'Bad argument `symbols`: Cannot use the same column ' +
        __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Bad_argument_symbols_Cannot_use, __pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 692, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+0693:                     f'{symbol!r} as both the table_name and as a symbol.')
        __pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_symbol), __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 693, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_12 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_5, __pyx_kp_u_as_both_the_table_name_and_as_a); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 693, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0694:             if (at_col >= 0) and (col_index == <size_t>at_col):
      __pyx_t_1 = (__pyx_v_at_col >= 0);
      if (__pyx_t_1) {
      } else {
        __pyx_t_7 = __pyx_t_1;
        goto __pyx_L22_bool_binop_done;
      }
      __pyx_t_1 = (__pyx_v_col_index == ((size_t)__pyx_v_at_col));
      __pyx_t_7 = __pyx_t_1;
      __pyx_L22_bool_binop_done:;
      if (unlikely(__pyx_t_7)) {
/* … */
      }
+0695:                 raise ValueError(
        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 695, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_Raise(__pyx_t_5, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __PYX_ERR(1, 695, __pyx_L1_error)
+0696:                     f'Bad argument `symbols`: Cannot use the `at` column ' +
        __pyx_t_12 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Bad_argument_symbols_Cannot_use_2, __pyx_t_5); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 696, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0697:                     f'({df.columns[at_col]!r}) as a symbol column.')
        __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 697, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_13 = 0;
        __pyx_t_14 = 127;
        __Pyx_INCREF(__pyx_kp_u__16);
        __pyx_t_13 += 1;
        __Pyx_GIVEREF(__pyx_kp_u__16);
        PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_kp_u__16);
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_n_s_columns); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 697, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_15 = __Pyx_GetItemInt(__pyx_t_5, __pyx_v_at_col, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 697, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_15), __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 697, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __pyx_t_14 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_14) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_14;
        __pyx_t_13 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_5);
        __pyx_t_5 = 0;
        __Pyx_INCREF(__pyx_kp_u_as_a_symbol_column);
        __pyx_t_13 += 21;
        __Pyx_GIVEREF(__pyx_kp_u_as_a_symbol_column);
        PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_kp_u_as_a_symbol_column);
        __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_12, 3, __pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 697, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+0698:             pandas_col = pandas_cols[col_index]
      if (unlikely(__pyx_v_pandas_cols == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(1, 698, __pyx_L1_error)
      }
      __pyx_t_5 = __Pyx_GetItemInt_List(__pyx_v_pandas_cols, __pyx_v_col_index, size_t, 0, __Pyx_PyInt_FromSize_t, 1, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 698, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_7questdb_7ingress_PandasCol))))) __PYX_ERR(1, 698, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_pandas_col, ((struct __pyx_obj_7questdb_7ingress_PandasCol *)__pyx_t_5));
      __pyx_t_5 = 0;
+0699:             col = &cols.d[col_index]
      __pyx_v_col = (&(__pyx_v_cols->d[__pyx_v_col_index]));
+0700:             _dataframe_check_column_is_str(
      __pyx_t_10 = __pyx_f_7questdb_7ingress__dataframe_check_column_is_str(__pyx_kp_u_Bad_argument_symbols, __pyx_v_pandas_col, __pyx_v_col->setup->source); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 700, __pyx_L1_error)
 0701:                 'Bad argument `symbols`: ',
 0702:                 pandas_col,
 0703:                 col.setup.source)
+0704:             col.setup.meta_target = meta_target_t.meta_target_symbol
      __pyx_v_col->setup->meta_target = __pyx_e_7questdb_7ingress_meta_target_symbol;
 0705: 
 0706: 
+0707: cdef void_int _dataframe_get_loc(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_get_loc(PyObject *__pyx_v_df, PyObject *__pyx_v_col_name, PyObject *__pyx_v_arg_name, size_t *__pyx_v_col_index_out) {
  __pyx_t_7questdb_7ingress_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_9);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("questdb.ingress._dataframe_get_loc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0708:         object df, str col_name, str arg_name,
 0709:         size_t* col_index_out) except -1:
 0710:     """
 0711:     Return the column index for `col_name`.
 0712:     """
+0713:     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_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:;
  }
+0714:         col_index_out[0] = df.columns.get_loc(col_name)
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_n_s_columns); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 714, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_get_loc); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 714, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = NULL;
      __pyx_t_7 = 0;
      #if CYTHON_UNPACK_METHODS
      if (likely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
          __pyx_t_7 = 1;
        }
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_col_name};
        __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 714, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      }
      __pyx_t_8 = __Pyx_PyInt_As_size_t(__pyx_t_4); if (unlikely((__pyx_t_8 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 714, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      (__pyx_v_col_index_out[0]) = __pyx_t_8;
+0715:     except KeyError:
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
    if (__pyx_t_7) {
      __Pyx_AddTraceback("questdb.ingress._dataframe_get_loc", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_5) < 0) __PYX_ERR(1, 715, __pyx_L5_except_error)
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_5);
+0716:         raise KeyError(
      __pyx_t_13 = __Pyx_PyObject_CallOneArg(__pyx_builtin_KeyError, __pyx_t_9); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 716, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_Raise(__pyx_t_13, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __PYX_ERR(1, 716, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
+0717:             f'Bad argument `{arg_name}`: ' +
      __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 717, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = 0;
      __pyx_t_11 = 127;
      __Pyx_INCREF(__pyx_kp_u_Bad_argument);
      __pyx_t_10 += 14;
      __Pyx_GIVEREF(__pyx_kp_u_Bad_argument);
      PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_kp_u_Bad_argument);
      __pyx_t_12 = __Pyx_PyUnicode_Unicode(__pyx_v_arg_name); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 717, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) : __pyx_t_11;
      __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12);
      __Pyx_GIVEREF(__pyx_t_12);
      PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_12);
      __pyx_t_12 = 0;
      __Pyx_INCREF(__pyx_kp_u__10);
      __pyx_t_10 += 3;
      __Pyx_GIVEREF(__pyx_kp_u__10);
      PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_kp_u__10);
      __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_9, 3, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 717, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
      __pyx_t_9 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 717, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+0718:             f'Column {col_name!r} not found in the dataframe.')
      __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 718, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = 0;
      __pyx_t_11 = 127;
      __Pyx_INCREF(__pyx_kp_u_Column);
      __pyx_t_10 += 7;
      __Pyx_GIVEREF(__pyx_kp_u_Column);
      PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_kp_u_Column);
      __pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_col_name), __pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 718, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) : __pyx_t_11;
      __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13);
      __Pyx_GIVEREF(__pyx_t_13);
      PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_13);
      __pyx_t_13 = 0;
      __Pyx_INCREF(__pyx_kp_u_not_found_in_the_dataframe);
      __pyx_t_10 += 28;
      __Pyx_GIVEREF(__pyx_kp_u_not_found_in_the_dataframe);
      PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_kp_u_not_found_in_the_dataframe);
      __pyx_t_13 = __Pyx_PyUnicode_Join(__pyx_t_9, 3, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 718, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 0719: 
 0720: 
 0721: # The values -2 and -1 are safe to use as a sentinel because the TimestampNanos
 0722: # type already validates that the value is >= 0.
+0723: cdef int64_t _AT_IS_SERVER_NOW = -2
  __pyx_v_7questdb_7ingress__AT_IS_SERVER_NOW = -2L;
+0724: cdef int64_t _AT_IS_SET_BY_COLUMN = -1
  __pyx_v_7questdb_7ingress__AT_IS_SET_BY_COLUMN = -1L;
 0725: 
 0726: 
+0727: cdef str _SUPPORTED_DATETIMES = 'datetime64[ns] or datetime64[ns, tz]'
  __Pyx_INCREF(__pyx_kp_u_datetime64_ns_or_datetime64_ns_t);
  __Pyx_XGOTREF(__pyx_v_7questdb_7ingress__SUPPORTED_DATETIMES);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7ingress__SUPPORTED_DATETIMES, __pyx_kp_u_datetime64_ns_or_datetime64_ns_t);
  __Pyx_GIVEREF(__pyx_kp_u_datetime64_ns_or_datetime64_ns_t);
 0728: 
 0729: 
+0730: cdef object _dataframe_is_supported_datetime(object dtype):
static PyObject *__pyx_f_7questdb_7ingress__dataframe_is_supported_datetime(PyObject *__pyx_v_dtype) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb.ingress._dataframe_is_supported_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0731:     if (isinstance(dtype, _NUMPY_DATETIME64_NS) and
  __pyx_t_2 = __pyx_v_7questdb_7ingress__NUMPY_DATETIME64_NS;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 731, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
/* … */
  if (__pyx_t_1) {
/* … */
  }
+0732:             (str(dtype) == 'datetime64[ns]')):
  __pyx_t_2 = __Pyx_PyObject_Str(__pyx_v_dtype); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 732, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_kp_u_datetime64_ns, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(1, 732, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
+0733:         return True
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_True);
    __pyx_r = Py_True;
    goto __pyx_L0;
+0734:     if isinstance(dtype, _PANDAS.DatetimeTZDtype):
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__PANDAS, __pyx_n_s_DatetimeTZDtype); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 734, __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(1, 734, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_1) {
/* … */
  }
+0735:         return dtype.unit == 'ns'
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_unit); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 735, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_n_u_ns, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 735, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
+0736:     return False
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(Py_False);
  __pyx_r = Py_False;
  goto __pyx_L0;
 0737: 
 0738: 
+0739: cdef ssize_t _dataframe_resolve_at(
static Py_ssize_t __pyx_f_7questdb_7ingress__dataframe_resolve_at(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7ingress_col_t_arr *__pyx_v_cols, PyObject *__pyx_v_at, size_t __pyx_v_col_count, int64_t *__pyx_v_at_value_out) {
  size_t __pyx_v_col_index;
  PyObject *__pyx_v_dtype = 0;
  struct __pyx_obj_7questdb_7ingress_TimestampNanos *__pyx_v_at_nanos = 0;
  struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col;
  Py_ssize_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb.ingress._dataframe_resolve_at", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2L;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_XDECREF((PyObject *)__pyx_v_at_nanos);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0740:         object df,
 0741:         col_t_arr* cols,
 0742:         object at,
 0743:         size_t col_count,
 0744:         int64_t* at_value_out) except -2:
 0745:     cdef size_t col_index
 0746:     cdef object dtype
 0747:     cdef PandasCol pandas_col
 0748:     cdef TimestampNanos at_nanos
+0749:     if at is None:
  __pyx_t_1 = (__pyx_v_at == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0750:         at_value_out[0] = _AT_IS_SERVER_NOW
    (__pyx_v_at_value_out[0]) = __pyx_v_7questdb_7ingress__AT_IS_SERVER_NOW;
+0751:         return -1
    __pyx_r = -1L;
    goto __pyx_L0;
+0752:     elif isinstance(at, TimestampNanos):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_at, __pyx_ptype_7questdb_7ingress_TimestampNanos); 
  if (__pyx_t_1) {
/* … */
  }
+0753:         at_nanos = at
    if (!(likely(((__pyx_v_at) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_at, __pyx_ptype_7questdb_7ingress_TimestampNanos))))) __PYX_ERR(1, 753, __pyx_L1_error)
    __pyx_t_2 = __pyx_v_at;
    __Pyx_INCREF(__pyx_t_2);
    __pyx_v_at_nanos = ((struct __pyx_obj_7questdb_7ingress_TimestampNanos *)__pyx_t_2);
    __pyx_t_2 = 0;
+0754:         at_value_out[0] = at_nanos._value
    __pyx_t_3 = __pyx_v_at_nanos->_value;
    (__pyx_v_at_value_out[0]) = __pyx_t_3;
+0755:         return -1
    __pyx_r = -1L;
    goto __pyx_L0;
+0756:     elif isinstance(at, datetime):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_at, __pyx_ptype_7cpython_8datetime_datetime); 
  if (__pyx_t_1) {
/* … */
  }
+0757:         if at.timestamp() < 0:
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_at, __pyx_n_s_timestamp); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 757, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_6 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 757, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 757, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 757, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+0758:             raise ValueError(
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 758, __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(1, 758, __pyx_L1_error)
/* … */
  __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_u_Bad_argument_at_Cannot_use_a_dat); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(1, 758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__17);
  __Pyx_GIVEREF(__pyx_tuple__17);
 0759:                 'Bad argument `at`: Cannot use a datetime before the ' +
 0760:                 'Unix epoch (1970-01-01 00:00:00).')
+0761:         at_value_out[0] = datetime_to_nanos(at)
    if (!(likely(((__pyx_v_at) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_at, __pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(1, 761, __pyx_L1_error)
    __pyx_t_3 = __pyx_f_7questdb_7ingress_datetime_to_nanos(((PyDateTime_DateTime *)__pyx_v_at)); if (unlikely(__pyx_t_3 == ((int64_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 761, __pyx_L1_error)
    (__pyx_v_at_value_out[0]) = __pyx_t_3;
+0762:         return -1
    __pyx_r = -1L;
    goto __pyx_L0;
+0763:     elif isinstance(at, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_at); 
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+0764:         _dataframe_get_loc(df, at, 'at', &col_index)
    if (!(likely(PyUnicode_CheckExact(__pyx_v_at))||((__pyx_v_at) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_v_at))) __PYX_ERR(1, 764, __pyx_L1_error)
    __pyx_t_7 = __pyx_f_7questdb_7ingress__dataframe_get_loc(__pyx_v_df, ((PyObject*)__pyx_v_at), __pyx_n_u_at, (&__pyx_v_col_index)); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 764, __pyx_L1_error)
+0765:     elif isinstance(at, int):
  __pyx_t_1 = PyInt_Check(__pyx_v_at); 
  if (likely(__pyx_t_1)) {
/* … */
    goto __pyx_L3;
  }
+0766:         _bind_col_index('at', at, col_count, &col_index)
    __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_at); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 766, __pyx_L1_error)
    __pyx_t_7 = __pyx_f_7questdb_7ingress__bind_col_index(__pyx_n_u_at, __pyx_t_6, __pyx_v_col_count, (&__pyx_v_col_index)); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 766, __pyx_L1_error)
 0767:     else:
+0768:         raise TypeError(
  /*else*/ {
/* … */
    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 768, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(1, 768, __pyx_L1_error)
  }
  __pyx_L3:;
+0769:             f'Bad argument `at`: Unsupported type {_fqn(type(at))}. ' +
    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_8 = 0;
    __pyx_t_9 = 127;
    __Pyx_INCREF(__pyx_kp_u_Bad_argument_at_Unsupported_type);
    __pyx_t_8 += 36;
    __Pyx_GIVEREF(__pyx_kp_u_Bad_argument_at_Unsupported_type);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_Bad_argument_at_Unsupported_type);
    __pyx_t_2 = __pyx_f_7questdb_7ingress__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_at)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_9 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_9) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_9;
    __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_INCREF(__pyx_kp_u__18);
    __pyx_t_8 += 2;
    __Pyx_GIVEREF(__pyx_kp_u__18);
    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u__18);
    __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_5, __pyx_kp_u_Must_be_one_of_None_TimestampNan); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0770:             'Must be one of: None, TimestampNanos, datetime, ' +
    __pyx_t_5 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_4, __pyx_kp_u_int_column_index_str_colum_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 770, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 0771:             'int (column index), str (colum name)')
+0772:     dtype = df.dtypes.iloc[col_index]
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_n_s_dtypes); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_iloc); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_5, __pyx_v_col_index, size_t, 0, __Pyx_PyInt_FromSize_t, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_dtype = __pyx_t_4;
  __pyx_t_4 = 0;
+0773:     if _dataframe_is_supported_datetime(dtype):
  __pyx_t_4 = __pyx_f_7questdb_7ingress__dataframe_is_supported_datetime(__pyx_v_dtype); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 773, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 773, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (likely(__pyx_t_1)) {
/* … */
  }
+0774:         at_value_out[0] = _AT_IS_SET_BY_COLUMN
    (__pyx_v_at_value_out[0]) = __pyx_v_7questdb_7ingress__AT_IS_SET_BY_COLUMN;
+0775:         col = &cols.d[col_index]
    __pyx_v_col = (&(__pyx_v_cols->d[__pyx_v_col_index]));
+0776:         col.setup.meta_target = meta_target_t.meta_target_at
    __pyx_v_col->setup->meta_target = __pyx_e_7questdb_7ingress_meta_target_at;
+0777:         return col_index
    __pyx_r = __pyx_v_col_index;
    goto __pyx_L0;
 0778:     else:
+0779:         raise TypeError(
  /*else*/ {
/* … */
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 779, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 779, __pyx_L1_error)
  }
+0780:             f'Bad argument `at`: Bad dtype `{dtype}` ' +
    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 780, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_8 = 0;
    __pyx_t_9 = 127;
    __Pyx_INCREF(__pyx_kp_u_Bad_argument_at_Bad_dtype);
    __pyx_t_8 += 30;
    __Pyx_GIVEREF(__pyx_kp_u_Bad_argument_at_Bad_dtype);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_Bad_argument_at_Bad_dtype);
    __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_v_dtype, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 780, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_9 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_9) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_9;
    __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_INCREF(__pyx_kp_u__19);
    __pyx_t_8 += 2;
    __Pyx_GIVEREF(__pyx_kp_u__19);
    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u__19);
    __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 780, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
    __pyx_t_4 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 780, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0781:             f'for the {at!r} column: Must be a {_SUPPORTED_DATETIMES} column.')
    __pyx_t_4 = PyTuple_New(5); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 781, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_8 = 0;
    __pyx_t_9 = 127;
    __Pyx_INCREF(__pyx_kp_u_for_the_2);
    __pyx_t_8 += 8;
    __Pyx_GIVEREF(__pyx_kp_u_for_the_2);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_for_the_2);
    __pyx_t_2 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_at), __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 781, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_9 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_9) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_9;
    __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
    __pyx_t_2 = 0;
    __Pyx_INCREF(__pyx_kp_u_column_Must_be_a);
    __pyx_t_8 += 19;
    __Pyx_GIVEREF(__pyx_kp_u_column_Must_be_a);
    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u_column_Must_be_a);
    __pyx_t_2 = __Pyx_PyUnicode_Unicode(__pyx_v_7questdb_7ingress__SUPPORTED_DATETIMES); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 781, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_9 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_9) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_9;
    __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_2);
    __pyx_t_2 = 0;
    __Pyx_INCREF(__pyx_kp_u_column);
    __pyx_t_8 += 8;
    __Pyx_GIVEREF(__pyx_kp_u_column);
    PyTuple_SET_ITEM(__pyx_t_4, 4, __pyx_kp_u_column);
    __pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_4, 5, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 781, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 0782: 
 0783: 
+0784: cdef void_int _dataframe_alloc_chunks(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_alloc_chunks(size_t __pyx_v_n_chunks, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col) {
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb.ingress._dataframe_alloc_chunks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}
 0785:         size_t n_chunks, col_t* col) except -1:
+0786:     col.setup.chunks.n_chunks = n_chunks
  __pyx_v_col->setup->chunks.n_chunks = __pyx_v_n_chunks;
+0787:     col.setup.chunks.chunks = <ArrowArray*>calloc(
  __pyx_v_col->setup->chunks.chunks = ((struct ArrowArray *)calloc((__pyx_v_col->setup->chunks.n_chunks + 1), (sizeof(struct ArrowArray))));
 0788:         col.setup.chunks.n_chunks + 1,  # See `_dataframe_col_advance` on why +1.
 0789:         sizeof(ArrowArray))
+0790:     if col.setup.chunks.chunks == NULL:
  __pyx_t_1 = (__pyx_v_col->setup->chunks.chunks == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0791:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(1, 791, __pyx_L1_error)
 0792: 
 0793: 
+0794: cdef void _dataframe_free_mapped_arrow(ArrowArray* arr) noexcept nogil:
static void __pyx_f_7questdb_7ingress__dataframe_free_mapped_arrow(struct ArrowArray *__pyx_v_arr) {
/* … */
  /* function exit code */
}
+0795:     free(arr.buffers)
  free(__pyx_v_arr->buffers);
+0796:     arr.buffers = NULL
  __pyx_v_arr->buffers = NULL;
+0797:     arr.release = NULL
  __pyx_v_arr->release = NULL;
 0798: 
 0799: 
+0800: cdef void_int _dataframe_series_as_pybuf(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_series_as_pybuf(struct __pyx_obj_7questdb_7ingress_PandasCol *__pyx_v_pandas_col, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, struct __pyx_opt_args_7questdb_7ingress__dataframe_series_as_pybuf *__pyx_optional_args) {
/* … */
  /* 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_7);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_24);
  __Pyx_XDECREF(__pyx_t_25);
  __Pyx_AddTraceback("questdb.ingress._dataframe_series_as_pybuf", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_nparr);
  __Pyx_XDECREF(__pyx_v_ve);
  __Pyx_XDECREF(__pyx_v_be);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_7questdb_7ingress__dataframe_series_as_pybuf {
  int __pyx_n;
  PyObject *fallback_dtype;
};
+0801:         PandasCol pandas_col, col_t* col, str fallback_dtype=None) except -1:
  PyObject *__pyx_v_fallback_dtype = ((PyObject*)Py_None);
  PyObject *__pyx_v_nparr = 0;
  struct ArrowArray *__pyx_v_mapped;
  CYTHON_UNUSED int __pyx_v_get_buf_ret;
  PyObject *__pyx_v_ve = NULL;
  PyObject *__pyx_v_be = NULL;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fallback_dtype = __pyx_optional_args->fallback_dtype;
    }
  }
+0802:     cdef object nparr = pandas_col.series.to_numpy(dtype=fallback_dtype)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_pandas_col->series, __pyx_n_s_to_numpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 802, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 802, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_fallback_dtype) < 0) __PYX_ERR(1, 802, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 802, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_nparr = __pyx_t_3;
  __pyx_t_3 = 0;
 0803:     cdef ArrowArray* mapped
 0804:     cdef int get_buf_ret
+0805:     if not PyObject_CheckBuffer(nparr):
  __pyx_t_4 = (!PyObject_CheckBuffer(__pyx_v_nparr));
  if (unlikely(__pyx_t_4)) {
/* … */
  }
+0806:         raise TypeError(
    __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 806, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_7, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_ERR(1, 806, __pyx_L1_error)
+0807:             f'Bad column {pandas_col.name!r}: Expected a buffer, got ' +
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 807, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = 0;
    __pyx_t_6 = 127;
    __Pyx_INCREF(__pyx_kp_u_Bad_column);
    __pyx_t_5 += 11;
    __Pyx_GIVEREF(__pyx_kp_u_Bad_column);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Bad_column);
    __pyx_t_2 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_pandas_col->name), __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 807, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_6;
    __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
    __pyx_t_2 = 0;
    __Pyx_INCREF(__pyx_kp_u_Expected_a_buffer_got);
    __pyx_t_5 += 25;
    __Pyx_GIVEREF(__pyx_kp_u_Expected_a_buffer_got);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u_Expected_a_buffer_got);
    __pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 807, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
    __pyx_t_3 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_2, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 807, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+0808:             f'{pandas_col.series!r} ({_fqn(type(pandas_col.series))})')
    __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 808, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = 0;
    __pyx_t_6 = 127;
    __pyx_t_1 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_pandas_col->series), __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 808, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_6;
    __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_INCREF(__pyx_kp_u__20);
    __pyx_t_5 += 2;
    __Pyx_GIVEREF(__pyx_kp_u__20);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_kp_u__20);
    __pyx_t_1 = __pyx_f_7questdb_7ingress__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_pandas_col->series)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 808, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 808, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_6;
    __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_7);
    __pyx_t_7 = 0;
    __Pyx_INCREF(__pyx_kp_u__12);
    __pyx_t_5 += 1;
    __Pyx_GIVEREF(__pyx_kp_u__12);
    PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_kp_u__12);
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_3, 4, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 808, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0809:     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_L9_try_end;
    __pyx_L4_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_7); __pyx_t_7 = 0;
/* … */
    __pyx_L6_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_L9_try_end:;
  }
 0810:         # Note! We don't need to support numpy strides since Pandas doesn't.
 0811:         # Also note that this guarantees a 1D buffer.
+0812:         get_buf_ret = PyObject_GetBuffer(nparr, &col.setup.pybuf, PyBUF_SIMPLE)
      __pyx_t_11 = PyObject_GetBuffer(__pyx_v_nparr, (&__pyx_v_col->setup->pybuf), PyBUF_SIMPLE); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(1, 812, __pyx_L4_error)
      __pyx_v_get_buf_ret = __pyx_t_11;
+0813:     except ValueError as ve:
    __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
    if (__pyx_t_11) {
      __Pyx_AddTraceback("questdb.ingress._dataframe_series_as_pybuf", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_3, &__pyx_t_2) < 0) __PYX_ERR(1, 813, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __pyx_v_ve = __pyx_t_3;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L15_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_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
          if ((PY_MAJOR_VERSION < 3) || 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_11 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_17 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_ve); __pyx_v_ve = 0;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __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_11; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_17;
          goto __pyx_L6_except_error;
        }
      }
    }
+0814:         raise IngressError(
        __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_IngressError); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 814, __pyx_L15_error)
        __Pyx_GOTREF(__pyx_t_12);
+0815:             IngressErrorCode.BadDataFrame,
        __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_IngressErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 815, __pyx_L15_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_BadDataFrame); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 815, __pyx_L15_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+0816:             f'Bad column {pandas_col.name!r}: {ve}') from ve
        __pyx_t_13 = PyTuple_New(4); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 816, __pyx_L15_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_5 = 0;
        __pyx_t_6 = 127;
        __Pyx_INCREF(__pyx_kp_u_Bad_column);
        __pyx_t_5 += 11;
        __Pyx_GIVEREF(__pyx_kp_u_Bad_column);
        PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_kp_u_Bad_column);
        __pyx_t_15 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_pandas_col->name), __pyx_empty_unicode); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 816, __pyx_L15_error)
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_15) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_15) : __pyx_t_6;
        __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15);
        __Pyx_GIVEREF(__pyx_t_15);
        PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_15);
        __pyx_t_15 = 0;
        __Pyx_INCREF(__pyx_kp_u__21);
        __pyx_t_5 += 2;
        __Pyx_GIVEREF(__pyx_kp_u__21);
        PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_kp_u__21);
        __pyx_t_15 = __Pyx_PyObject_FormatSimple(__pyx_v_ve, __pyx_empty_unicode); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 816, __pyx_L15_error)
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_15) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_15) : __pyx_t_6;
        __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15);
        __Pyx_GIVEREF(__pyx_t_15);
        PyTuple_SET_ITEM(__pyx_t_13, 3, __pyx_t_15);
        __pyx_t_15 = 0;
        __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_13, 4, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 816, __pyx_L15_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __pyx_t_13 = NULL;
        __pyx_t_11 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_12))) {
          __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_12);
          if (likely(__pyx_t_13)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
            __Pyx_INCREF(__pyx_t_13);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_12, function);
            __pyx_t_11 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_13, __pyx_t_14, __pyx_t_15};
          __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_11, 2+__pyx_t_11);
          __Pyx_XDECREF(__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;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 814, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        }
        __Pyx_Raise(__pyx_t_1, 0, 0, __pyx_v_ve);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __PYX_ERR(1, 814, __pyx_L15_error)
      }
+0817:     except BufferError as be:
    __pyx_t_16 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_BufferError);
    if (__pyx_t_16) {
      __Pyx_AddTraceback("questdb.ingress._dataframe_series_as_pybuf", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_7) < 0) __PYX_ERR(1, 817, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_2);
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_3);
      __pyx_v_be = __pyx_t_3;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L26_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_18 = 0;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
          __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_23, &__pyx_t_22, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_23, &__pyx_t_22, &__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_23);
          __Pyx_XGOTREF(__pyx_t_22);
          __Pyx_XGOTREF(__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_18);
          __pyx_t_16 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_26 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_be); __pyx_v_be = 0;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_20);
            __Pyx_XGIVEREF(__pyx_t_19);
            __Pyx_XGIVEREF(__pyx_t_18);
            __Pyx_ExceptionReset(__pyx_t_20, __pyx_t_19, __pyx_t_18);
          }
          __Pyx_XGIVEREF(__pyx_t_23);
          __Pyx_XGIVEREF(__pyx_t_22);
          __Pyx_XGIVEREF(__pyx_t_21);
          __Pyx_ErrRestore(__pyx_t_23, __pyx_t_22, __pyx_t_21);
          __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_18 = 0;
          __pyx_lineno = __pyx_t_16; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_26;
          goto __pyx_L6_except_error;
        }
      }
    }
    goto __pyx_L6_except_error;
+0818:         raise IngressError(
        __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_IngressError); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 818, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_12);
+0819:             IngressErrorCode.BadDataFrame,
        __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_IngressErrorCode); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 819, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_BadDataFrame); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 819, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+0820:             f'Bad column {pandas_col.name!r}: Expected a buffer, got ' +
        __pyx_t_15 = PyTuple_New(3); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 820, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_5 = 0;
        __pyx_t_6 = 127;
        __Pyx_INCREF(__pyx_kp_u_Bad_column);
        __pyx_t_5 += 11;
        __Pyx_GIVEREF(__pyx_kp_u_Bad_column);
        PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_kp_u_Bad_column);
        __pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_pandas_col->name), __pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 820, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) : __pyx_t_6;
        __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13);
        __Pyx_GIVEREF(__pyx_t_13);
        PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_13);
        __pyx_t_13 = 0;
        __Pyx_INCREF(__pyx_kp_u_Expected_a_buffer_got);
        __pyx_t_5 += 25;
        __Pyx_GIVEREF(__pyx_kp_u_Expected_a_buffer_got);
        PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_kp_u_Expected_a_buffer_got);
        __pyx_t_13 = __Pyx_PyUnicode_Join(__pyx_t_15, 3, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 820, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
/* … */
        __pyx_t_15 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_13, __pyx_t_25); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 820, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
        __pyx_t_25 = NULL;
        __pyx_t_16 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_12))) {
          __pyx_t_25 = PyMethod_GET_SELF(__pyx_t_12);
          if (likely(__pyx_t_25)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
            __Pyx_INCREF(__pyx_t_25);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_12, function);
            __pyx_t_16 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_25, __pyx_t_14, __pyx_t_15};
          __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_16, 2+__pyx_t_16);
          __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 818, __pyx_L26_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        }
+0821:             f'{pandas_col.series!r} ({_fqn(type(pandas_col.series))})') from be
        __pyx_t_15 = PyTuple_New(4); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 821, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_5 = 0;
        __pyx_t_6 = 127;
        __pyx_t_24 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_pandas_col->series), __pyx_empty_unicode); if (unlikely(!__pyx_t_24)) __PYX_ERR(1, 821, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_24);
        __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_24) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_24) : __pyx_t_6;
        __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_24);
        __Pyx_GIVEREF(__pyx_t_24);
        PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_24);
        __pyx_t_24 = 0;
        __Pyx_INCREF(__pyx_kp_u__20);
        __pyx_t_5 += 2;
        __Pyx_GIVEREF(__pyx_kp_u__20);
        PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_kp_u__20);
        __pyx_t_24 = __pyx_f_7questdb_7ingress__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_pandas_col->series)))); if (unlikely(!__pyx_t_24)) __PYX_ERR(1, 821, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_24);
        __pyx_t_25 = __Pyx_PyUnicode_Unicode(__pyx_t_24); if (unlikely(!__pyx_t_25)) __PYX_ERR(1, 821, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_25);
        __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
        __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_25) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_25) : __pyx_t_6;
        __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_25);
        __Pyx_GIVEREF(__pyx_t_25);
        PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_t_25);
        __pyx_t_25 = 0;
        __Pyx_INCREF(__pyx_kp_u__12);
        __pyx_t_5 += 1;
        __Pyx_GIVEREF(__pyx_kp_u__12);
        PyTuple_SET_ITEM(__pyx_t_15, 3, __pyx_kp_u__12);
        __pyx_t_25 = __Pyx_PyUnicode_Join(__pyx_t_15, 4, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_25)) __PYX_ERR(1, 821, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_25);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
/* … */
        __Pyx_Raise(__pyx_t_1, 0, 0, __pyx_v_be);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __PYX_ERR(1, 818, __pyx_L26_error)
      }
+0822:     _dataframe_alloc_chunks(1, col)
  __pyx_t_27 = __pyx_f_7questdb_7ingress__dataframe_alloc_chunks(1, __pyx_v_col); if (unlikely(__pyx_t_27 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 822, __pyx_L1_error)
+0823:     mapped = &col.setup.chunks.chunks[0]
  __pyx_v_mapped = (&(__pyx_v_col->setup->chunks.chunks[0]));
 0824: 
 0825:     # Total number of elements.
+0826:     mapped.length = (
  __pyx_v_mapped->length = __Pyx_div_int64_t(((int64_t)__pyx_v_col->setup->pybuf.len), ((int64_t)__pyx_v_col->setup->pybuf.itemsize));
+0827:         <int64_t>col.setup.pybuf.len // <int64_t>col.setup.pybuf.itemsize)
  if (unlikely(((int64_t)__pyx_v_col->setup->pybuf.itemsize) == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
    __PYX_ERR(1, 827, __pyx_L1_error)
  }
  else if (sizeof(int64_t) == sizeof(long) && (!(((int64_t)-1) > 0)) && unlikely(((int64_t)__pyx_v_col->setup->pybuf.itemsize) == (int64_t)-1)  && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(((int64_t)__pyx_v_col->setup->pybuf.len)))) {
    PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
    __PYX_ERR(1, 827, __pyx_L1_error)
  }
+0828:     mapped.null_count = 0
  __pyx_v_mapped->null_count = 0;
+0829:     mapped.offset = 0
  __pyx_v_mapped->offset = 0;
+0830:     mapped.n_buffers = 2
  __pyx_v_mapped->n_buffers = 2;
+0831:     mapped.n_children = 0
  __pyx_v_mapped->n_children = 0;
+0832:     mapped.buffers = <const void**>calloc(2, sizeof(const void*))
  __pyx_v_mapped->buffers = ((void const **)calloc(2, (sizeof(void const *))));
+0833:     mapped.buffers[0] = NULL
  (__pyx_v_mapped->buffers[0]) = NULL;
+0834:     mapped.buffers[1] = <const void*>col.setup.pybuf.buf
  (__pyx_v_mapped->buffers[1]) = ((void const *)__pyx_v_col->setup->pybuf.buf);
+0835:     mapped.children = NULL
  __pyx_v_mapped->children = NULL;
+0836:     mapped.dictionary = NULL
  __pyx_v_mapped->dictionary = NULL;
+0837:     mapped.release = _dataframe_free_mapped_arrow  # to cleanup allocated array.
  __pyx_v_mapped->release = __pyx_f_7questdb_7ingress__dataframe_free_mapped_arrow;
 0838: 
+0839: cdef void_int _dataframe_series_as_arrow(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_series_as_arrow(struct __pyx_obj_7questdb_7ingress_PandasCol *__pyx_v_pandas_col, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col) {
  PyObject *__pyx_v_array = 0;
  PyObject *__pyx_v_chunks = 0;
  size_t __pyx_v_n_chunks;
  size_t __pyx_v_chunk_index;
  __pyx_t_7questdb_7ingress_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_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("questdb.ingress._dataframe_series_as_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_array);
  __Pyx_XDECREF(__pyx_v_chunks);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0840:         PandasCol pandas_col,
 0841:         col_t* col) except -1:
 0842:     cdef object array
 0843:     cdef list chunks
 0844:     cdef size_t n_chunks
 0845:     cdef size_t chunk_index
+0846:     array = _PYARROW.Array.from_pandas(pandas_col.series)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__PYARROW, __pyx_n_s_Array); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 846, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_from_pandas); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 846, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_pandas_col->series};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 846, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_v_array = __pyx_t_1;
  __pyx_t_1 = 0;
+0847:     if isinstance(array, _PYARROW.ChunkedArray):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__PYARROW, __pyx_n_s_ChunkedArray); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 847, __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(1, 847, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_5) {
/* … */
    goto __pyx_L3;
  }
+0848:         chunks = array.chunks
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_array, __pyx_n_s_chunks); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 848, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_1))) __PYX_ERR(1, 848, __pyx_L1_error)
    __pyx_v_chunks = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
 0849:     else:
+0850:         chunks = [array]
  /*else*/ {
    __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 850, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_array);
    __Pyx_GIVEREF(__pyx_v_array);
    if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_v_array)) __PYX_ERR(1, 850, __pyx_L1_error);
    __pyx_v_chunks = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
  }
  __pyx_L3:;
 0851: 
+0852:     n_chunks = len(chunks)
  if (unlikely(__pyx_v_chunks == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(1, 852, __pyx_L1_error)
  }
  __pyx_t_6 = __Pyx_PyList_GET_SIZE(__pyx_v_chunks); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(1, 852, __pyx_L1_error)
  __pyx_v_n_chunks = __pyx_t_6;
+0853:     _dataframe_alloc_chunks(n_chunks, col)
  __pyx_t_7 = __pyx_f_7questdb_7ingress__dataframe_alloc_chunks(__pyx_v_n_chunks, __pyx_v_col); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 853, __pyx_L1_error)
 0854: 
+0855:     for chunk_index in range(n_chunks):
  __pyx_t_8 = __pyx_v_n_chunks;
  __pyx_t_9 = __pyx_t_8;
  for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
    __pyx_v_chunk_index = __pyx_t_10;
+0856:         array = chunks[chunk_index]
    if (unlikely(__pyx_v_chunks == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 856, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_chunks, __pyx_v_chunk_index, size_t, 0, __Pyx_PyInt_FromSize_t, 1, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 856, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_array, __pyx_t_1);
    __pyx_t_1 = 0;
+0857:         if chunk_index == 0:
    __pyx_t_5 = (__pyx_v_chunk_index == 0);
    if (__pyx_t_5) {
/* … */
      goto __pyx_L6;
    }
+0858:             chunks[chunk_index]._export_to_c(
      if (unlikely(__pyx_v_chunks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(1, 858, __pyx_L1_error)
      }
      __pyx_t_3 = __Pyx_GetItemInt_List(__pyx_v_chunks, __pyx_v_chunk_index, size_t, 0, __Pyx_PyInt_FromSize_t, 1, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 858, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_export_to_c); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 858, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0859:                 <uintptr_t>&col.setup.chunks.chunks[chunk_index],
      __pyx_t_3 = __Pyx_PyInt_FromSize_t(((uintptr_t)(&(__pyx_v_col->setup->chunks.chunks[__pyx_v_chunk_index])))); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 859, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
+0860:                 <uintptr_t>&col.setup.arrow_schema)
      __pyx_t_11 = __Pyx_PyInt_FromSize_t(((uintptr_t)(&__pyx_v_col->setup->arrow_schema))); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 860, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_12 = NULL;
      __pyx_t_4 = 0;
      #if CYTHON_UNPACK_METHODS
      if (likely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_12)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_12);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
          __pyx_t_4 = 1;
        }
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_t_3, __pyx_t_11};
        __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4);
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 858, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0861:         else:
+0862:             chunks[chunk_index]._export_to_c(
    /*else*/ {
      if (unlikely(__pyx_v_chunks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(1, 862, __pyx_L1_error)
      }
      __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_chunks, __pyx_v_chunk_index, size_t, 0, __Pyx_PyInt_FromSize_t, 1, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 862, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_export_to_c); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 862, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0863:                 <uintptr_t>&col.setup.chunks.chunks[chunk_index])
      __pyx_t_2 = __Pyx_PyInt_FromSize_t(((uintptr_t)(&(__pyx_v_col->setup->chunks.chunks[__pyx_v_chunk_index])))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 863, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = NULL;
      __pyx_t_4 = 0;
      #if CYTHON_UNPACK_METHODS
      if (likely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
          __pyx_t_4 = 1;
        }
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_2};
        __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 862, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __pyx_L6:;
  }
 0864: 
 0865: 
+0866: cdef const char* _ARROW_FMT_INT8 = "c"
  __pyx_v_7questdb_7ingress__ARROW_FMT_INT8 = ((char const *)"c");
+0867: cdef const char* _ARROW_FMT_INT16 = "s"
  __pyx_v_7questdb_7ingress__ARROW_FMT_INT16 = ((char const *)"s");
+0868: cdef const char* _ARROW_FMT_INT32 = "i"
  __pyx_v_7questdb_7ingress__ARROW_FMT_INT32 = ((char const *)"i");
+0869: cdef const char* _ARROW_FMT_UTF8_STRING = 'u'
  __pyx_v_7questdb_7ingress__ARROW_FMT_UTF8_STRING = ((char const *)"u");
+0870: cdef const char* _ARROW_FMT_LRG_UTF8_STRING = 'U'
  __pyx_v_7questdb_7ingress__ARROW_FMT_LRG_UTF8_STRING = ((char const *)"U");
 0871: 
 0872: 
+0873: cdef void_int _dataframe_category_series_as_arrow(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_category_series_as_arrow(struct __pyx_obj_7questdb_7ingress_PandasCol *__pyx_v_pandas_col, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col) {
  char const *__pyx_v_format;
  __pyx_t_7questdb_7ingress_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_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("questdb.ingress._dataframe_category_series_as_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0874:         PandasCol pandas_col, col_t* col) except -1:
 0875:     cdef const char* format
+0876:     _dataframe_series_as_arrow(pandas_col, col)
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_series_as_arrow(__pyx_v_pandas_col, __pyx_v_col); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 876, __pyx_L1_error)
+0877:     format = col.setup.arrow_schema.format
  __pyx_t_2 = __pyx_v_col->setup->arrow_schema.format;
  __pyx_v_format = __pyx_t_2;
+0878:     if strncmp(format, _ARROW_FMT_INT8, 1) == 0:
  __pyx_t_3 = (strncmp(__pyx_v_format, __pyx_v_7questdb_7ingress__ARROW_FMT_INT8, 1) == 0);
  if (__pyx_t_3) {
/* … */
    goto __pyx_L3;
  }
+0879:         col.setup.source = col_source_t.col_source_str_i8_cat
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_str_i8_cat;
+0880:     elif strncmp(format, _ARROW_FMT_INT16, 1) == 0:
  __pyx_t_3 = (strncmp(__pyx_v_format, __pyx_v_7questdb_7ingress__ARROW_FMT_INT16, 1) == 0);
  if (__pyx_t_3) {
/* … */
    goto __pyx_L3;
  }
+0881:         col.setup.source = col_source_t.col_source_str_i16_cat
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_str_i16_cat;
+0882:     elif strncmp(format, _ARROW_FMT_INT32, 1) == 0:
  __pyx_t_3 = (strncmp(__pyx_v_format, __pyx_v_7questdb_7ingress__ARROW_FMT_INT32, 1) == 0);
  if (likely(__pyx_t_3)) {
/* … */
    goto __pyx_L3;
  }
+0883:         col.setup.source = col_source_t.col_source_str_i32_cat
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_str_i32_cat;
 0884:     else:
+0885:         raise IngressError(
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_IngressError); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 885, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+0886:             IngressErrorCode.BadDataFrame,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_IngressErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 886, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_BadDataFrame); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 886, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+0887:             f'Bad column {pandas_col.name!r}: ' +
    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 887, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_8 = 0;
    __pyx_t_9 = 127;
    __Pyx_INCREF(__pyx_kp_u_Bad_column);
    __pyx_t_8 += 11;
    __Pyx_GIVEREF(__pyx_kp_u_Bad_column);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_kp_u_Bad_column);
    __pyx_t_10 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_pandas_col->name), __pyx_empty_unicode); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 887, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_9 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) > __pyx_t_9) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) : __pyx_t_9;
    __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_10);
    __pyx_t_10 = 0;
    __Pyx_INCREF(__pyx_kp_u__21);
    __pyx_t_8 += 2;
    __Pyx_GIVEREF(__pyx_kp_u__21);
    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_kp_u__21);
    __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_6, 3, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 887, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_10, __pyx_kp_u_Unsupported_arrow_category_index); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 887, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+0888:             'Unsupported arrow category index type. ' +
    __pyx_t_10 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_6, __pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 888, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = NULL;
    __pyx_t_13 = 0;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_13 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_t_7, __pyx_t_10};
      __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_13, 2+__pyx_t_13);
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 885, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(1, 885, __pyx_L1_error)
  }
  __pyx_L3:;
+0889:             f'Got {(<bytes>format).decode("utf-8")!r}.')
    __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 889, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_8 = 0;
    __pyx_t_9 = 127;
    __Pyx_INCREF(__pyx_kp_u_Got);
    __pyx_t_8 += 4;
    __Pyx_GIVEREF(__pyx_kp_u_Got);
    PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_kp_u_Got);
    __pyx_t_11 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 889, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    if (unlikely(__pyx_t_11 == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode");
      __PYX_ERR(1, 889, __pyx_L1_error)
    }
    __pyx_t_12 = __Pyx_decode_bytes(((PyObject*)__pyx_t_11), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 889, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_12), __pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 889, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_9 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11) > __pyx_t_9) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11) : __pyx_t_9;
    __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_11);
    __pyx_t_11 = 0;
    __Pyx_INCREF(__pyx_kp_u__5);
    __pyx_t_8 += 1;
    __Pyx_GIVEREF(__pyx_kp_u__5);
    PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_kp_u__5);
    __pyx_t_11 = __Pyx_PyUnicode_Join(__pyx_t_10, 3, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 889, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
 0890: 
+0891:     format = col.setup.arrow_schema.dictionary.format
  __pyx_t_2 = __pyx_v_col->setup->arrow_schema.dictionary->format;
  __pyx_v_format = __pyx_t_2;
+0892:     if (strncmp(format, _ARROW_FMT_UTF8_STRING, 1) != 0):
  __pyx_t_3 = (strncmp(__pyx_v_format, __pyx_v_7questdb_7ingress__ARROW_FMT_UTF8_STRING, 1) != 0);
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+0893:         raise IngressError(
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_IngressError); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 893, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+0894:             IngressErrorCode.BadDataFrame,
    __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_IngressErrorCode); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 894, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_BadDataFrame); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 894, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+0895:             f'Bad column {pandas_col.name!r}: ' +
    __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 895, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_8 = 0;
    __pyx_t_9 = 127;
    __Pyx_INCREF(__pyx_kp_u_Bad_column);
    __pyx_t_8 += 11;
    __Pyx_GIVEREF(__pyx_kp_u_Bad_column);
    PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_kp_u_Bad_column);
    __pyx_t_11 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_pandas_col->name), __pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 895, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_9 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11) > __pyx_t_9) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11) : __pyx_t_9;
    __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_11);
    __pyx_t_11 = 0;
    __Pyx_INCREF(__pyx_kp_u__21);
    __pyx_t_8 += 2;
    __Pyx_GIVEREF(__pyx_kp_u__21);
    PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_kp_u__21);
    __pyx_t_11 = __Pyx_PyUnicode_Join(__pyx_t_10, 3, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 895, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_11, __pyx_kp_u_Expected_a_category_of_strings); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 895, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+0896:             'Expected a category of strings, ' +
    __pyx_t_11 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_10, __pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 896, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = NULL;
    __pyx_t_13 = 0;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_13 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_t_7, __pyx_t_11};
      __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_13, 2+__pyx_t_13);
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 893, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(1, 893, __pyx_L1_error)
+0897:             f'got a category of {pandas_col.series.dtype.categories.dtype}.')
    __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 897, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_8 = 0;
    __pyx_t_9 = 127;
    __Pyx_INCREF(__pyx_kp_u_got_a_category_of);
    __pyx_t_8 += 18;
    __Pyx_GIVEREF(__pyx_kp_u_got_a_category_of);
    PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_kp_u_got_a_category_of);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_pandas_col->series, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 897, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_categories); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 897, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 897, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_t_6, __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 897, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_9 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) > __pyx_t_9) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) : __pyx_t_9;
    __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_12);
    __pyx_t_12 = 0;
    __Pyx_INCREF(__pyx_kp_u__5);
    __pyx_t_8 += 1;
    __Pyx_GIVEREF(__pyx_kp_u__5);
    PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_kp_u__5);
    __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_11, 3, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 897, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
 0898: 
 0899: 
+0900: cdef inline bint _dataframe_is_float_nan(PyObject* obj) noexcept:
static CYTHON_INLINE int __pyx_f_7questdb_7ingress__dataframe_is_float_nan(PyObject *__pyx_v_obj) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+0901:     return PyFloat_CheckExact(obj) and isnan(PyFloat_AS_DOUBLE(obj))
  __pyx_t_2 = PyFloat_CheckExact(__pyx_v_obj);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = isnan(PyFloat_AS_DOUBLE(__pyx_v_obj));
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 0902: 
 0903: 
+0904: cdef inline bint _dataframe_is_null_pyobj(PyObject* obj) noexcept:
static CYTHON_INLINE int __pyx_f_7questdb_7ingress__dataframe_is_null_pyobj(PyObject *__pyx_v_obj) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0905:     return (
+0906:         (obj == Py_None) or
  __pyx_t_2 = (__pyx_v_obj == Py_None);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
+0907:         (obj == <PyObject*>_PANDAS_NA) or
  __pyx_t_2 = (__pyx_v_obj == ((PyObject *)__pyx_v_7questdb_7ingress__PANDAS_NA));
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
+0908:         _dataframe_is_float_nan(obj))
  __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_is_float_nan(__pyx_v_obj);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 0909: 
 0910: # noinspection PyUnreachableCode
+0911: cdef void_int _dataframe_series_sniff_pyobj(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_series_sniff_pyobj(struct __pyx_obj_7questdb_7ingress_PandasCol *__pyx_v_pandas_col, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col) {
  size_t __pyx_v_el_index;
  size_t __pyx_v_n_elements;
  PyObject **__pyx_v_obj_arr;
  PyObject *__pyx_v_obj;
  __pyx_t_7questdb_7ingress_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_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("questdb.ingress._dataframe_series_sniff_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0912:         PandasCol pandas_col, col_t* col) except -1:
 0913:     """
 0914:     Deduct the type of the object column.
 0915:     Object columns can contain pretty much anything, but they usually don't.
 0916:     We make an educated guess by finding the first non-null value in the column.
 0917:     """
 0918:     cdef size_t el_index
+0919:     cdef size_t n_elements = len(pandas_col.series)
  __pyx_t_1 = __pyx_v_pandas_col->series;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(1, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_n_elements = __pyx_t_2;
 0920:     cdef PyObject** obj_arr
 0921:     cdef PyObject* obj
+0922:     _dataframe_series_as_pybuf(pandas_col, col)
  __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_pybuf(__pyx_v_pandas_col, __pyx_v_col, NULL); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 922, __pyx_L1_error)
+0923:     obj_arr = <PyObject**>(col.setup.pybuf.buf)
  __pyx_v_obj_arr = ((PyObject **)__pyx_v_col->setup->pybuf.buf);
+0924:     for el_index in range(n_elements):
  __pyx_t_4 = __pyx_v_n_elements;
  __pyx_t_5 = __pyx_t_4;
  for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
    __pyx_v_el_index = __pyx_t_6;
+0925:         obj = obj_arr[el_index]
    __pyx_v_obj = (__pyx_v_obj_arr[__pyx_v_el_index]);
+0926:         if not _dataframe_is_null_pyobj(obj):
    __pyx_t_7 = (!__pyx_f_7questdb_7ingress__dataframe_is_null_pyobj(__pyx_v_obj));
    if (__pyx_t_7) {
/* … */
    }
  }
+0927:             if PyBool_Check(obj):
      __pyx_t_7 = PyBool_Check(__pyx_v_obj);
      if (__pyx_t_7) {
/* … */
        goto __pyx_L6;
      }
+0928:                 col.setup.source = col_source_t.col_source_bool_pyobj
        __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_bool_pyobj;
+0929:             elif PyLong_CheckExact(obj):
      __pyx_t_7 = PyLong_CheckExact(__pyx_v_obj);
      if (__pyx_t_7) {
/* … */
        goto __pyx_L6;
      }
+0930:                 col.setup.source = col_source_t.col_source_int_pyobj
        __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_int_pyobj;
+0931:             elif PyFloat_CheckExact(obj):
      __pyx_t_7 = PyFloat_CheckExact(__pyx_v_obj);
      if (__pyx_t_7) {
/* … */
        goto __pyx_L6;
      }
+0932:                 col.setup.source = col_source_t.col_source_float_pyobj
        __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_float_pyobj;
+0933:             elif PyUnicode_CheckExact(obj):
      __pyx_t_7 = PyUnicode_CheckExact(__pyx_v_obj);
      if (likely(__pyx_t_7)) {
/* … */
        goto __pyx_L6;
      }
+0934:                 col.setup.source = col_source_t.col_source_str_pyobj
        __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_str_pyobj;
+0935:             elif PyBytes_CheckExact(obj):
      __pyx_t_7 = PyBytes_CheckExact(__pyx_v_obj);
      if (unlikely(__pyx_t_7)) {
/* … */
      }
+0936:                 raise IngressError(
        __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_IngressError); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 936, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
+0937:                     IngressErrorCode.BadDataFrame,
        __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_IngressErrorCode); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 937, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_BadDataFrame); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 937, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+0938:                     f'Bad column {pandas_col.name!r}: ' +
        __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 938, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_2 = 0;
        __pyx_t_11 = 127;
        __Pyx_INCREF(__pyx_kp_u_Bad_column);
        __pyx_t_2 += 11;
        __Pyx_GIVEREF(__pyx_kp_u_Bad_column);
        PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_kp_u_Bad_column);
        __pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_pandas_col->name), __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 938, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) : __pyx_t_11;
        __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12);
        __Pyx_GIVEREF(__pyx_t_12);
        PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_12);
        __pyx_t_12 = 0;
        __Pyx_INCREF(__pyx_kp_u__21);
        __pyx_t_2 += 2;
        __Pyx_GIVEREF(__pyx_kp_u__21);
        PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_kp_u__21);
        __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_9, 3, __pyx_t_2, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 938, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_9 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_12, __pyx_kp_u_Unsupported_object_column_contai); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 938, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+0939:                     'Unsupported object column containing bytes.' +
        __pyx_t_12 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_9, __pyx_kp_u_If_this_is_a_string_column_decod); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 939, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+0940:                     'If this is a string column, decode it first. ' +
        __pyx_t_9 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_12, __pyx_kp_u_See_https_stackoverflow_com_ques); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 940, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __pyx_t_12 = NULL;
        __pyx_t_13 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_8))) {
          __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_8);
          if (likely(__pyx_t_12)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
            __Pyx_INCREF(__pyx_t_12);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_8, function);
            __pyx_t_13 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_t_10, __pyx_t_9};
          __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_13, 2+__pyx_t_13);
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 936, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        __Pyx_Raise(__pyx_t_1, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __PYX_ERR(1, 936, __pyx_L1_error)
 0941:                     'See: https://stackoverflow.com/questions/40389764/')
 0942:             else:
+0943:                 raise IngressError(
      /*else*/ {
        __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_IngressError); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 943, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
+0944:                     IngressErrorCode.BadDataFrame,
        __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_IngressErrorCode); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 944, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_BadDataFrame); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 944, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+0945:                     f'Bad column {pandas_col.name!r}: ' +
        __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 945, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_2 = 0;
        __pyx_t_11 = 127;
        __Pyx_INCREF(__pyx_kp_u_Bad_column);
        __pyx_t_2 += 11;
        __Pyx_GIVEREF(__pyx_kp_u_Bad_column);
        PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_kp_u_Bad_column);
        __pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_pandas_col->name), __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 945, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) : __pyx_t_11;
        __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12);
        __Pyx_GIVEREF(__pyx_t_12);
        PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_12);
        __pyx_t_12 = 0;
        __Pyx_INCREF(__pyx_kp_u__21);
        __pyx_t_2 += 2;
        __Pyx_GIVEREF(__pyx_kp_u__21);
        PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_kp_u__21);
        __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_9, 3, __pyx_t_2, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 945, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_9 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_12, __pyx_kp_u_Unsupported_object_column_contai_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 945, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+0946:                     f'Unsupported object column containing an object of type ' +
        __pyx_t_14 = __Pyx_PyUnicode_ConcatInPlaceSafe(__pyx_t_9, __pyx_t_12); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 946, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+0947:                     _fqn(type(<object>obj)) + '.')
        __pyx_t_12 = __pyx_f_7questdb_7ingress__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_obj))))); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 947, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
/* … */
        __pyx_t_12 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_14, __pyx_kp_u__5); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 947, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_14 = NULL;
        __pyx_t_13 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_8))) {
          __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_8);
          if (likely(__pyx_t_14)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
            __Pyx_INCREF(__pyx_t_14);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_8, function);
            __pyx_t_13 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_14, __pyx_t_10, __pyx_t_12};
          __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_13, 2+__pyx_t_13);
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 943, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        __Pyx_Raise(__pyx_t_1, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __PYX_ERR(1, 943, __pyx_L1_error)
      }
      __pyx_L6:;
+0948:             return 0
      __pyx_r = 0;
      goto __pyx_L0;
 0949: 
 0950:     # We haven't returned yet, so we've hit an object column that
 0951:     # exclusively has null values. We will just skip this column.
+0952:     col.setup.source = col_source_t.col_source_nulls
  __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_nulls;
 0953: 
 0954: 
+0955: cdef void_int _dataframe_resolve_source_and_buffers(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_resolve_source_and_buffers(struct __pyx_obj_7questdb_7ingress_PandasCol *__pyx_v_pandas_col, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col) {
  PyObject *__pyx_v_dtype = 0;
  __pyx_t_7questdb_7ingress_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_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("questdb.ingress._dataframe_resolve_source_and_buffers", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0956:         PandasCol pandas_col, col_t* col) except -1:
+0957:     cdef object dtype = pandas_col.dtype
  __pyx_t_1 = __pyx_v_pandas_col->dtype;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_dtype = __pyx_t_1;
  __pyx_t_1 = 0;
+0958:     if isinstance(dtype, _NUMPY_BOOL):
  __pyx_t_1 = __pyx_v_7questdb_7ingress__NUMPY_BOOL;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 958, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+0959:         col.setup.source = col_source_t.col_source_bool_numpy
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_bool_numpy;
+0960:         _dataframe_series_as_pybuf(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_pybuf(__pyx_v_pandas_col, __pyx_v_col, NULL); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 960, __pyx_L1_error)
+0961:     elif isinstance(dtype, _PANDAS.BooleanDtype):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__PANDAS, __pyx_n_s_BooleanDtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 961, __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(1, 961, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+0962:         col.setup.source = col_source_t.col_source_bool_arrow
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_bool_arrow;
+0963:         _dataframe_series_as_arrow(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_arrow(__pyx_v_pandas_col, __pyx_v_col); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 963, __pyx_L1_error)
+0964:     elif isinstance(dtype, _NUMPY_UINT8):
  __pyx_t_1 = __pyx_v_7questdb_7ingress__NUMPY_UINT8;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 964, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+0965:         col.setup.source = col_source_t.col_source_u8_numpy
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_u8_numpy;
+0966:         _dataframe_series_as_pybuf(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_pybuf(__pyx_v_pandas_col, __pyx_v_col, NULL); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 966, __pyx_L1_error)
+0967:     elif isinstance(dtype, _NUMPY_INT8):
  __pyx_t_1 = __pyx_v_7questdb_7ingress__NUMPY_INT8;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 967, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+0968:         col.setup.source = col_source_t.col_source_i8_numpy
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_i8_numpy;
+0969:         _dataframe_series_as_pybuf(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_pybuf(__pyx_v_pandas_col, __pyx_v_col, NULL); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 969, __pyx_L1_error)
+0970:     elif isinstance(dtype, _NUMPY_UINT16):
  __pyx_t_1 = __pyx_v_7questdb_7ingress__NUMPY_UINT16;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 970, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+0971:         col.setup.source = col_source_t.col_source_u16_numpy
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_u16_numpy;
+0972:         _dataframe_series_as_pybuf(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_pybuf(__pyx_v_pandas_col, __pyx_v_col, NULL); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 972, __pyx_L1_error)
+0973:     elif isinstance(dtype, _NUMPY_INT16):
  __pyx_t_1 = __pyx_v_7questdb_7ingress__NUMPY_INT16;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 973, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+0974:         col.setup.source = col_source_t.col_source_i16_numpy
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_i16_numpy;
+0975:         _dataframe_series_as_pybuf(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_pybuf(__pyx_v_pandas_col, __pyx_v_col, NULL); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 975, __pyx_L1_error)
+0976:     elif isinstance(dtype, _NUMPY_UINT32):
  __pyx_t_1 = __pyx_v_7questdb_7ingress__NUMPY_UINT32;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 976, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+0977:         col.setup.source = col_source_t.col_source_u32_numpy
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_u32_numpy;
+0978:         _dataframe_series_as_pybuf(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_pybuf(__pyx_v_pandas_col, __pyx_v_col, NULL); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 978, __pyx_L1_error)
+0979:     elif isinstance(dtype, _NUMPY_INT32):
  __pyx_t_1 = __pyx_v_7questdb_7ingress__NUMPY_INT32;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 979, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+0980:         col.setup.source = col_source_t.col_source_i32_numpy
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_i32_numpy;
+0981:         _dataframe_series_as_pybuf(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_pybuf(__pyx_v_pandas_col, __pyx_v_col, NULL); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 981, __pyx_L1_error)
+0982:     elif isinstance(dtype, _NUMPY_UINT64):
  __pyx_t_1 = __pyx_v_7questdb_7ingress__NUMPY_UINT64;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 982, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+0983:         col.setup.source = col_source_t.col_source_u64_numpy
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_u64_numpy;
+0984:         _dataframe_series_as_pybuf(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_pybuf(__pyx_v_pandas_col, __pyx_v_col, NULL); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 984, __pyx_L1_error)
+0985:     elif isinstance(dtype, _NUMPY_INT64):
  __pyx_t_1 = __pyx_v_7questdb_7ingress__NUMPY_INT64;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 985, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+0986:         col.setup.source = col_source_t.col_source_i64_numpy
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_i64_numpy;
+0987:         _dataframe_series_as_pybuf(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_pybuf(__pyx_v_pandas_col, __pyx_v_col, NULL); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 987, __pyx_L1_error)
+0988:     elif isinstance(dtype, _PANDAS.UInt8Dtype):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__PANDAS, __pyx_n_s_UInt8Dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 988, __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(1, 988, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+0989:         col.setup.source = col_source_t.col_source_u8_arrow
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_u8_arrow;
+0990:         _dataframe_series_as_arrow(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_arrow(__pyx_v_pandas_col, __pyx_v_col); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 990, __pyx_L1_error)
+0991:     elif isinstance(dtype, _PANDAS.Int8Dtype):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__PANDAS, __pyx_n_s_Int8Dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 991, __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(1, 991, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+0992:         col.setup.source = col_source_t.col_source_i8_arrow
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_i8_arrow;
+0993:         _dataframe_series_as_arrow(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_arrow(__pyx_v_pandas_col, __pyx_v_col); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 993, __pyx_L1_error)
+0994:     elif isinstance(dtype, _PANDAS.UInt16Dtype):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__PANDAS, __pyx_n_s_UInt16Dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 994, __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(1, 994, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+0995:         col.setup.source = col_source_t.col_source_u16_arrow
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_u16_arrow;
+0996:         _dataframe_series_as_arrow(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_arrow(__pyx_v_pandas_col, __pyx_v_col); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 996, __pyx_L1_error)
+0997:     elif isinstance(dtype, _PANDAS.Int16Dtype):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__PANDAS, __pyx_n_s_Int16Dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 997, __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(1, 997, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+0998:         col.setup.source = col_source_t.col_source_i16_arrow
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_i16_arrow;
+0999:         _dataframe_series_as_arrow(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_arrow(__pyx_v_pandas_col, __pyx_v_col); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 999, __pyx_L1_error)
+1000:     elif isinstance(dtype, _PANDAS.UInt32Dtype):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__PANDAS, __pyx_n_s_UInt32Dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1000, __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(1, 1000, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+1001:         col.setup.source = col_source_t.col_source_u32_arrow
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_u32_arrow;
+1002:         _dataframe_series_as_arrow(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_arrow(__pyx_v_pandas_col, __pyx_v_col); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1002, __pyx_L1_error)
+1003:     elif isinstance(dtype, _PANDAS.Int32Dtype):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__PANDAS, __pyx_n_s_Int32Dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1003, __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(1, 1003, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+1004:         col.setup.source = col_source_t.col_source_i32_arrow
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_i32_arrow;
+1005:         _dataframe_series_as_arrow(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_arrow(__pyx_v_pandas_col, __pyx_v_col); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1005, __pyx_L1_error)
+1006:     elif isinstance(dtype, _PANDAS.UInt64Dtype):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__PANDAS, __pyx_n_s_UInt64Dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1006, __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(1, 1006, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+1007:         col.setup.source = col_source_t.col_source_u64_arrow
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_u64_arrow;
+1008:         _dataframe_series_as_arrow(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_arrow(__pyx_v_pandas_col, __pyx_v_col); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1008, __pyx_L1_error)
+1009:     elif isinstance(dtype, _PANDAS.Int64Dtype):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__PANDAS, __pyx_n_s_Int64Dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1009, __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(1, 1009, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+1010:         col.setup.source = col_source_t.col_source_i64_arrow
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_i64_arrow;
+1011:         _dataframe_series_as_arrow(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_arrow(__pyx_v_pandas_col, __pyx_v_col); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1011, __pyx_L1_error)
+1012:     elif isinstance(dtype, _NUMPY_FLOAT32):
  __pyx_t_1 = __pyx_v_7questdb_7ingress__NUMPY_FLOAT32;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 1012, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+1013:         col.setup.source = col_source_t.col_source_f32_numpy
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_f32_numpy;
+1014:         _dataframe_series_as_pybuf(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_pybuf(__pyx_v_pandas_col, __pyx_v_col, NULL); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1014, __pyx_L1_error)
+1015:     elif isinstance(dtype, _NUMPY_FLOAT64):
  __pyx_t_1 = __pyx_v_7questdb_7ingress__NUMPY_FLOAT64;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 1015, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+1016:         col.setup.source = col_source_t.col_source_f64_numpy
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_f64_numpy;
+1017:         _dataframe_series_as_pybuf(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_pybuf(__pyx_v_pandas_col, __pyx_v_col, NULL); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1017, __pyx_L1_error)
+1018:     elif isinstance(dtype, _PANDAS.Float32Dtype):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__PANDAS, __pyx_n_s_Float32Dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1018, __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(1, 1018, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+1019:         col.setup.source = col_source_t.col_source_f32_arrow
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_f32_arrow;
+1020:         _dataframe_series_as_arrow(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_arrow(__pyx_v_pandas_col, __pyx_v_col); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1020, __pyx_L1_error)
+1021:     elif isinstance(dtype, _PANDAS.Float64Dtype):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__PANDAS, __pyx_n_s_Float64Dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1021, __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(1, 1021, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+1022:         col.setup.source = col_source_t.col_source_f64_arrow
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_f64_arrow;
+1023:         _dataframe_series_as_arrow(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_arrow(__pyx_v_pandas_col, __pyx_v_col); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1023, __pyx_L1_error)
+1024:     elif isinstance(dtype, _PANDAS.StringDtype):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__PANDAS, __pyx_n_s_StringDtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1024, __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(1, 1024, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+1025:         if dtype.storage == 'pyarrow':
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_storage); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1025, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_pyarrow, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 1025, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_2) {
/* … */
      goto __pyx_L4;
    }
+1026:             _dataframe_series_as_arrow(pandas_col, col)
      __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_arrow(__pyx_v_pandas_col, __pyx_v_col); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1026, __pyx_L1_error)
+1027:             if strncmp(col.setup.arrow_schema.format, _ARROW_FMT_UTF8_STRING, 1) == 0:
      __pyx_t_2 = (strncmp(__pyx_v_col->setup->arrow_schema.format, __pyx_v_7questdb_7ingress__ARROW_FMT_UTF8_STRING, 1) == 0);
      if (__pyx_t_2) {
/* … */
        goto __pyx_L5;
      }
+1028:                 col.setup.source = col_source_t.col_source_str_utf8_arrow
        __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_str_utf8_arrow;
+1029:             elif strncmp(col.setup.arrow_schema.format, _ARROW_FMT_LRG_UTF8_STRING, 1) == 0:
      __pyx_t_2 = (strncmp(__pyx_v_col->setup->arrow_schema.format, __pyx_v_7questdb_7ingress__ARROW_FMT_LRG_UTF8_STRING, 1) == 0);
      if (likely(__pyx_t_2)) {
/* … */
        goto __pyx_L5;
      }
+1030:                 col.setup.source = col_source_t.col_source_str_lrg_utf8_arrow
        __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_str_lrg_utf8_arrow;
 1031:             else:
+1032:                 raise IngressError(
      /*else*/ {
        __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_IngressError); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1032, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
+1033:                     IngressErrorCode.BadDataFrame,
        __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_IngressErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1033, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_BadDataFrame); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1033, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1034:                     f'Unknown string dtype storage: {dtype.storage} ' +
        __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1034, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_7 = 0;
        __pyx_t_8 = 127;
        __Pyx_INCREF(__pyx_kp_u_Unknown_string_dtype_storage);
        __pyx_t_7 += 30;
        __Pyx_GIVEREF(__pyx_kp_u_Unknown_string_dtype_storage);
        PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_Unknown_string_dtype_storage);
        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_storage); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1034, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_10 = __Pyx_PyObject_FormatSimple(__pyx_t_9, __pyx_empty_unicode); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1034, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) : __pyx_t_8;
        __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10);
        __Pyx_GIVEREF(__pyx_t_10);
        PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_10);
        __pyx_t_10 = 0;
        __Pyx_INCREF(__pyx_kp_u__22);
        __pyx_t_7 += 1;
        __Pyx_GIVEREF(__pyx_kp_u__22);
        PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u__22);
        __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1034, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
        __pyx_t_5 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_10, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1034, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+1035:                     f'for column {pandas_col.name} of dtype {dtype}. ' +
        __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1035, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_7 = 0;
        __pyx_t_8 = 127;
        __Pyx_INCREF(__pyx_kp_u_for_column);
        __pyx_t_7 += 11;
        __Pyx_GIVEREF(__pyx_kp_u_for_column);
        PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_for_column);
        __pyx_t_9 = __Pyx_PyUnicode_Unicode(__pyx_v_pandas_col->name); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1035, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) : __pyx_t_8;
        __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9);
        __Pyx_GIVEREF(__pyx_t_9);
        PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_9);
        __pyx_t_9 = 0;
        __Pyx_INCREF(__pyx_kp_u_of_dtype);
        __pyx_t_7 += 10;
        __Pyx_GIVEREF(__pyx_kp_u_of_dtype);
        PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u_of_dtype);
        __pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_v_dtype, __pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1035, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) : __pyx_t_8;
        __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9);
        __Pyx_GIVEREF(__pyx_t_9);
        PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_9);
        __pyx_t_9 = 0;
        __Pyx_INCREF(__pyx_kp_u__18);
        __pyx_t_7 += 2;
        __Pyx_GIVEREF(__pyx_kp_u__18);
        PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_kp_u__18);
        __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_5, 5, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1035, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
        __pyx_t_9 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_5, __pyx_kp_u_Format_specifier); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1035, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1036:                     f'Format specifier: ' + repr(bytes(col.setup.arrow_schema.format).decode('latin-1')))
        __pyx_t_5 = __Pyx_PyBytes_FromString(__pyx_v_col->setup->arrow_schema.format); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1036, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_10 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_5); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1036, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_decode_bytes(__pyx_t_10, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeLatin1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1036, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_10 = PyObject_Repr(__pyx_t_5); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1036, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = PyNumber_Add(__pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1036, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_10 = NULL;
        __pyx_t_11 = 0;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_10)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_10);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
            __pyx_t_11 = 1;
          }
        }
        #endif
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_10, __pyx_t_6, __pyx_t_5};
          __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_11, 2+__pyx_t_11);
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 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(1, 1032, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        }
        __Pyx_Raise(__pyx_t_1, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __PYX_ERR(1, 1032, __pyx_L1_error)
      }
      __pyx_L5:;
+1037:         elif dtype.storage == 'python':
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_storage); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1037, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_python, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 1037, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (likely(__pyx_t_2)) {
/* … */
      goto __pyx_L4;
    }
+1038:             col.setup.source = col_source_t.col_source_str_pyobj
      __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_str_pyobj;
+1039:             _dataframe_series_as_pybuf(pandas_col, col)
      __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_pybuf(__pyx_v_pandas_col, __pyx_v_col, NULL); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1039, __pyx_L1_error)
 1040:         else:
+1041:             raise IngressError(
    /*else*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_IngressError); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1041, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
+1042:                 IngressErrorCode.BadDataFrame,
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_IngressErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1042, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_BadDataFrame); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1042, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1043:                 f'Unknown string dtype storage: f{dtype.storage} ' +
      __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1043, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_7 = 0;
      __pyx_t_8 = 127;
      __Pyx_INCREF(__pyx_kp_u_Unknown_string_dtype_storage_f);
      __pyx_t_7 += 31;
      __Pyx_GIVEREF(__pyx_kp_u_Unknown_string_dtype_storage_f);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_Unknown_string_dtype_storage_f);
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_storage); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1043, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_t_10, __pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1043, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) : __pyx_t_8;
      __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_9);
      __pyx_t_9 = 0;
      __Pyx_INCREF(__pyx_kp_u__22);
      __pyx_t_7 += 1;
      __Pyx_GIVEREF(__pyx_kp_u__22);
      PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u__22);
      __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1043, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
      __pyx_t_5 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1043, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_10 = NULL;
      __pyx_t_11 = 0;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
          __pyx_t_11 = 1;
        }
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_10, __pyx_t_6, __pyx_t_5};
        __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_11, 2+__pyx_t_11);
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 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(1, 1041, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      }
      __Pyx_Raise(__pyx_t_1, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(1, 1041, __pyx_L1_error)
    }
    __pyx_L4:;
+1044:                 f'for column {pandas_col.name} of dtype {dtype}.')
      __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1044, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_7 = 0;
      __pyx_t_8 = 127;
      __Pyx_INCREF(__pyx_kp_u_for_column);
      __pyx_t_7 += 11;
      __Pyx_GIVEREF(__pyx_kp_u_for_column);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_for_column);
      __pyx_t_10 = __Pyx_PyUnicode_Unicode(__pyx_v_pandas_col->name); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1044, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) : __pyx_t_8;
      __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_10);
      PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_10);
      __pyx_t_10 = 0;
      __Pyx_INCREF(__pyx_kp_u_of_dtype);
      __pyx_t_7 += 10;
      __Pyx_GIVEREF(__pyx_kp_u_of_dtype);
      PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u_of_dtype);
      __pyx_t_10 = __Pyx_PyObject_FormatSimple(__pyx_v_dtype, __pyx_empty_unicode); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1044, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) : __pyx_t_8;
      __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_10);
      PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_10);
      __pyx_t_10 = 0;
      __Pyx_INCREF(__pyx_kp_u__5);
      __pyx_t_7 += 1;
      __Pyx_GIVEREF(__pyx_kp_u__5);
      PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_kp_u__5);
      __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_5, 5, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1044, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1045:     elif isinstance(dtype, _PANDAS.CategoricalDtype):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__PANDAS, __pyx_n_s_CategoricalDtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1045, __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(1, 1045, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+1046:         _dataframe_category_series_as_arrow(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_category_series_as_arrow(__pyx_v_pandas_col, __pyx_v_col); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1046, __pyx_L1_error)
+1047:     elif (isinstance(dtype, _NUMPY_DATETIME64_NS) and
  __pyx_t_1 = __pyx_v_7questdb_7ingress__NUMPY_DATETIME64_NS;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_12 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_1); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(1, 1047, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_12) {
  } else {
    __pyx_t_2 = __pyx_t_12;
    goto __pyx_L6_bool_binop_done;
  }
/* … */
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+1048:             _dataframe_is_supported_datetime(dtype)):
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_is_supported_datetime(__pyx_v_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1048, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(1, 1048, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_2 = __pyx_t_12;
  __pyx_L6_bool_binop_done:;
+1049:         col.setup.source = col_source_t.col_source_dt64ns_numpy
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_dt64ns_numpy;
+1050:         _dataframe_series_as_pybuf(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_pybuf(__pyx_v_pandas_col, __pyx_v_col, NULL); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1050, __pyx_L1_error)
+1051:     elif (isinstance(dtype, _PANDAS.DatetimeTZDtype) and
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7ingress__PANDAS, __pyx_n_s_DatetimeTZDtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_12 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_1); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(1, 1051, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_12) {
  } else {
    __pyx_t_2 = __pyx_t_12;
    goto __pyx_L8_bool_binop_done;
  }
/* … */
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+1052:             _dataframe_is_supported_datetime(dtype)):
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_is_supported_datetime(__pyx_v_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1052, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(1, 1052, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_2 = __pyx_t_12;
  __pyx_L8_bool_binop_done:;
+1053:         col.setup.source = col_source_t.col_source_dt64ns_tz_arrow
    __pyx_v_col->setup->source = __pyx_e_7questdb_7ingress_col_source_dt64ns_tz_arrow;
+1054:         _dataframe_series_as_arrow(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_as_arrow(__pyx_v_pandas_col, __pyx_v_col); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1054, __pyx_L1_error)
+1055:     elif isinstance(dtype, _NUMPY_OBJECT):
  __pyx_t_1 = __pyx_v_7questdb_7ingress__NUMPY_OBJECT;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 1055, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (likely(__pyx_t_2)) {
/* … */
    goto __pyx_L3;
  }
+1056:         _dataframe_series_sniff_pyobj(pandas_col, col)
    __pyx_t_3 = __pyx_f_7questdb_7ingress__dataframe_series_sniff_pyobj(__pyx_v_pandas_col, __pyx_v_col); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1056, __pyx_L1_error)
 1057:     else:
+1058:         raise IngressError(
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_IngressError); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1058, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+1059:             IngressErrorCode.BadDataFrame,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_IngressErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1059, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_BadDataFrame); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1059, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1060:             f'Unsupported dtype {dtype} for column {pandas_col.name!r}. ' +
    __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1060, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = 0;
    __pyx_t_8 = 127;
    __Pyx_INCREF(__pyx_kp_u_Unsupported_dtype);
    __pyx_t_7 += 18;
    __Pyx_GIVEREF(__pyx_kp_u_Unsupported_dtype);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_Unsupported_dtype);
    __pyx_t_10 = __Pyx_PyObject_FormatSimple(__pyx_v_dtype, __pyx_empty_unicode); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1060, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) : __pyx_t_8;
    __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_10);
    __pyx_t_10 = 0;
    __Pyx_INCREF(__pyx_kp_u_for_column_2);
    __pyx_t_7 += 12;
    __Pyx_GIVEREF(__pyx_kp_u_for_column_2);
    PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u_for_column_2);
    __pyx_t_10 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_pandas_col->name), __pyx_empty_unicode); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1060, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) : __pyx_t_8;
    __pyx_t_7 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_10);
    __pyx_t_10 = 0;
    __Pyx_INCREF(__pyx_kp_u__18);
    __pyx_t_7 += 2;
    __Pyx_GIVEREF(__pyx_kp_u__18);
    PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_kp_u__18);
    __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_5, 5, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1060, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_10, __pyx_kp_u_Raise_an_issue_if_you_think_it_s); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1060, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+1061:             'Raise an issue if you think it should be supported: ' +
    __pyx_t_10 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_5, __pyx_kp_u_https_github_com_questdb_py_ques); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1061, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    __pyx_t_11 = 0;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_11 = 1;
      }
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_t_10};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_11, 2+__pyx_t_11);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1058, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(1, 1058, __pyx_L1_error)
  }
  __pyx_L3:;
 1062:             'https://github.com/questdb/py-questdb-client/issues.')
 1063: 
 1064: 
+1065: cdef void_int _dataframe_resolve_target(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_resolve_target(struct __pyx_obj_7questdb_7ingress_PandasCol *__pyx_v_pandas_col, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col) {
  enum __pyx_t_7questdb_7ingress_col_target_t __pyx_v_target;
  PyObject *__pyx_v_target_sources = 0;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __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_AddTraceback("questdb.ingress._dataframe_resolve_target", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_target_sources);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1066:         PandasCol pandas_col, col_t* col) except -1:
 1067:     cdef col_target_t target
 1068:     cdef set target_sources
+1069:     if col.setup.meta_target in _DIRECT_META_TARGETS:
  __pyx_t_1 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_meta_target_t(__pyx_v_col->setup->meta_target); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1069, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(__pyx_v_7questdb_7ingress__DIRECT_META_TARGETS == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(1, 1069, __pyx_L1_error)
  }
  __pyx_t_2 = (__Pyx_PySet_ContainsTF(__pyx_t_1, __pyx_v_7questdb_7ingress__DIRECT_META_TARGETS, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 1069, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+1070:         col.setup.target = <col_target_t><int>col.setup.meta_target
    __pyx_v_col->setup->target = ((enum __pyx_t_7questdb_7ingress_col_target_t)((int)__pyx_v_col->setup->meta_target));
+1071:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+1072:     for target in _FIELD_TARGETS:
  if (unlikely(__pyx_v_7questdb_7ingress__FIELD_TARGETS == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(1, 1072, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_v_7questdb_7ingress__FIELD_TARGETS; __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
      #if !CYTHON_ASSUME_SAFE_MACROS
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 1072, __pyx_L1_error)
      #endif
      if (__pyx_t_3 >= __pyx_temp) break;
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely((0 < 0))) __PYX_ERR(1, 1072, __pyx_L1_error)
    #else
    __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1072, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __pyx_t_5 = ((enum __pyx_t_7questdb_7ingress_col_target_t)__Pyx_PyInt_As_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_t_4)); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1072, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_target = __pyx_t_5;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1073:         target_sources = _TARGET_TO_SOURCES[target]
    if (unlikely(__pyx_v_7questdb_7ingress__TARGET_TO_SOURCES == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 1073, __pyx_L1_error)
    }
    __pyx_t_4 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_v_target); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1073, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = __Pyx_PyDict_GetItem(__pyx_v_7questdb_7ingress__TARGET_TO_SOURCES, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1073, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (!(likely(PySet_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("set", __pyx_t_6))) __PYX_ERR(1, 1073, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_target_sources, ((PyObject*)__pyx_t_6));
    __pyx_t_6 = 0;
+1074:         if col.setup.source in target_sources:
    __pyx_t_6 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_v_col->setup->source); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1074, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (unlikely(__pyx_v_target_sources == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(1, 1074, __pyx_L1_error)
    }
    __pyx_t_2 = (__Pyx_PySet_ContainsTF(__pyx_t_6, __pyx_v_target_sources, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 1074, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (__pyx_t_2) {
/* … */
    }
+1075:             col.setup.target = target
      __pyx_v_col->setup->target = __pyx_v_target;
+1076:             return 0
      __pyx_r = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
+1077:     raise IngressError(
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_IngressError); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
+1078:         IngressErrorCode.BadDataFrame,
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_IngressErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1078, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_BadDataFrame); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1078, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1079:         f'Could not map column source type (code {col.setup.source} for ' +
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1079, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = 0;
  __pyx_t_8 = 127;
  __Pyx_INCREF(__pyx_kp_u_Could_not_map_column_source_type);
  __pyx_t_3 += 39;
  __Pyx_GIVEREF(__pyx_kp_u_Could_not_map_column_source_type);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_Could_not_map_column_source_type);
  __pyx_t_9 = __Pyx_PyUnicode_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_v_col->setup->source, 0, ' ', 'd'); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1079, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) : __pyx_t_8;
  __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_9);
  __pyx_t_9 = 0;
  __Pyx_INCREF(__pyx_kp_u_for);
  __pyx_t_3 += 5;
  __Pyx_GIVEREF(__pyx_kp_u_for);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u_for);
  __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1079, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_t_4 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1079, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+1080:         f'column {pandas_col.name!r} ' +
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1080, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = 0;
  __pyx_t_8 = 127;
  __Pyx_INCREF(__pyx_kp_u_column_2);
  __pyx_t_3 += 7;
  __Pyx_GIVEREF(__pyx_kp_u_column_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_column_2);
  __pyx_t_10 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_pandas_col->name), __pyx_empty_unicode); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1080, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) : __pyx_t_8;
  __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_10);
  __pyx_t_10 = 0;
  __Pyx_INCREF(__pyx_kp_u__22);
  __pyx_t_3 += 1;
  __Pyx_GIVEREF(__pyx_kp_u__22);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u__22);
  __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, __pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1080, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_t_10 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_4, __pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1080, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = NULL;
  __pyx_t_11 = 0;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
      __pyx_t_11 = 1;
    }
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_9, __pyx_t_7, __pyx_t_10};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_11, 2+__pyx_t_11);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1077, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __PYX_ERR(1, 1077, __pyx_L1_error)
+1081:         f' ({pandas_col.dtype}) to any ILP type.')
  __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1081, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_3 = 0;
  __pyx_t_8 = 127;
  __Pyx_INCREF(__pyx_kp_u__20);
  __pyx_t_3 += 2;
  __Pyx_GIVEREF(__pyx_kp_u__20);
  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_kp_u__20);
  __pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_v_pandas_col->dtype, __pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1081, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_8 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) > __pyx_t_8) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) : __pyx_t_8;
  __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_9);
  __pyx_t_9 = 0;
  __Pyx_INCREF(__pyx_kp_u_to_any_ILP_type);
  __pyx_t_3 += 18;
  __Pyx_GIVEREF(__pyx_kp_u_to_any_ILP_type);
  PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_kp_u_to_any_ILP_type);
  __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_10, 3, __pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1081, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
 1082: 
 1083: 
+1084: cdef void _dataframe_init_cursor(col_t* col) noexcept nogil:
static void __pyx_f_7questdb_7ingress__dataframe_init_cursor(struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col) {
/* … */
  /* function exit code */
}
+1085:     col.cursor.chunk = col.setup.chunks.chunks
  __pyx_t_1 = __pyx_v_col->setup->chunks.chunks;
  __pyx_v_col->cursor.chunk = __pyx_t_1;
+1086:     col.cursor.chunk_index = 0
  __pyx_v_col->cursor.chunk_index = 0;
+1087:     col.cursor.offset = col.cursor.chunk.offset
  __pyx_t_2 = __pyx_v_col->cursor.chunk->offset;
  __pyx_v_col->cursor.offset = __pyx_t_2;
 1088: 
 1089: 
+1090: cdef void_int _dataframe_resolve_cols(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_resolve_cols(CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_pandas_cols, struct __pyx_t_7questdb_7ingress_col_t_arr *__pyx_v_cols, int *__pyx_v_any_cols_need_gil_out) {
  size_t __pyx_v_index;
  size_t __pyx_v_len_dataframe_cols;
  struct __pyx_obj_7questdb_7ingress_PandasCol *__pyx_v_pandas_col = 0;
  struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb.ingress._dataframe_resolve_cols", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pandas_col);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1091:         qdb_pystr_buf* b,
 1092:         list pandas_cols,
 1093:         col_t_arr* cols,
 1094:         bint* any_cols_need_gil_out) except -1:
 1095:     cdef size_t index
+1096:     cdef size_t len_dataframe_cols = len(pandas_cols)
  if (unlikely(__pyx_v_pandas_cols == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(1, 1096, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_pandas_cols); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(1, 1096, __pyx_L1_error)
  __pyx_v_len_dataframe_cols = __pyx_t_1;
 1097:     cdef PandasCol pandas_col
 1098:     cdef col_t* col
+1099:     any_cols_need_gil_out[0] = False
  (__pyx_v_any_cols_need_gil_out[0]) = 0;
+1100:     for index in range(len_dataframe_cols):
  __pyx_t_2 = __pyx_v_len_dataframe_cols;
  __pyx_t_3 = __pyx_t_2;
  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
    __pyx_v_index = __pyx_t_4;
+1101:         pandas_col = pandas_cols[index]
    if (unlikely(__pyx_v_pandas_cols == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 1101, __pyx_L1_error)
    }
    __pyx_t_5 = __Pyx_GetItemInt_List(__pyx_v_pandas_cols, __pyx_v_index, size_t, 0, __Pyx_PyInt_FromSize_t, 1, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1101, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_7questdb_7ingress_PandasCol))))) __PYX_ERR(1, 1101, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_pandas_col, ((struct __pyx_obj_7questdb_7ingress_PandasCol *)__pyx_t_5));
    __pyx_t_5 = 0;
+1102:         col = &cols.d[index]
    __pyx_v_col = (&(__pyx_v_cols->d[__pyx_v_index]));
 1103: 
 1104:         # The target is resolved in stages:
 1105:         # * We first assign all column `.meta_target`s to be fields.
 1106:         # * Then, depending on argument parsing some/none of the columns
 1107:         #   obtain a meta-target of "table", "symbol" or "at".
 1108:         # * Finally, based on the source, any remaining "meta_target_field"
 1109:         #   columns are converted to the appropriate target.
 1110:         #   See: _dataframe_resolve_col_targets_and_dc(..).
+1111:         col.setup.meta_target = meta_target_t.meta_target_field
    __pyx_v_col->setup->meta_target = __pyx_e_7questdb_7ingress_meta_target_field;
 1112: 
 1113:         # We will sort columns later. The index will be used to achieve a stable
 1114:         # sort among columns with the same `.meta_target`.
+1115:         col.setup.orig_index = index
    __pyx_v_col->setup->orig_index = __pyx_v_index;
 1116: 
+1117:         _dataframe_resolve_source_and_buffers(pandas_col, col)
    __pyx_t_6 = __pyx_f_7questdb_7ingress__dataframe_resolve_source_and_buffers(__pyx_v_pandas_col, __pyx_v_col); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1117, __pyx_L1_error)
+1118:         _dataframe_init_cursor(col)
    __pyx_f_7questdb_7ingress__dataframe_init_cursor(__pyx_v_col);
+1119:         if col_source_needs_gil(col.setup.source):
    __pyx_t_7 = __pyx_f_7questdb_7ingress_col_source_needs_gil(__pyx_v_col->setup->source);
    if (__pyx_t_7) {
/* … */
    }
  }
+1120:             any_cols_need_gil_out[0] = True
      (__pyx_v_any_cols_need_gil_out[0]) = 1;
 1121: 
 1122: 
+1123: cdef void_int _dataframe_resolve_cols_target_name_and_dc(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_resolve_cols_target_name_and_dc(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_pandas_cols, struct __pyx_t_7questdb_7ingress_col_t_arr *__pyx_v_cols) {
  size_t __pyx_v_index;
  struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col;
  struct __pyx_obj_7questdb_7ingress_PandasCol *__pyx_v_pandas_col = 0;
  __pyx_t_7questdb_7ingress_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_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("questdb.ingress._dataframe_resolve_cols_target_name_and_dc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pandas_col);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1124:         qdb_pystr_buf* b,
 1125:         list pandas_cols,
 1126:         col_t_arr* cols) except -1:
 1127:     cdef size_t index
 1128:     cdef col_t* col
 1129:     cdef PandasCol pandas_col
+1130:     for index in range(cols.size):
  __pyx_t_1 = __pyx_v_cols->size;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_index = __pyx_t_3;
+1131:         col = &cols.d[index]
    __pyx_v_col = (&(__pyx_v_cols->d[__pyx_v_index]));
+1132:         pandas_col = pandas_cols[index]
    if (unlikely(__pyx_v_pandas_cols == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 1132, __pyx_L1_error)
    }
    __pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_pandas_cols, __pyx_v_index, size_t, 0, __Pyx_PyInt_FromSize_t, 1, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1132, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_7questdb_7ingress_PandasCol))))) __PYX_ERR(1, 1132, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_pandas_col, ((struct __pyx_obj_7questdb_7ingress_PandasCol *)__pyx_t_4));
    __pyx_t_4 = 0;
+1133:         _dataframe_resolve_target(pandas_col, col)
    __pyx_t_5 = __pyx_f_7questdb_7ingress__dataframe_resolve_target(__pyx_v_pandas_col, __pyx_v_col); if (unlikely(__pyx_t_5 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1133, __pyx_L1_error)
+1134:         if col.setup.source not in _TARGET_TO_SOURCES[col.setup.target]:
    __pyx_t_4 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_source_t(__pyx_v_col->setup->source); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1134, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (unlikely(__pyx_v_7questdb_7ingress__TARGET_TO_SOURCES == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 1134, __pyx_L1_error)
    }
    __pyx_t_6 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_v_col->setup->target); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1134, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyDict_GetItem(__pyx_v_7questdb_7ingress__TARGET_TO_SOURCES, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1134, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_8 = (__Pyx_PySequence_ContainsTF(__pyx_t_4, __pyx_t_7, Py_NE)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(1, 1134, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(__pyx_t_8)) {
/* … */
    }
+1135:             raise ValueError(
      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1135, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __PYX_ERR(1, 1135, __pyx_L1_error)
+1136:                 f'Bad value: Column {pandas_col.name!r} ' +
      __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1136, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_9 = 0;
      __pyx_t_10 = 127;
      __Pyx_INCREF(__pyx_kp_u_Bad_value_Column);
      __pyx_t_9 += 18;
      __Pyx_GIVEREF(__pyx_kp_u_Bad_value_Column);
      PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_kp_u_Bad_value_Column);
      __pyx_t_4 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_pandas_col->name), __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1136, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_10;
      __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_4);
      __pyx_t_4 = 0;
      __Pyx_INCREF(__pyx_kp_u__22);
      __pyx_t_9 += 1;
      __Pyx_GIVEREF(__pyx_kp_u__22);
      PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_kp_u__22);
      __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_7, 3, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1136, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
      __pyx_t_7 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1136, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+1137:                 f'({pandas_col.dtype}) is not ' +
      __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1137, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_9 = 0;
      __pyx_t_10 = 127;
      __Pyx_INCREF(__pyx_kp_u__16);
      __pyx_t_9 += 1;
      __Pyx_GIVEREF(__pyx_kp_u__16);
      PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_kp_u__16);
      __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_v_pandas_col->dtype, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1137, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_10;
      __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
      __pyx_t_6 = 0;
      __Pyx_INCREF(__pyx_kp_u_is_not);
      __pyx_t_9 += 9;
      __Pyx_GIVEREF(__pyx_kp_u_is_not);
      PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_kp_u_is_not);
      __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_7, 3, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1137, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
      __pyx_t_6 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_7, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1137, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1138:                 f'supported as a {_TARGET_NAMES[col.setup.target]} column.')
      __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1138, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_9 = 0;
      __pyx_t_10 = 127;
      __Pyx_INCREF(__pyx_kp_u_supported_as_a);
      __pyx_t_9 += 15;
      __Pyx_GIVEREF(__pyx_kp_u_supported_as_a);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_kp_u_supported_as_a);
      if (unlikely(__pyx_v_7questdb_7ingress__TARGET_NAMES == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(1, 1138, __pyx_L1_error)
      }
      __pyx_t_4 = __Pyx_PyInt_From_enum____pyx_t_7questdb_7ingress_col_target_t(__pyx_v_col->setup->target); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1138, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_7questdb_7ingress__TARGET_NAMES, __pyx_t_4); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1138, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_11, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1138, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_10;
      __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_4);
      __pyx_t_4 = 0;
      __Pyx_INCREF(__pyx_kp_u_column);
      __pyx_t_9 += 8;
      __Pyx_GIVEREF(__pyx_kp_u_column);
      PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_kp_u_column);
      __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_6, 3, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1138, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+1139:         col.dispatch_code = <col_dispatch_code_t>(
    __pyx_v_col->dispatch_code = ((enum __pyx_t_7questdb_7ingress_col_dispatch_code_t)(((int)__pyx_v_col->setup->source) + ((int)__pyx_v_col->setup->target)));
 1140:             <int>col.setup.source + <int>col.setup.target)
 1141: 
 1142:         # Since we don't need to send the column names for 'table' and
 1143:         # 'at' columns, we don't need to validate and encode them as
 1144:         # column names. This allows unsupported names for these columns.
+1145:         if ((col.setup.meta_target != meta_target_t.meta_target_table) and
    switch (__pyx_v_col->setup->meta_target) {
      case __pyx_e_7questdb_7ingress_meta_target_table:
      case __pyx_e_7questdb_7ingress_meta_target_at:
/* … */
      __pyx_t_8 = 0;
/* … */
      break;
      default:
      __pyx_t_8 = 1;
      break;
    }
    if (__pyx_t_8) {
/* … */
    }
  }
 1146:                 (col.setup.meta_target != meta_target_t.meta_target_at)):
+1147:             str_to_column_name_copy(b, pandas_col.name, &col.name)
      __pyx_t_4 = __pyx_v_pandas_col->name;
      __Pyx_INCREF(__pyx_t_4);
      __pyx_t_5 = __pyx_f_7questdb_7ingress_str_to_column_name_copy(__pyx_v_b, ((PyObject*)__pyx_t_4), (&__pyx_v_col->name)); if (unlikely(__pyx_t_5 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1147, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 1148: 
 1149: 
+1150: cdef int _dataframe_compare_cols(const void* lhs, const void* rhs) noexcept nogil:
static int __pyx_f_7questdb_7ingress__dataframe_compare_cols(void const *__pyx_v_lhs, void const *__pyx_v_rhs) {
  struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_lhs_col;
  struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_rhs_col;
  int __pyx_v_source_diff;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+1151:     cdef col_t* lhs_col = <col_t*>lhs
  __pyx_v_lhs_col = ((struct __pyx_t_7questdb_7ingress_col_t *)__pyx_v_lhs);
+1152:     cdef col_t* rhs_col = <col_t*>rhs
  __pyx_v_rhs_col = ((struct __pyx_t_7questdb_7ingress_col_t *)__pyx_v_rhs);
+1153:     cdef int source_diff = lhs_col.setup.meta_target - rhs_col.setup.meta_target
  __pyx_v_source_diff = (__pyx_v_lhs_col->setup->meta_target - __pyx_v_rhs_col->setup->meta_target);
+1154:     if source_diff != 0:
  __pyx_t_1 = (__pyx_v_source_diff != 0);
  if (__pyx_t_1) {
/* … */
  }
+1155:         return source_diff
    __pyx_r = __pyx_v_source_diff;
    goto __pyx_L0;
+1156:     return <int>lhs_col.setup.orig_index - <int>rhs_col.setup.orig_index
  __pyx_r = (((int)__pyx_v_lhs_col->setup->orig_index) - ((int)__pyx_v_rhs_col->setup->orig_index));
  goto __pyx_L0;
 1157: 
 1158: # noinspection PyUnreachableCode
+1159: cdef void_int _dataframe_resolve_args(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_resolve_args(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, size_t __pyx_v_col_count, struct line_sender_table_name *__pyx_v_c_table_name_out, int64_t *__pyx_v_at_value_out, struct __pyx_t_7questdb_7ingress_col_t_arr *__pyx_v_cols, int *__pyx_v_any_cols_need_gil_out) {
  Py_ssize_t __pyx_v_name_col;
  Py_ssize_t __pyx_v_at_col;
  PyObject *__pyx_v_pandas_cols = 0;
  PyObject *__pyx_7genexpr__pyx_v_index = NULL;
  PyObject *__pyx_7genexpr__pyx_v_name = NULL;
  PyObject *__pyx_7genexpr__pyx_v_series = NULL;
  __pyx_t_7questdb_7ingress_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_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("questdb.ingress._dataframe_resolve_args", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_pandas_cols);
  __Pyx_XDECREF(__pyx_7genexpr__pyx_v_index);
  __Pyx_XDECREF(__pyx_7genexpr__pyx_v_name);
  __Pyx_XDECREF(__pyx_7genexpr__pyx_v_series);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1160:         object df,
 1161:         object table_name,
 1162:         object table_name_col,
 1163:         object symbols,
 1164:         object at,
 1165:         qdb_pystr_buf* b,
 1166:         size_t col_count,
 1167:         line_sender_table_name* c_table_name_out,
 1168:         int64_t* at_value_out,
 1169:         col_t_arr* cols,
 1170:         bint* any_cols_need_gil_out) except -1:
 1171:     cdef ssize_t name_col
 1172:     cdef ssize_t at_col
 1173: 
+1174:     cdef list pandas_cols = [
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1174, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_int_0);
    __pyx_t_2 = __pyx_int_0;
+1175:         PandasCol(name, df.dtypes.iloc[index], series)
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_n_s_dtypes); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1175, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_iloc); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1175, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_7genexpr__pyx_v_index); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1175, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1175, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_7genexpr__pyx_v_name);
      __Pyx_GIVEREF(__pyx_7genexpr__pyx_v_name);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_7genexpr__pyx_v_name)) __PYX_ERR(1, 1175, __pyx_L5_error);
      __Pyx_GIVEREF(__pyx_t_8);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_8)) __PYX_ERR(1, 1175, __pyx_L5_error);
      __Pyx_INCREF(__pyx_7genexpr__pyx_v_series);
      __Pyx_GIVEREF(__pyx_7genexpr__pyx_v_series);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_7genexpr__pyx_v_series)) __PYX_ERR(1, 1175, __pyx_L5_error);
      __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7questdb_7ingress_PandasCol), __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1175, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_8))) __PYX_ERR(1, 1174, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_7genexpr__pyx_v_index); __pyx_7genexpr__pyx_v_index = 0;
    __Pyx_XDECREF(__pyx_7genexpr__pyx_v_name); __pyx_7genexpr__pyx_v_name = 0;
    __Pyx_XDECREF(__pyx_7genexpr__pyx_v_series); __pyx_7genexpr__pyx_v_series = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_7genexpr__pyx_v_index); __pyx_7genexpr__pyx_v_index = 0;
    __Pyx_XDECREF(__pyx_7genexpr__pyx_v_name); __pyx_7genexpr__pyx_v_name = 0;
    __Pyx_XDECREF(__pyx_7genexpr__pyx_v_series); __pyx_7genexpr__pyx_v_series = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __pyx_v_pandas_cols = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+1176:         for index, (name, series) in enumerate(df.items())]
    __pyx_t_4 = 0;
    if (unlikely(__pyx_v_df == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
      __PYX_ERR(1, 1176, __pyx_L5_error)
    }
    __pyx_t_7 = __Pyx_dict_iterator(__pyx_v_df, 0, __pyx_n_s_items, (&__pyx_t_5), (&__pyx_t_6)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1176, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_3);
    __pyx_t_3 = __pyx_t_7;
    __pyx_t_7 = 0;
    while (1) {
      __pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_5, &__pyx_t_4, &__pyx_t_7, &__pyx_t_8, NULL, __pyx_t_6);
      if (unlikely(__pyx_t_9 == 0)) break;
      if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(1, 1176, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_name, __pyx_t_7);
      __pyx_t_7 = 0;
      __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_series, __pyx_t_8);
      __pyx_t_8 = 0;
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_index, __pyx_t_2);
      __pyx_t_8 = __Pyx_PyInt_AddObjC(__pyx_t_2, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1176, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_2);
      __pyx_t_2 = __pyx_t_8;
      __pyx_t_8 = 0;
+1177:     _dataframe_resolve_cols(b, pandas_cols, cols, any_cols_need_gil_out)
  __pyx_t_10 = __pyx_f_7questdb_7ingress__dataframe_resolve_cols(__pyx_v_b, __pyx_v_pandas_cols, __pyx_v_cols, __pyx_v_any_cols_need_gil_out); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1177, __pyx_L1_error)
+1178:     name_col = _dataframe_resolve_table_name(
  __pyx_t_11 = __pyx_f_7questdb_7ingress__dataframe_resolve_table_name(__pyx_v_b, __pyx_v_df, __pyx_v_pandas_cols, __pyx_v_cols, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_col_count, __pyx_v_c_table_name_out); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-2L))) __PYX_ERR(1, 1178, __pyx_L1_error)
  __pyx_v_name_col = __pyx_t_11;
 1179:         b,
 1180:         df,
 1181:         pandas_cols,
 1182:         cols,
 1183:         table_name,
 1184:         table_name_col,
 1185:         col_count,
 1186:         c_table_name_out)
+1187:     at_col = _dataframe_resolve_at(df, cols, at, col_count, at_value_out)
  __pyx_t_11 = __pyx_f_7questdb_7ingress__dataframe_resolve_at(__pyx_v_df, __pyx_v_cols, __pyx_v_at, __pyx_v_col_count, __pyx_v_at_value_out); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-2L))) __PYX_ERR(1, 1187, __pyx_L1_error)
  __pyx_v_at_col = __pyx_t_11;
+1188:     _dataframe_resolve_symbols(df, pandas_cols, cols, name_col, at_col, symbols)
  __pyx_t_10 = __pyx_f_7questdb_7ingress__dataframe_resolve_symbols(__pyx_v_df, __pyx_v_pandas_cols, __pyx_v_cols, __pyx_v_name_col, __pyx_v_at_col, __pyx_v_symbols); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1188, __pyx_L1_error)
+1189:     _dataframe_resolve_cols_target_name_and_dc(b, pandas_cols, cols)
  __pyx_t_10 = __pyx_f_7questdb_7ingress__dataframe_resolve_cols_target_name_and_dc(__pyx_v_b, __pyx_v_pandas_cols, __pyx_v_cols); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1189, __pyx_L1_error)
+1190:     qsort(cols.d, col_count, sizeof(col_t), _dataframe_compare_cols)
  qsort(__pyx_v_cols->d, __pyx_v_col_count, (sizeof(struct __pyx_t_7questdb_7ingress_col_t)), __pyx_f_7questdb_7ingress__dataframe_compare_cols);
 1191: 
 1192: 
+1193: cdef inline bint _dataframe_arrow_get_bool(col_cursor_t* cursor) noexcept nogil:
static CYTHON_INLINE int __pyx_f_7questdb_7ingress__dataframe_arrow_get_bool(struct __pyx_t_7questdb_7ingress_col_cursor_t *__pyx_v_cursor) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 1194:     return (
+1195:         (<uint8_t*>cursor.chunk.buffers[1])[cursor.offset // 8] &
  __pyx_r = ((((uint8_t *)(__pyx_v_cursor->chunk->buffers[1]))[(__pyx_v_cursor->offset / 8)]) & (1 << (__pyx_v_cursor->offset % 8)));
  goto __pyx_L0;
 1196:         (1 << (cursor.offset % 8)))
 1197: 
 1198: 
+1199: cdef inline bint _dataframe_arrow_is_valid(col_cursor_t* cursor) noexcept nogil:
static CYTHON_INLINE int __pyx_f_7questdb_7ingress__dataframe_arrow_is_valid(struct __pyx_t_7questdb_7ingress_col_cursor_t *__pyx_v_cursor) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 1200:     """Check if the value is set according to the validity bitmap."""
 1201:     return (
+1202:         cursor.chunk.null_count == 0 or
  __pyx_t_2 = (__pyx_v_cursor->chunk->null_count == 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
 1203:         (
+1204:             (<uint8_t*>cursor.chunk.buffers[0])[cursor.offset // 8] &
  __pyx_t_2 = (((((uint8_t *)(__pyx_v_cursor->chunk->buffers[0]))[(__pyx_v_cursor->offset / 8)]) & (1 << (__pyx_v_cursor->offset % 8))) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 1205:             (1 << (cursor.offset % 8))))
 1206: 
 1207: 
+1208: cdef inline void _dataframe_arrow_get_cat_value(
static CYTHON_INLINE void __pyx_f_7questdb_7ingress__dataframe_arrow_get_cat_value(struct __pyx_t_7questdb_7ingress_col_cursor_t *__pyx_v_cursor, size_t __pyx_v_key, size_t *__pyx_v_len_out, char const **__pyx_v_buf_out) {
  int32_t *__pyx_v_value_index_access;
  int32_t __pyx_v_value_begin;
  uint8_t *__pyx_v_value_char_access;
/* … */
  /* function exit code */
}
 1209:         col_cursor_t* cursor,
 1210:         size_t key,
 1211:         size_t* len_out,
 1212:         const char** buf_out) noexcept nogil:
 1213:     cdef int32_t* value_index_access
 1214:     cdef int32_t value_begin
 1215:     cdef uint8_t* value_char_access
+1216:     value_index_access = <int32_t*>cursor.chunk.dictionary.buffers[1]
  __pyx_v_value_index_access = ((int32_t *)(__pyx_v_cursor->chunk->dictionary->buffers[1]));
+1217:     value_begin = value_index_access[key]
  __pyx_v_value_begin = (__pyx_v_value_index_access[__pyx_v_key]);
+1218:     len_out[0] = value_index_access[key + 1] - value_begin
  (__pyx_v_len_out[0]) = ((__pyx_v_value_index_access[(__pyx_v_key + 1)]) - __pyx_v_value_begin);
+1219:     value_char_access = <uint8_t*>cursor.chunk.dictionary.buffers[2]
  __pyx_v_value_char_access = ((uint8_t *)(__pyx_v_cursor->chunk->dictionary->buffers[2]));
+1220:     buf_out[0] = <const char*>&value_char_access[value_begin]
  (__pyx_v_buf_out[0]) = ((char const *)(&(__pyx_v_value_char_access[__pyx_v_value_begin])));
 1221: 
 1222: 
+1223: cdef inline bint _dataframe_arrow_get_cat_i8(
static CYTHON_INLINE int __pyx_f_7questdb_7ingress__dataframe_arrow_get_cat_i8(struct __pyx_t_7questdb_7ingress_col_cursor_t *__pyx_v_cursor, size_t *__pyx_v_len_out, char const **__pyx_v_buf_out) {
  int __pyx_v_valid;
  int8_t *__pyx_v_key_access;
  int8_t __pyx_v_key;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 1224:         col_cursor_t* cursor, size_t* len_out, const char** buf_out) noexcept nogil:
+1225:     cdef bint valid = _dataframe_arrow_is_valid(cursor)
  __pyx_v_valid = __pyx_f_7questdb_7ingress__dataframe_arrow_is_valid(__pyx_v_cursor);
 1226:     cdef int8_t* key_access
 1227:     cdef int8_t key
+1228:     if valid:
  if (__pyx_v_valid) {
/* … */
  }
+1229:         key_access = <int8_t*>cursor.chunk.buffers[1]
    __pyx_v_key_access = ((int8_t *)(__pyx_v_cursor->chunk->buffers[1]));
+1230:         key = key_access[cursor.offset]
    __pyx_v_key = (__pyx_v_key_access[__pyx_v_cursor->offset]);
+1231:         _dataframe_arrow_get_cat_value(cursor, <size_t>key, len_out, buf_out)
    __pyx_f_7questdb_7ingress__dataframe_arrow_get_cat_value(__pyx_v_cursor, ((size_t)__pyx_v_key), __pyx_v_len_out, __pyx_v_buf_out);
+1232:     return valid
  __pyx_r = __pyx_v_valid;
  goto __pyx_L0;
 1233: 
 1234: 
+1235: cdef inline bint _dataframe_arrow_get_cat_i16(
static CYTHON_INLINE int __pyx_f_7questdb_7ingress__dataframe_arrow_get_cat_i16(struct __pyx_t_7questdb_7ingress_col_cursor_t *__pyx_v_cursor, size_t *__pyx_v_len_out, char const **__pyx_v_buf_out) {
  int __pyx_v_valid;
  int16_t *__pyx_v_key_access;
  int16_t __pyx_v_key;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 1236:         col_cursor_t* cursor, size_t* len_out, const char** buf_out) noexcept nogil:
+1237:     cdef bint valid = _dataframe_arrow_is_valid(cursor)
  __pyx_v_valid = __pyx_f_7questdb_7ingress__dataframe_arrow_is_valid(__pyx_v_cursor);
 1238:     cdef int16_t* key_access
 1239:     cdef int16_t key
+1240:     if valid:
  if (__pyx_v_valid) {
/* … */
  }
+1241:         key_access = <int16_t*>cursor.chunk.buffers[1]
    __pyx_v_key_access = ((int16_t *)(__pyx_v_cursor->chunk->buffers[1]));
+1242:         key = key_access[cursor.offset]
    __pyx_v_key = (__pyx_v_key_access[__pyx_v_cursor->offset]);
+1243:         _dataframe_arrow_get_cat_value(cursor, <size_t>key, len_out, buf_out)
    __pyx_f_7questdb_7ingress__dataframe_arrow_get_cat_value(__pyx_v_cursor, ((size_t)__pyx_v_key), __pyx_v_len_out, __pyx_v_buf_out);
+1244:     return valid
  __pyx_r = __pyx_v_valid;
  goto __pyx_L0;
 1245: 
 1246: 
+1247: cdef inline bint _dataframe_arrow_get_cat_i32(
static CYTHON_INLINE int __pyx_f_7questdb_7ingress__dataframe_arrow_get_cat_i32(struct __pyx_t_7questdb_7ingress_col_cursor_t *__pyx_v_cursor, size_t *__pyx_v_len_out, char const **__pyx_v_buf_out) {
  int __pyx_v_valid;
  int32_t *__pyx_v_key_access;
  int32_t __pyx_v_key;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 1248:         col_cursor_t* cursor, size_t* len_out, const char** buf_out) noexcept nogil:
+1249:     cdef bint valid = _dataframe_arrow_is_valid(cursor)
  __pyx_v_valid = __pyx_f_7questdb_7ingress__dataframe_arrow_is_valid(__pyx_v_cursor);
 1250:     cdef int32_t* key_access
 1251:     cdef int32_t key
+1252:     if valid:
  if (__pyx_v_valid) {
/* … */
  }
+1253:         key_access = <int32_t*>cursor.chunk.buffers[1]
    __pyx_v_key_access = ((int32_t *)(__pyx_v_cursor->chunk->buffers[1]));
+1254:         key = key_access[cursor.offset]
    __pyx_v_key = (__pyx_v_key_access[__pyx_v_cursor->offset]);
+1255:         _dataframe_arrow_get_cat_value(cursor, <size_t>key, len_out, buf_out)
    __pyx_f_7questdb_7ingress__dataframe_arrow_get_cat_value(__pyx_v_cursor, ((size_t)__pyx_v_key), __pyx_v_len_out, __pyx_v_buf_out);
+1256:     return valid
  __pyx_r = __pyx_v_valid;
  goto __pyx_L0;
 1257: 
 1258: 
+1259: cdef inline bint _dataframe_arrow_str_utf8(
static CYTHON_INLINE int __pyx_f_7questdb_7ingress__dataframe_arrow_str_utf8(struct __pyx_t_7questdb_7ingress_col_cursor_t *__pyx_v_cursor, size_t *__pyx_v_len_out, char const **__pyx_v_buf_out) {
  int32_t *__pyx_v_index_access;
  uint8_t *__pyx_v_char_access;
  int32_t __pyx_v_begin;
  int __pyx_v_valid;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 1260:         col_cursor_t* cursor,
 1261:         size_t* len_out,
 1262:         const char** buf_out) noexcept nogil:
 1263:     cdef int32_t* index_access
 1264:     cdef uint8_t* char_access
 1265:     cdef int32_t begin
+1266:     cdef bint valid = _dataframe_arrow_is_valid(cursor)
  __pyx_v_valid = __pyx_f_7questdb_7ingress__dataframe_arrow_is_valid(__pyx_v_cursor);
+1267:     if valid:
  if (__pyx_v_valid) {
/* … */
  }
+1268:         index_access = <int32_t*>cursor.chunk.buffers[1]
    __pyx_v_index_access = ((int32_t *)(__pyx_v_cursor->chunk->buffers[1]));
+1269:         char_access = <uint8_t*>cursor.chunk.buffers[2]
    __pyx_v_char_access = ((uint8_t *)(__pyx_v_cursor->chunk->buffers[2]));
+1270:         begin = index_access[cursor.offset]
    __pyx_v_begin = (__pyx_v_index_access[__pyx_v_cursor->offset]);
+1271:         len_out[0] = index_access[cursor.offset + 1] - begin
    (__pyx_v_len_out[0]) = ((__pyx_v_index_access[(__pyx_v_cursor->offset + 1)]) - __pyx_v_begin);
+1272:         buf_out[0] = <const char*>&char_access[begin]
    (__pyx_v_buf_out[0]) = ((char const *)(&(__pyx_v_char_access[__pyx_v_begin])));
+1273:     return valid
  __pyx_r = __pyx_v_valid;
  goto __pyx_L0;
 1274: 
+1275: cdef inline bint _dataframe_arrow_str_utf8_lrg(
static CYTHON_INLINE int __pyx_f_7questdb_7ingress__dataframe_arrow_str_utf8_lrg(struct __pyx_t_7questdb_7ingress_col_cursor_t *__pyx_v_cursor, size_t *__pyx_v_len_out, char const **__pyx_v_buf_out) {
  int64_t *__pyx_v_index_access;
  uint8_t *__pyx_v_char_access;
  int64_t __pyx_v_begin;
  int __pyx_v_valid;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 1276:         col_cursor_t* cursor,
 1277:         size_t* len_out,
 1278:         const char** buf_out) noexcept nogil:
 1279:     cdef int64_t* index_access
 1280:     cdef uint8_t* char_access
 1281:     cdef int64_t begin
+1282:     cdef bint valid = _dataframe_arrow_is_valid(cursor)
  __pyx_v_valid = __pyx_f_7questdb_7ingress__dataframe_arrow_is_valid(__pyx_v_cursor);
+1283:     if valid:
  if (__pyx_v_valid) {
/* … */
  }
+1284:         index_access = <int64_t*>cursor.chunk.buffers[1]
    __pyx_v_index_access = ((int64_t *)(__pyx_v_cursor->chunk->buffers[1]));
+1285:         char_access = <uint8_t*>cursor.chunk.buffers[2]
    __pyx_v_char_access = ((uint8_t *)(__pyx_v_cursor->chunk->buffers[2]));
+1286:         begin = index_access[cursor.offset]
    __pyx_v_begin = (__pyx_v_index_access[__pyx_v_cursor->offset]);
+1287:         len_out[0] = index_access[cursor.offset + 1] - begin
    (__pyx_v_len_out[0]) = ((__pyx_v_index_access[(__pyx_v_cursor->offset + 1)]) - __pyx_v_begin);
+1288:         buf_out[0] = <const char*>&char_access[begin]
    (__pyx_v_buf_out[0]) = ((char const *)(&(__pyx_v_char_access[__pyx_v_begin])));
+1289:     return valid
  __pyx_r = __pyx_v_valid;
  goto __pyx_L0;
 1290: 
 1291: 
+1292: cdef inline void_int _dataframe_cell_str_pyobj_to_utf8(
static CYTHON_INLINE __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_cell_str_pyobj_to_utf8(struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_cursor_t *__pyx_v_cursor, int *__pyx_v_valid_out, struct line_sender_utf8 *__pyx_v_utf8_out) {
  PyObject **__pyx_v_access;
  PyObject *__pyx_v_cell;
  __pyx_t_7questdb_7ingress_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_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("questdb.ingress._dataframe_cell_str_pyobj_to_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1293:         qdb_pystr_buf* b,
 1294:         col_cursor_t* cursor,
 1295:         bint* valid_out,
 1296:         line_sender_utf8* utf8_out) except -1:
+1297:     cdef PyObject** access = <PyObject**>cursor.chunk.buffers[1]
  __pyx_v_access = ((PyObject **)(__pyx_v_cursor->chunk->buffers[1]));
+1298:     cdef PyObject* cell = access[cursor.offset]
  __pyx_v_cell = (__pyx_v_access[__pyx_v_cursor->offset]);
+1299:     if PyUnicode_CheckExact(cell):
  __pyx_t_1 = PyUnicode_CheckExact(__pyx_v_cell);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+1300:         str_to_utf8(b, cell, utf8_out)
    __pyx_t_2 = __pyx_f_7questdb_7ingress_str_to_utf8(__pyx_v_b, __pyx_v_cell, __pyx_v_utf8_out); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1300, __pyx_L1_error)
+1301:         valid_out[0] = True
    (__pyx_v_valid_out[0]) = 1;
+1302:     elif _dataframe_is_null_pyobj(cell):
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_is_null_pyobj(__pyx_v_cell);
  if (likely(__pyx_t_1)) {
/* … */
    goto __pyx_L3;
  }
+1303:         valid_out[0] = False
    (__pyx_v_valid_out[0]) = 0;
 1304:     else:
+1305:         raise ValueError(
  /*else*/ {
/* … */
    __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1305, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_7, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_ERR(1, 1305, __pyx_L1_error)
  }
  __pyx_L3:;
+1306:             'Expected a string, ' +
    __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Expected_a_string, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1306, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+1307:             f'got an object of type {_fqn(type(<object>cell))}.')
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1307, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = 0;
    __pyx_t_5 = 127;
    __Pyx_INCREF(__pyx_kp_u_got_an_object_of_type);
    __pyx_t_4 += 22;
    __Pyx_GIVEREF(__pyx_kp_u_got_an_object_of_type);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_got_an_object_of_type);
    __pyx_t_6 = __pyx_f_7questdb_7ingress__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1307, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1307, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_5;
    __pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7);
    __pyx_t_7 = 0;
    __Pyx_INCREF(__pyx_kp_u__5);
    __pyx_t_4 += 1;
    __Pyx_GIVEREF(__pyx_kp_u__5);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u__5);
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1307, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 1308: 
 1309: 
+1310: cdef void_int _dataframe_serialize_cell_table__str_pyobj(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_table__str_pyobj(struct line_sender_buffer *__pyx_v_ls_buf, struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col) {
  struct line_sender_error *__pyx_v_err;
  PyObject **__pyx_v_access;
  PyObject *__pyx_v_cell;
  struct line_sender_table_name __pyx_v_c_table_name;
  __pyx_t_7questdb_7ingress_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_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_table__str_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1311:         line_sender_buffer* ls_buf,
 1312:         qdb_pystr_buf* b,
 1313:         col_t* col) except -1:
+1314:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1315:     cdef PyObject** access = <PyObject**>col.cursor.chunk.buffers[1]
  __pyx_v_access = ((PyObject **)(__pyx_v_col->cursor.chunk->buffers[1]));
+1316:     cdef PyObject* cell = access[col.cursor.offset]
  __pyx_v_cell = (__pyx_v_access[__pyx_v_col->cursor.offset]);
 1317:     cdef line_sender_table_name c_table_name
+1318:     if not PyUnicode_CheckExact(cell):
  __pyx_t_1 = (!PyUnicode_CheckExact(__pyx_v_cell));
  if (__pyx_t_1) {
/* … */
  }
+1319:         if _dataframe_is_null_pyobj(cell):
    __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_is_null_pyobj(__pyx_v_cell);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1320:             raise ValueError('Expected a table name, got a null value')
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1320, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1320, __pyx_L1_error)
/* … */
  __pyx_tuple__23 = PyTuple_Pack(1, __pyx_kp_u_Expected_a_table_name_got_a_null); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(1, 1320, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__23);
  __Pyx_GIVEREF(__pyx_tuple__23);
 1321:         else:
+1322:             raise ValueError(
    /*else*/ {
/* … */
      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1322, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_Raise(__pyx_t_6, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __PYX_ERR(1, 1322, __pyx_L1_error)
    }
+1323:                 'Expected a table name (str object), ' +
      __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Expected_a_table_name_str_object, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1323, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+1324:                 f'got an object of type {_fqn(type(<object>cell))}.')
      __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1324, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = 0;
      __pyx_t_4 = 127;
      __Pyx_INCREF(__pyx_kp_u_got_an_object_of_type);
      __pyx_t_3 += 22;
      __Pyx_GIVEREF(__pyx_kp_u_got_an_object_of_type);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_got_an_object_of_type);
      __pyx_t_5 = __pyx_f_7questdb_7ingress__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1324, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1324, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_4 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_4) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_4;
      __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6);
      __pyx_t_6 = 0;
      __Pyx_INCREF(__pyx_kp_u__5);
      __pyx_t_3 += 1;
      __Pyx_GIVEREF(__pyx_kp_u__5);
      PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u__5);
      __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1324, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1325:     str_to_table_name(b, cell, &c_table_name)
  __pyx_t_7 = __pyx_f_7questdb_7ingress_str_to_table_name(__pyx_v_b, __pyx_v_cell, (&__pyx_v_c_table_name)); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1325, __pyx_L1_error)
+1326:     if not line_sender_buffer_table(ls_buf, c_table_name, &err):
  __pyx_t_1 = (!line_sender_buffer_table(__pyx_v_ls_buf, __pyx_v_c_table_name, (&__pyx_v_err)));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1327:         raise c_err_to_py(err)
    __pyx_t_6 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1327, __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(1, 1327, __pyx_L1_error)
 1328: 
 1329: 
+1330: cdef void_int _dataframe_serialize_cell_table__str_utf8_arrow(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_table__str_utf8_arrow(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  size_t __pyx_v_c_len;
  char const *__pyx_v_buf;
  struct line_sender_table_name __pyx_v_c_table_name;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_table__str_utf8_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1331:         line_sender_buffer* ls_buf,
 1332:         qdb_pystr_buf* b,
 1333:         col_t* col,
 1334:         PyThreadState** gs) except -1:
+1335:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 1336:     cdef size_t c_len
 1337:     cdef const char* buf
 1338:     cdef line_sender_table_name c_table_name
+1339:     if _dataframe_arrow_str_utf8(&col.cursor, &c_len, &buf):
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_arrow_str_utf8((&__pyx_v_col->cursor), (&__pyx_v_c_len), (&__pyx_v_buf));
  if (likely(__pyx_t_1)) {
/* … */
    goto __pyx_L3;
  }
+1340:         if not line_sender_table_name_init(&c_table_name, c_len, buf, &err):
    __pyx_t_1 = (!line_sender_table_name_init((&__pyx_v_c_table_name), __pyx_v_c_len, __pyx_v_buf, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1341:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1341, __pyx_L1_error)
+1342:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1342, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1342, __pyx_L1_error)
+1343:         if not line_sender_buffer_table(ls_buf, c_table_name, &err):
    __pyx_t_1 = (!line_sender_buffer_table(__pyx_v_ls_buf, __pyx_v_c_table_name, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1344:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1344, __pyx_L1_error)
+1345:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1345, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1345, __pyx_L1_error)
 1346:     else:
+1347:         _ensure_has_gil(gs)
  /*else*/ {
    __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1347, __pyx_L1_error)
+1348:         raise ValueError('Table name cannot be null')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1348, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 1348, __pyx_L1_error)
  }
  __pyx_L3:;
/* … */
  __pyx_tuple__24 = PyTuple_Pack(1, __pyx_kp_u_Table_name_cannot_be_null); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(1, 1348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__24);
  __Pyx_GIVEREF(__pyx_tuple__24);
 1349: 
+1350: cdef void_int _dataframe_serialize_cell_table__str_lrg_utf8_arrow(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_table__str_lrg_utf8_arrow(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  size_t __pyx_v_c_len;
  char const *__pyx_v_buf;
  struct line_sender_table_name __pyx_v_c_table_name;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_table__str_lrg_utf8_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1351:         line_sender_buffer* ls_buf,
 1352:         qdb_pystr_buf* b,
 1353:         col_t* col,
 1354:         PyThreadState** gs) except -1:
+1355:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 1356:     cdef size_t c_len
 1357:     cdef const char* buf
 1358:     cdef line_sender_table_name c_table_name
+1359:     if _dataframe_arrow_str_utf8_lrg(&col.cursor, &c_len, &buf):
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_arrow_str_utf8_lrg((&__pyx_v_col->cursor), (&__pyx_v_c_len), (&__pyx_v_buf));
  if (likely(__pyx_t_1)) {
/* … */
    goto __pyx_L3;
  }
+1360:         if not line_sender_table_name_init(&c_table_name, c_len, buf, &err):
    __pyx_t_1 = (!line_sender_table_name_init((&__pyx_v_c_table_name), __pyx_v_c_len, __pyx_v_buf, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1361:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1361, __pyx_L1_error)
+1362:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1362, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1362, __pyx_L1_error)
+1363:         if not line_sender_buffer_table(ls_buf, c_table_name, &err):
    __pyx_t_1 = (!line_sender_buffer_table(__pyx_v_ls_buf, __pyx_v_c_table_name, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1364:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1364, __pyx_L1_error)
+1365:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1365, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1365, __pyx_L1_error)
 1366:     else:
+1367:         _ensure_has_gil(gs)
  /*else*/ {
    __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1367, __pyx_L1_error)
+1368:         raise ValueError('Table name cannot be null')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1368, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 1368, __pyx_L1_error)
  }
  __pyx_L3:;
 1369: 
 1370: 
+1371: cdef void_int _dataframe_serialize_cell_table__str_i8_cat(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_table__str_i8_cat(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  size_t __pyx_v_c_len;
  char const *__pyx_v_c_buf;
  struct line_sender_table_name __pyx_v_c_table_name;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_table__str_i8_cat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1372:         line_sender_buffer* ls_buf,
 1373:         qdb_pystr_buf* b,
 1374:         col_t* col,
 1375:         PyThreadState** gs) except -1:
+1376:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 1377:     cdef size_t c_len
 1378:     cdef const char* c_buf
 1379:     cdef line_sender_table_name c_table_name
+1380:     if _dataframe_arrow_get_cat_i8(&col.cursor, &c_len, &c_buf):
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_arrow_get_cat_i8((&__pyx_v_col->cursor), (&__pyx_v_c_len), (&__pyx_v_c_buf));
  if (likely(__pyx_t_1)) {
/* … */
    goto __pyx_L3;
  }
+1381:         if not line_sender_table_name_init(&c_table_name, c_len, c_buf, &err):
    __pyx_t_1 = (!line_sender_table_name_init((&__pyx_v_c_table_name), __pyx_v_c_len, __pyx_v_c_buf, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1382:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1382, __pyx_L1_error)
+1383:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1383, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1383, __pyx_L1_error)
+1384:         if not line_sender_buffer_table(ls_buf, c_table_name, &err):
    __pyx_t_1 = (!line_sender_buffer_table(__pyx_v_ls_buf, __pyx_v_c_table_name, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1385:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1385, __pyx_L1_error)
+1386:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1386, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1386, __pyx_L1_error)
 1387:     else:
+1388:         _ensure_has_gil(gs)
  /*else*/ {
    __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1388, __pyx_L1_error)
+1389:         raise ValueError('Table name cannot be null')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1389, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 1389, __pyx_L1_error)
  }
  __pyx_L3:;
 1390: 
 1391: 
+1392: cdef void_int _dataframe_serialize_cell_table__str_i16_cat(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_table__str_i16_cat(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  size_t __pyx_v_c_len;
  char const *__pyx_v_c_buf;
  struct line_sender_table_name __pyx_v_c_table_name;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_table__str_i16_cat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1393:         line_sender_buffer* ls_buf,
 1394:         qdb_pystr_buf* b,
 1395:         col_t* col,
 1396:         PyThreadState** gs) except -1:
+1397:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 1398:     cdef size_t c_len
 1399:     cdef const char* c_buf
 1400:     cdef line_sender_table_name c_table_name
+1401:     if _dataframe_arrow_get_cat_i16(&col.cursor, &c_len, &c_buf):
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_arrow_get_cat_i16((&__pyx_v_col->cursor), (&__pyx_v_c_len), (&__pyx_v_c_buf));
  if (likely(__pyx_t_1)) {
/* … */
    goto __pyx_L3;
  }
+1402:         if not line_sender_table_name_init(&c_table_name, c_len, c_buf, &err):
    __pyx_t_1 = (!line_sender_table_name_init((&__pyx_v_c_table_name), __pyx_v_c_len, __pyx_v_c_buf, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1403:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1403, __pyx_L1_error)
+1404:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1404, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1404, __pyx_L1_error)
+1405:         if not line_sender_buffer_table(ls_buf, c_table_name, &err):
    __pyx_t_1 = (!line_sender_buffer_table(__pyx_v_ls_buf, __pyx_v_c_table_name, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1406:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1406, __pyx_L1_error)
+1407:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1407, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1407, __pyx_L1_error)
 1408:     else:
+1409:         _ensure_has_gil(gs)
  /*else*/ {
    __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1409, __pyx_L1_error)
+1410:         raise ValueError('Table name cannot be null')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 1410, __pyx_L1_error)
  }
  __pyx_L3:;
 1411: 
 1412: 
+1413: cdef void_int _dataframe_serialize_cell_table__str_i32_cat(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_table__str_i32_cat(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  size_t __pyx_v_c_len;
  char const *__pyx_v_c_buf;
  struct line_sender_table_name __pyx_v_c_table_name;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_table__str_i32_cat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1414:         line_sender_buffer* ls_buf,
 1415:         qdb_pystr_buf* b,
 1416:         col_t* col,
 1417:         PyThreadState** gs) except -1:
+1418:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 1419:     cdef size_t c_len
 1420:     cdef const char* c_buf
 1421:     cdef line_sender_table_name c_table_name
+1422:     if _dataframe_arrow_get_cat_i32(&col.cursor, &c_len, &c_buf):
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_arrow_get_cat_i32((&__pyx_v_col->cursor), (&__pyx_v_c_len), (&__pyx_v_c_buf));
  if (likely(__pyx_t_1)) {
/* … */
    goto __pyx_L3;
  }
+1423:         if not line_sender_table_name_init(&c_table_name, c_len, c_buf, &err):
    __pyx_t_1 = (!line_sender_table_name_init((&__pyx_v_c_table_name), __pyx_v_c_len, __pyx_v_c_buf, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1424:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1424, __pyx_L1_error)
+1425:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1425, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1425, __pyx_L1_error)
+1426:         if not line_sender_buffer_table(ls_buf, c_table_name, &err):
    __pyx_t_1 = (!line_sender_buffer_table(__pyx_v_ls_buf, __pyx_v_c_table_name, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1427:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1427, __pyx_L1_error)
+1428:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1428, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1428, __pyx_L1_error)
 1429:     else:
+1430:         _ensure_has_gil(gs)
  /*else*/ {
    __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1430, __pyx_L1_error)
+1431:         raise ValueError('Table name cannot be null')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1431, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 1431, __pyx_L1_error)
  }
  __pyx_L3:;
 1432: 
 1433: 
+1434: cdef void_int _dataframe_serialize_cell_symbol__str_pyobj(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_symbol__str_pyobj(struct line_sender_buffer *__pyx_v_ls_buf, struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col) {
  struct line_sender_error *__pyx_v_err;
  int __pyx_v_valid;
  struct line_sender_utf8 __pyx_v_utf8;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_symbol__str_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1435:         line_sender_buffer* ls_buf,
 1436:         qdb_pystr_buf* b,
 1437:         col_t* col) except -1:
+1438:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1439:     cdef bint valid = False
  __pyx_v_valid = 0;
 1440:     cdef line_sender_utf8 utf8
+1441:     _dataframe_cell_str_pyobj_to_utf8(b, &col.cursor, &valid, &utf8)
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_cell_str_pyobj_to_utf8(__pyx_v_b, (&__pyx_v_col->cursor), (&__pyx_v_valid), (&__pyx_v_utf8)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1441, __pyx_L1_error)
+1442:     if valid and not line_sender_buffer_symbol(ls_buf, col.name, utf8, &err):
  if (__pyx_v_valid) {
  } else {
    __pyx_t_2 = __pyx_v_valid;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = (!line_sender_buffer_symbol(__pyx_v_ls_buf, __pyx_v_col->name, __pyx_v_utf8, (&__pyx_v_err)));
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+1443:         raise c_err_to_py(err)
    __pyx_t_4 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1443, __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(1, 1443, __pyx_L1_error)
 1444: 
 1445: 
+1446: cdef void_int _dataframe_serialize_cell_symbol__str_utf8_arrow(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_symbol__str_utf8_arrow(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_utf8 __pyx_v_utf8;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_symbol__str_utf8_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1447:         line_sender_buffer* ls_buf,
 1448:         qdb_pystr_buf* b,
 1449:         col_t* col,
 1450:         PyThreadState** gs) except -1:
+1451:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 1452:     cdef line_sender_utf8 utf8
+1453:     if _dataframe_arrow_str_utf8(&col.cursor, &utf8.len, &utf8.buf):
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_arrow_str_utf8((&__pyx_v_col->cursor), (&__pyx_v_utf8.len), (&__pyx_v_utf8.buf));
  if (__pyx_t_1) {
/* … */
  }
+1454:         if not line_sender_buffer_symbol(ls_buf, col.name, utf8, &err):
    __pyx_t_1 = (!line_sender_buffer_symbol(__pyx_v_ls_buf, __pyx_v_col->name, __pyx_v_utf8, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1455:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1455, __pyx_L1_error)
+1456:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1456, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1456, __pyx_L1_error)
 1457: 
+1458: cdef void_int _dataframe_serialize_cell_symbol__str_lrg_utf8_arrow(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_symbol__str_lrg_utf8_arrow(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_utf8 __pyx_v_utf8;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_symbol__str_lrg_utf8_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1459:         line_sender_buffer* ls_buf,
 1460:         qdb_pystr_buf* b,
 1461:         col_t* col,
 1462:         PyThreadState** gs) except -1:
+1463:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 1464:     cdef line_sender_utf8 utf8
+1465:     if _dataframe_arrow_str_utf8_lrg(&col.cursor, &utf8.len, &utf8.buf):
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_arrow_str_utf8_lrg((&__pyx_v_col->cursor), (&__pyx_v_utf8.len), (&__pyx_v_utf8.buf));
  if (__pyx_t_1) {
/* … */
  }
+1466:         if not line_sender_buffer_symbol(ls_buf, col.name, utf8, &err):
    __pyx_t_1 = (!line_sender_buffer_symbol(__pyx_v_ls_buf, __pyx_v_col->name, __pyx_v_utf8, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1467:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1467, __pyx_L1_error)
+1468:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1468, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1468, __pyx_L1_error)
 1469: 
 1470: 
+1471: cdef void_int _dataframe_serialize_cell_symbol__str_i8_cat(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_symbol__str_i8_cat(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_utf8 __pyx_v_utf8;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_symbol__str_i8_cat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1472:         line_sender_buffer* ls_buf,
 1473:         qdb_pystr_buf* b,
 1474:         col_t* col,
 1475:         PyThreadState** gs) except -1:
+1476:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 1477:     cdef line_sender_utf8 utf8
+1478:     if _dataframe_arrow_get_cat_i8(&col.cursor, &utf8.len, &utf8.buf):
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_arrow_get_cat_i8((&__pyx_v_col->cursor), (&__pyx_v_utf8.len), (&__pyx_v_utf8.buf));
  if (__pyx_t_1) {
/* … */
  }
+1479:         if not line_sender_buffer_symbol(ls_buf, col.name, utf8, &err):
    __pyx_t_1 = (!line_sender_buffer_symbol(__pyx_v_ls_buf, __pyx_v_col->name, __pyx_v_utf8, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1480:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1480, __pyx_L1_error)
+1481:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1481, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1481, __pyx_L1_error)
 1482: 
 1483: 
+1484: cdef void_int _dataframe_serialize_cell_symbol__str_i16_cat(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_symbol__str_i16_cat(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_utf8 __pyx_v_utf8;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_symbol__str_i16_cat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1485:         line_sender_buffer* ls_buf,
 1486:         qdb_pystr_buf* b,
 1487:         col_t* col,
 1488:         PyThreadState** gs) except -1:
+1489:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 1490:     cdef line_sender_utf8 utf8
+1491:     if _dataframe_arrow_get_cat_i16(&col.cursor, &utf8.len, &utf8.buf):
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_arrow_get_cat_i16((&__pyx_v_col->cursor), (&__pyx_v_utf8.len), (&__pyx_v_utf8.buf));
  if (__pyx_t_1) {
/* … */
  }
+1492:         if not line_sender_buffer_symbol(ls_buf, col.name, utf8, &err):
    __pyx_t_1 = (!line_sender_buffer_symbol(__pyx_v_ls_buf, __pyx_v_col->name, __pyx_v_utf8, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1493:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1493, __pyx_L1_error)
+1494:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1494, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1494, __pyx_L1_error)
 1495: 
 1496: 
+1497: cdef void_int _dataframe_serialize_cell_symbol__str_i32_cat(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_symbol__str_i32_cat(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_utf8 __pyx_v_utf8;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_symbol__str_i32_cat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1498:         line_sender_buffer* ls_buf,
 1499:         qdb_pystr_buf* b,
 1500:         col_t* col,
 1501:         PyThreadState** gs) except -1:
+1502:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 1503:     cdef line_sender_utf8 utf8
+1504:     if _dataframe_arrow_get_cat_i32(&col.cursor, &utf8.len, &utf8.buf):
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_arrow_get_cat_i32((&__pyx_v_col->cursor), (&__pyx_v_utf8.len), (&__pyx_v_utf8.buf));
  if (__pyx_t_1) {
/* … */
  }
+1505:         if not line_sender_buffer_symbol(ls_buf, col.name, utf8, &err):
    __pyx_t_1 = (!line_sender_buffer_symbol(__pyx_v_ls_buf, __pyx_v_col->name, __pyx_v_utf8, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1506:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1506, __pyx_L1_error)
+1507:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1507, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1507, __pyx_L1_error)
 1508: 
 1509: 
+1510: cdef void_int _dataframe_serialize_cell_column_bool__bool_pyobj(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_bool__bool_pyobj(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col) {
  struct line_sender_error *__pyx_v_err;
  PyObject **__pyx_v_access;
  PyObject *__pyx_v_cell;
  __pyx_t_7questdb_7ingress_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.ingress._dataframe_serialize_cell_column_bool__bool_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1511:         line_sender_buffer* ls_buf,
 1512:         qdb_pystr_buf* b,
 1513:         col_t* col) except -1:
+1514:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1515:     cdef PyObject** access = <PyObject**>col.cursor.chunk.buffers[1]
  __pyx_v_access = ((PyObject **)(__pyx_v_col->cursor.chunk->buffers[1]));
+1516:     cdef PyObject* cell = access[col.cursor.offset]
  __pyx_v_cell = (__pyx_v_access[__pyx_v_col->cursor.offset]);
+1517:     if PyBool_Check(cell):
  __pyx_t_1 = PyBool_Check(__pyx_v_cell);
  if (likely(__pyx_t_1)) {
/* … */
    goto __pyx_L3;
  }
+1518:         if not line_sender_buffer_column_bool(
    __pyx_t_1 = (!line_sender_buffer_column_bool(__pyx_v_ls_buf, __pyx_v_col->name, (__pyx_v_cell == Py_True), (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
 1519:                 ls_buf, col.name, cell == Py_True, &err):
+1520:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1520, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1520, __pyx_L1_error)
+1521:     elif _dataframe_is_null_pyobj(cell):
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_is_null_pyobj(__pyx_v_cell);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1522:         raise ValueError('Cannot insert null values into a boolean column.')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1522, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 1522, __pyx_L1_error)
/* … */
  __pyx_tuple__25 = PyTuple_Pack(1, __pyx_kp_u_Cannot_insert_null_values_into_a); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(1, 1522, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__25);
  __Pyx_GIVEREF(__pyx_tuple__25);
 1523:     else:
+1524:         raise ValueError(
  /*else*/ {
/* … */
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1524, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(1, 1524, __pyx_L1_error)
  }
  __pyx_L3:;
+1525:             'Expected an object of type bool, got a ' +
    __pyx_t_3 = __Pyx_PyUnicode_ConcatSafe(__pyx_kp_u_Expected_an_object_of_type_bool, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1525, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1526:             _fqn(type(<object>cell)) + '.')
    __pyx_t_2 = __pyx_f_7questdb_7ingress__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1526, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
/* … */
    __pyx_t_2 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_3, __pyx_kp_u__5); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1526, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 1527: 
 1528: 
+1529: cdef void_int _dataframe_serialize_cell_column_bool__bool_numpy(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_bool__bool_numpy(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  uint8_t *__pyx_v_access;
  uint8_t __pyx_v_cell;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_bool__bool_numpy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1530:         line_sender_buffer* ls_buf,
 1531:         qdb_pystr_buf* b,
 1532:         col_t* col,
 1533:         PyThreadState** gs) except -1:
+1534:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1535:     cdef uint8_t* access = <uint8_t*>col.cursor.chunk.buffers[1]
  __pyx_v_access = ((uint8_t *)(__pyx_v_col->cursor.chunk->buffers[1]));
+1536:     cdef uint8_t cell = access[col.cursor.offset]
  __pyx_v_cell = (__pyx_v_access[__pyx_v_col->cursor.offset]);
+1537:     if not line_sender_buffer_column_bool(ls_buf, col.name, not not cell, &err):
  __pyx_t_1 = (!line_sender_buffer_column_bool(__pyx_v_ls_buf, __pyx_v_col->name, (!(!(__pyx_v_cell != 0))), (&__pyx_v_err)));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1538:         _ensure_has_gil(gs)
    __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1538, __pyx_L1_error)
+1539:         raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1539, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 1539, __pyx_L1_error)
 1540: 
 1541: 
+1542: cdef void_int _dataframe_serialize_cell_column_bool__bool_arrow(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_bool__bool_arrow(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  int __pyx_v_valid;
  int __pyx_v_value;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_bool__bool_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1543:         line_sender_buffer* ls_buf,
 1544:         qdb_pystr_buf* b,
 1545:         col_t* col,
 1546:         PyThreadState** gs) except -1:
+1547:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1548:     cdef bint valid = _dataframe_arrow_is_valid(&col.cursor)
  __pyx_v_valid = __pyx_f_7questdb_7ingress__dataframe_arrow_is_valid((&__pyx_v_col->cursor));
 1549:     cdef bint value
+1550:     if valid:
  if (likely(__pyx_v_valid)) {
/* … */
    goto __pyx_L3;
  }
+1551:         value = _dataframe_arrow_get_bool(&col.cursor)
    __pyx_v_value = __pyx_f_7questdb_7ingress__dataframe_arrow_get_bool((&__pyx_v_col->cursor));
+1552:         if not line_sender_buffer_column_bool(ls_buf, col.name, value, &err):
    __pyx_t_1 = (!line_sender_buffer_column_bool(__pyx_v_ls_buf, __pyx_v_col->name, __pyx_v_value, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1553:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1553, __pyx_L1_error)
+1554:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1554, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1554, __pyx_L1_error)
 1555:     else:
+1556:         _ensure_has_gil(gs)
  /*else*/ {
    __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1556, __pyx_L1_error)
+1557:         raise ValueError('Cannot insert null values into a boolean column.')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1557, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 1557, __pyx_L1_error)
  }
  __pyx_L3:;
 1558: 
 1559: 
+1560: cdef void_int _dataframe_serialize_cell_column_i64__int_pyobj(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__int_pyobj(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col) {
  struct line_sender_error *__pyx_v_err;
  PyObject **__pyx_v_access;
  PyObject *__pyx_v_cell;
  int64_t __pyx_v_value;
  __pyx_t_7questdb_7ingress_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_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_i64__int_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1561:         line_sender_buffer* ls_buf,
 1562:         qdb_pystr_buf* b,
 1563:         col_t* col) except -1:
+1564:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1565:     cdef PyObject** access = <PyObject**>col.cursor.chunk.buffers[1]
  __pyx_v_access = ((PyObject **)(__pyx_v_col->cursor.chunk->buffers[1]));
+1566:     cdef PyObject* cell = access[col.cursor.offset]
  __pyx_v_cell = (__pyx_v_access[__pyx_v_col->cursor.offset]);
 1567:     cdef int64_t value
+1568:     if PyLong_CheckExact(cell):
  __pyx_t_1 = PyLong_CheckExact(__pyx_v_cell);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+1569:         value = PyLong_AsLongLong(cell)
    __pyx_t_2 = PyLong_AsLongLong(__pyx_v_cell); if (unlikely(__pyx_t_2 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(1, 1569, __pyx_L1_error)
    __pyx_v_value = __pyx_t_2;
+1570:         if not line_sender_buffer_column_i64(ls_buf, col.name, value, &err):
    __pyx_t_1 = (!line_sender_buffer_column_i64(__pyx_v_ls_buf, __pyx_v_col->name, __pyx_v_value, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1571:             raise c_err_to_py(err)
      __pyx_t_3 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1571, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(1, 1571, __pyx_L1_error)
+1572:     elif _dataframe_is_null_pyobj(cell):
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_is_null_pyobj(__pyx_v_cell);
  if (likely(__pyx_t_1)) {
    goto __pyx_L3;
  }
 1573:         pass
 1574:     else:
+1575:         raise ValueError(
  /*else*/ {
/* … */
    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1575, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(1, 1575, __pyx_L1_error)
  }
  __pyx_L3:;
+1576:             'Expected an object of type int, got an object of type ' +
    __pyx_t_4 = __Pyx_PyUnicode_ConcatSafe(__pyx_kp_u_Expected_an_object_of_type_int_g, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1576, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1577:             _fqn(type(<object>cell)) + '.')
    __pyx_t_3 = __pyx_f_7questdb_7ingress__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1577, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
/* … */
    __pyx_t_3 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_4, __pyx_kp_u__5); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1577, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 1578: 
 1579: 
+1580: cdef void_int _dataframe_serialize_cell_column_i64__u8_numpy(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__u8_numpy(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  uint8_t *__pyx_v_access;
  uint8_t __pyx_v_cell;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_i64__u8_numpy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1581:         line_sender_buffer* ls_buf,
 1582:         qdb_pystr_buf* b,
 1583:         col_t* col,
 1584:         PyThreadState** gs) except -1:
+1585:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1586:     cdef uint8_t* access = <uint8_t*>col.cursor.chunk.buffers[1]
  __pyx_v_access = ((uint8_t *)(__pyx_v_col->cursor.chunk->buffers[1]));
+1587:     cdef uint8_t cell = access[col.cursor.offset]
  __pyx_v_cell = (__pyx_v_access[__pyx_v_col->cursor.offset]);
+1588:     if not line_sender_buffer_column_i64(ls_buf, col.name, <int64_t>cell, &err):
  __pyx_t_1 = (!line_sender_buffer_column_i64(__pyx_v_ls_buf, __pyx_v_col->name, ((int64_t)__pyx_v_cell), (&__pyx_v_err)));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1589:         _ensure_has_gil(gs)
    __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1589, __pyx_L1_error)
+1590:         raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1590, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 1590, __pyx_L1_error)
 1591: 
 1592: 
+1593: cdef void_int _dataframe_serialize_cell_column_i64__i8_numpy(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__i8_numpy(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  int8_t *__pyx_v_access;
  int8_t __pyx_v_cell;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_i64__i8_numpy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1594:         line_sender_buffer* ls_buf,
 1595:         qdb_pystr_buf* b,
 1596:         col_t* col,
 1597:         PyThreadState** gs) except -1:
+1598:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1599:     cdef int8_t* access = <int8_t*>col.cursor.chunk.buffers[1]
  __pyx_v_access = ((int8_t *)(__pyx_v_col->cursor.chunk->buffers[1]));
+1600:     cdef int8_t cell = access[col.cursor.offset]
  __pyx_v_cell = (__pyx_v_access[__pyx_v_col->cursor.offset]);
+1601:     if not line_sender_buffer_column_i64(ls_buf, col.name, <int64_t>cell, &err):
  __pyx_t_1 = (!line_sender_buffer_column_i64(__pyx_v_ls_buf, __pyx_v_col->name, ((int64_t)__pyx_v_cell), (&__pyx_v_err)));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1602:         _ensure_has_gil(gs)
    __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1602, __pyx_L1_error)
+1603:         raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1603, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 1603, __pyx_L1_error)
 1604: 
 1605: 
+1606: cdef void_int _dataframe_serialize_cell_column_i64__u16_numpy(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__u16_numpy(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  uint16_t *__pyx_v_access;
  uint16_t __pyx_v_cell;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_i64__u16_numpy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1607:         line_sender_buffer* ls_buf,
 1608:         qdb_pystr_buf* b,
 1609:         col_t* col,
 1610:         PyThreadState** gs) except -1:
+1611:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1612:     cdef uint16_t* access = <uint16_t*>col.cursor.chunk.buffers[1]
  __pyx_v_access = ((uint16_t *)(__pyx_v_col->cursor.chunk->buffers[1]));
+1613:     cdef uint16_t cell = access[col.cursor.offset]
  __pyx_v_cell = (__pyx_v_access[__pyx_v_col->cursor.offset]);
+1614:     if not line_sender_buffer_column_i64(ls_buf, col.name, <int64_t>cell, &err):
  __pyx_t_1 = (!line_sender_buffer_column_i64(__pyx_v_ls_buf, __pyx_v_col->name, ((int64_t)__pyx_v_cell), (&__pyx_v_err)));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1615:         _ensure_has_gil(gs)
    __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1615, __pyx_L1_error)
+1616:         raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1616, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 1616, __pyx_L1_error)
 1617: 
 1618: 
+1619: cdef void_int _dataframe_serialize_cell_column_i64__i16_numpy(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__i16_numpy(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  int16_t *__pyx_v_access;
  int16_t __pyx_v_cell;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_i64__i16_numpy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1620:         line_sender_buffer* ls_buf,
 1621:         qdb_pystr_buf* b,
 1622:         col_t* col,
 1623:         PyThreadState** gs) except -1:
+1624:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1625:     cdef int16_t* access = <int16_t*>col.cursor.chunk.buffers[1]
  __pyx_v_access = ((int16_t *)(__pyx_v_col->cursor.chunk->buffers[1]));
+1626:     cdef int16_t cell = access[col.cursor.offset]
  __pyx_v_cell = (__pyx_v_access[__pyx_v_col->cursor.offset]);
+1627:     if not line_sender_buffer_column_i64(ls_buf, col.name, <int64_t>cell, &err):
  __pyx_t_1 = (!line_sender_buffer_column_i64(__pyx_v_ls_buf, __pyx_v_col->name, ((int64_t)__pyx_v_cell), (&__pyx_v_err)));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1628:         _ensure_has_gil(gs)
    __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1628, __pyx_L1_error)
+1629:         raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1629, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 1629, __pyx_L1_error)
 1630: 
 1631: 
+1632: cdef void_int _dataframe_serialize_cell_column_i64__u32_numpy(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__u32_numpy(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  uint32_t *__pyx_v_access;
  uint32_t __pyx_v_cell;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_i64__u32_numpy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1633:         line_sender_buffer* ls_buf,
 1634:         qdb_pystr_buf* b,
 1635:         col_t* col,
 1636:         PyThreadState** gs) except -1:
+1637:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1638:     cdef uint32_t* access = <uint32_t*>col.cursor.chunk.buffers[1]
  __pyx_v_access = ((uint32_t *)(__pyx_v_col->cursor.chunk->buffers[1]));
+1639:     cdef uint32_t cell = access[col.cursor.offset]
  __pyx_v_cell = (__pyx_v_access[__pyx_v_col->cursor.offset]);
+1640:     if not line_sender_buffer_column_i64(ls_buf, col.name, <int64_t>cell, &err):
  __pyx_t_1 = (!line_sender_buffer_column_i64(__pyx_v_ls_buf, __pyx_v_col->name, ((int64_t)__pyx_v_cell), (&__pyx_v_err)));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1641:         _ensure_has_gil(gs)
    __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1641, __pyx_L1_error)
+1642:         raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1642, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 1642, __pyx_L1_error)
 1643: 
 1644: 
+1645: cdef void_int _dataframe_serialize_cell_column_i64__i32_numpy(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__i32_numpy(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  int32_t *__pyx_v_access;
  int32_t __pyx_v_cell;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_i64__i32_numpy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1646:         line_sender_buffer* ls_buf,
 1647:         qdb_pystr_buf* b,
 1648:         col_t* col,
 1649:         PyThreadState** gs) except -1:
+1650:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1651:     cdef int32_t* access = <int32_t*>col.cursor.chunk.buffers[1]
  __pyx_v_access = ((int32_t *)(__pyx_v_col->cursor.chunk->buffers[1]));
+1652:     cdef int32_t cell = access[col.cursor.offset]
  __pyx_v_cell = (__pyx_v_access[__pyx_v_col->cursor.offset]);
+1653:     if not line_sender_buffer_column_i64(ls_buf, col.name, <int64_t>cell, &err):
  __pyx_t_1 = (!line_sender_buffer_column_i64(__pyx_v_ls_buf, __pyx_v_col->name, ((int64_t)__pyx_v_cell), (&__pyx_v_err)));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1654:         _ensure_has_gil(gs)
    __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1654, __pyx_L1_error)
+1655:         raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1655, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 1655, __pyx_L1_error)
 1656: 
 1657: 
+1658: cdef void_int _dataframe_serialize_cell_column_i64__u64_numpy(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__u64_numpy(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  uint64_t *__pyx_v_access;
  uint64_t __pyx_v_cell;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_i64__u64_numpy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1659:         line_sender_buffer* ls_buf,
 1660:         qdb_pystr_buf* b,
 1661:         col_t* col,
 1662:         PyThreadState** gs) except -1:
+1663:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1664:     cdef uint64_t* access = <uint64_t*>col.cursor.chunk.buffers[1]
  __pyx_v_access = ((uint64_t *)(__pyx_v_col->cursor.chunk->buffers[1]));
+1665:     cdef uint64_t cell = access[col.cursor.offset]
  __pyx_v_cell = (__pyx_v_access[__pyx_v_col->cursor.offset]);
+1666:     if cell > <uint64_t>INT64_MAX:
  __pyx_t_1 = (__pyx_v_cell > ((uint64_t)INT64_MAX));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1667:         _ensure_has_gil(gs)
    __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1667, __pyx_L1_error)
+1668:         raise OverflowError('uint64 value too large for int64 column type.')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1668, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 1668, __pyx_L1_error)
/* … */
  __pyx_tuple__26 = PyTuple_Pack(1, __pyx_kp_u_uint64_value_too_large_for_int64); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(1, 1668, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__26);
  __Pyx_GIVEREF(__pyx_tuple__26);
+1669:     if not line_sender_buffer_column_i64(ls_buf, col.name, <int64_t>cell, &err):
  __pyx_t_1 = (!line_sender_buffer_column_i64(__pyx_v_ls_buf, __pyx_v_col->name, ((int64_t)__pyx_v_cell), (&__pyx_v_err)));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1670:         _ensure_has_gil(gs)
    __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1670, __pyx_L1_error)
+1671:         raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1671, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 1671, __pyx_L1_error)
 1672: 
 1673: 
+1674: cdef void_int _dataframe_serialize_cell_column_i64__i64_numpy(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__i64_numpy(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  int64_t *__pyx_v_access;
  int64_t __pyx_v_cell;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_i64__i64_numpy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1675:         line_sender_buffer* ls_buf,
 1676:         qdb_pystr_buf* b,
 1677:         col_t* col,
 1678:         PyThreadState** gs) except -1:
+1679:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1680:     cdef int64_t* access = <int64_t*>col.cursor.chunk.buffers[1]
  __pyx_v_access = ((int64_t *)(__pyx_v_col->cursor.chunk->buffers[1]));
+1681:     cdef int64_t cell = access[col.cursor.offset]
  __pyx_v_cell = (__pyx_v_access[__pyx_v_col->cursor.offset]);
+1682:     if not line_sender_buffer_column_i64(ls_buf, col.name, cell, &err):
  __pyx_t_1 = (!line_sender_buffer_column_i64(__pyx_v_ls_buf, __pyx_v_col->name, __pyx_v_cell, (&__pyx_v_err)));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1683:         _ensure_has_gil(gs)
    __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1683, __pyx_L1_error)
+1684:         raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1684, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 1684, __pyx_L1_error)
 1685: 
 1686: 
+1687: cdef void_int _dataframe_serialize_cell_column_i64__u8_arrow(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__u8_arrow(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  int __pyx_v_valid;
  uint8_t *__pyx_v_access;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_i64__u8_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1688:         line_sender_buffer* ls_buf,
 1689:         qdb_pystr_buf* b,
 1690:         col_t* col,
 1691:         PyThreadState** gs) except -1:
+1692:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1693:     cdef bint valid = _dataframe_arrow_is_valid(&col.cursor)
  __pyx_v_valid = __pyx_f_7questdb_7ingress__dataframe_arrow_is_valid((&__pyx_v_col->cursor));
 1694:     cdef uint8_t* access
+1695:     if valid:
  if (__pyx_v_valid) {
/* … */
  }
+1696:         access = <uint8_t*>col.cursor.chunk.buffers[1]
    __pyx_v_access = ((uint8_t *)(__pyx_v_col->cursor.chunk->buffers[1]));
+1697:         if not line_sender_buffer_column_i64(
    __pyx_t_1 = (!line_sender_buffer_column_i64(__pyx_v_ls_buf, __pyx_v_col->name, ((int64_t)(__pyx_v_access[__pyx_v_col->cursor.offset])), (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
 1698:                 ls_buf,
 1699:                 col.name,
 1700:                 <int64_t>access[col.cursor.offset],
 1701:                 &err):
+1702:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1702, __pyx_L1_error)
+1703:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1703, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1703, __pyx_L1_error)
 1704: 
 1705: 
+1706: cdef void_int _dataframe_serialize_cell_column_i64__i8_arrow(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__i8_arrow(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  int __pyx_v_valid;
  int8_t *__pyx_v_access;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_i64__i8_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1707:         line_sender_buffer* ls_buf,
 1708:         qdb_pystr_buf* b,
 1709:         col_t* col,
 1710:         PyThreadState** gs) except -1:
+1711:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1712:     cdef bint valid = _dataframe_arrow_is_valid(&col.cursor)
  __pyx_v_valid = __pyx_f_7questdb_7ingress__dataframe_arrow_is_valid((&__pyx_v_col->cursor));
 1713:     cdef int8_t* access
+1714:     if valid:
  if (__pyx_v_valid) {
/* … */
  }
+1715:         access = <int8_t*>col.cursor.chunk.buffers[1]
    __pyx_v_access = ((int8_t *)(__pyx_v_col->cursor.chunk->buffers[1]));
+1716:         if not line_sender_buffer_column_i64(
    __pyx_t_1 = (!line_sender_buffer_column_i64(__pyx_v_ls_buf, __pyx_v_col->name, ((int64_t)(__pyx_v_access[__pyx_v_col->cursor.offset])), (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
 1717:                 ls_buf,
 1718:                 col.name,
 1719:                 <int64_t>access[col.cursor.offset],
 1720:                 &err):
+1721:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1721, __pyx_L1_error)
+1722:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1722, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1722, __pyx_L1_error)
 1723: 
 1724: 
+1725: cdef void_int _dataframe_serialize_cell_column_i64__u16_arrow(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__u16_arrow(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  int __pyx_v_valid;
  uint16_t *__pyx_v_access;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_i64__u16_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1726:         line_sender_buffer* ls_buf,
 1727:         qdb_pystr_buf* b,
 1728:         col_t* col,
 1729:         PyThreadState** gs) except -1:
+1730:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1731:     cdef bint valid = _dataframe_arrow_is_valid(&col.cursor)
  __pyx_v_valid = __pyx_f_7questdb_7ingress__dataframe_arrow_is_valid((&__pyx_v_col->cursor));
 1732:     cdef uint16_t* access
+1733:     if valid:
  if (__pyx_v_valid) {
/* … */
  }
+1734:         access = <uint16_t*>col.cursor.chunk.buffers[1]
    __pyx_v_access = ((uint16_t *)(__pyx_v_col->cursor.chunk->buffers[1]));
+1735:         if not line_sender_buffer_column_i64(
    __pyx_t_1 = (!line_sender_buffer_column_i64(__pyx_v_ls_buf, __pyx_v_col->name, ((int64_t)(__pyx_v_access[__pyx_v_col->cursor.offset])), (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
 1736:                 ls_buf,
 1737:                 col.name,
 1738:                 <int64_t>access[col.cursor.offset],
 1739:                 &err):
+1740:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1740, __pyx_L1_error)
+1741:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1741, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1741, __pyx_L1_error)
 1742: 
 1743: 
+1744: cdef void_int _dataframe_serialize_cell_column_i64__i16_arrow(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__i16_arrow(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  int __pyx_v_valid;
  int16_t *__pyx_v_access;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_i64__i16_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1745:         line_sender_buffer* ls_buf,
 1746:         qdb_pystr_buf* b,
 1747:         col_t* col,
 1748:         PyThreadState** gs) except -1:
+1749:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1750:     cdef bint valid = _dataframe_arrow_is_valid(&col.cursor)
  __pyx_v_valid = __pyx_f_7questdb_7ingress__dataframe_arrow_is_valid((&__pyx_v_col->cursor));
 1751:     cdef int16_t* access
+1752:     if valid:
  if (__pyx_v_valid) {
/* … */
  }
+1753:         access = <int16_t*>col.cursor.chunk.buffers[1]
    __pyx_v_access = ((int16_t *)(__pyx_v_col->cursor.chunk->buffers[1]));
+1754:         if not line_sender_buffer_column_i64(
    __pyx_t_1 = (!line_sender_buffer_column_i64(__pyx_v_ls_buf, __pyx_v_col->name, ((int64_t)(__pyx_v_access[__pyx_v_col->cursor.offset])), (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
 1755:                 ls_buf,
 1756:                 col.name,
 1757:                 <int64_t>access[col.cursor.offset],
 1758:                 &err):
+1759:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1759, __pyx_L1_error)
+1760:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1760, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1760, __pyx_L1_error)
 1761: 
 1762: 
+1763: cdef void_int _dataframe_serialize_cell_column_i64__u32_arrow(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__u32_arrow(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  int __pyx_v_valid;
  uint32_t *__pyx_v_access;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_i64__u32_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1764:         line_sender_buffer* ls_buf,
 1765:         qdb_pystr_buf* b,
 1766:         col_t* col,
 1767:         PyThreadState** gs) except -1:
+1768:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1769:     cdef bint valid = _dataframe_arrow_is_valid(&col.cursor)
  __pyx_v_valid = __pyx_f_7questdb_7ingress__dataframe_arrow_is_valid((&__pyx_v_col->cursor));
 1770:     cdef uint32_t* access
+1771:     if valid:
  if (__pyx_v_valid) {
/* … */
  }
+1772:         access = <uint32_t*>col.cursor.chunk.buffers[1]
    __pyx_v_access = ((uint32_t *)(__pyx_v_col->cursor.chunk->buffers[1]));
+1773:         if not line_sender_buffer_column_i64(
    __pyx_t_1 = (!line_sender_buffer_column_i64(__pyx_v_ls_buf, __pyx_v_col->name, ((int64_t)(__pyx_v_access[__pyx_v_col->cursor.offset])), (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
 1774:                 ls_buf,
 1775:                 col.name,
 1776:                 <int64_t>access[col.cursor.offset],
 1777:                 &err):
+1778:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1778, __pyx_L1_error)
+1779:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1779, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1779, __pyx_L1_error)
 1780: 
 1781: 
+1782: cdef void_int _dataframe_serialize_cell_column_i64__i32_arrow(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__i32_arrow(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  int __pyx_v_valid;
  int32_t *__pyx_v_access;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_i64__i32_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1783:         line_sender_buffer* ls_buf,
 1784:         qdb_pystr_buf* b,
 1785:         col_t* col,
 1786:         PyThreadState** gs) except -1:
+1787:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1788:     cdef bint valid = _dataframe_arrow_is_valid(&col.cursor)
  __pyx_v_valid = __pyx_f_7questdb_7ingress__dataframe_arrow_is_valid((&__pyx_v_col->cursor));
 1789:     cdef int32_t* access
+1790:     if valid:
  if (__pyx_v_valid) {
/* … */
  }
+1791:         access = <int32_t*>col.cursor.chunk.buffers[1]
    __pyx_v_access = ((int32_t *)(__pyx_v_col->cursor.chunk->buffers[1]));
+1792:         if not line_sender_buffer_column_i64(
    __pyx_t_1 = (!line_sender_buffer_column_i64(__pyx_v_ls_buf, __pyx_v_col->name, ((int64_t)(__pyx_v_access[__pyx_v_col->cursor.offset])), (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
 1793:                 ls_buf,
 1794:                 col.name,
 1795:                 <int64_t>access[col.cursor.offset],
 1796:                 &err):
+1797:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1797, __pyx_L1_error)
+1798:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1798, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1798, __pyx_L1_error)
 1799: 
 1800: 
+1801: cdef void_int _dataframe_serialize_cell_column_i64__u64_arrow(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__u64_arrow(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  int __pyx_v_valid;
  uint64_t *__pyx_v_access;
  uint64_t __pyx_v_cell;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_i64__u64_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1802:         line_sender_buffer* ls_buf,
 1803:         qdb_pystr_buf* b,
 1804:         col_t* col,
 1805:         PyThreadState** gs) except -1:
+1806:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1807:     cdef bint valid = _dataframe_arrow_is_valid(&col.cursor)
  __pyx_v_valid = __pyx_f_7questdb_7ingress__dataframe_arrow_is_valid((&__pyx_v_col->cursor));
 1808:     cdef uint64_t* access
 1809:     cdef uint64_t cell
+1810:     if valid:
  if (__pyx_v_valid) {
/* … */
  }
+1811:         access = <uint64_t*>col.cursor.chunk.buffers[1]
    __pyx_v_access = ((uint64_t *)(__pyx_v_col->cursor.chunk->buffers[1]));
+1812:         cell = access[col.cursor.offset]
    __pyx_v_cell = (__pyx_v_access[__pyx_v_col->cursor.offset]);
+1813:         if cell > <uint64_t>INT64_MAX:
    __pyx_t_1 = (__pyx_v_cell > ((uint64_t)INT64_MAX));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1814:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1814, __pyx_L1_error)
+1815:             raise OverflowError('uint64 value too large for int64 column type.')
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1815, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1815, __pyx_L1_error)
+1816:         if not line_sender_buffer_column_i64(
    __pyx_t_1 = (!line_sender_buffer_column_i64(__pyx_v_ls_buf, __pyx_v_col->name, ((int64_t)__pyx_v_cell), (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
 1817:                 ls_buf,
 1818:                 col.name,
 1819:                 <int64_t>cell,
 1820:                 &err):
+1821:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1821, __pyx_L1_error)
+1822:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1822, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1822, __pyx_L1_error)
 1823: 
 1824: 
+1825: cdef void_int _dataframe_serialize_cell_column_i64__i64_arrow(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__i64_arrow(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  int __pyx_v_valid;
  int64_t *__pyx_v_access;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_i64__i64_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1826:         line_sender_buffer* ls_buf,
 1827:         qdb_pystr_buf* b,
 1828:         col_t* col,
 1829:         PyThreadState** gs) except -1:
+1830:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1831:     cdef bint valid = _dataframe_arrow_is_valid(&col.cursor)
  __pyx_v_valid = __pyx_f_7questdb_7ingress__dataframe_arrow_is_valid((&__pyx_v_col->cursor));
 1832:     cdef int64_t* access
+1833:     if valid:
  if (__pyx_v_valid) {
/* … */
  }
+1834:         access = <int64_t*>col.cursor.chunk.buffers[1]
    __pyx_v_access = ((int64_t *)(__pyx_v_col->cursor.chunk->buffers[1]));
+1835:         if not line_sender_buffer_column_i64(
    __pyx_t_1 = (!line_sender_buffer_column_i64(__pyx_v_ls_buf, __pyx_v_col->name, (__pyx_v_access[__pyx_v_col->cursor.offset]), (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
 1836:                 ls_buf,
 1837:                 col.name,
 1838:                 access[col.cursor.offset],
 1839:                 &err):
+1840:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1840, __pyx_L1_error)
+1841:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1841, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1841, __pyx_L1_error)
 1842: 
 1843: 
+1844: cdef void_int _dataframe_serialize_cell_column_f64__float_pyobj(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_f64__float_pyobj(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col) {
  struct line_sender_error *__pyx_v_err;
  PyObject **__pyx_v_access;
  PyObject *__pyx_v_cell;
  double __pyx_v_value;
  __pyx_t_7questdb_7ingress_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.ingress._dataframe_serialize_cell_column_f64__float_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1845:         line_sender_buffer* ls_buf,
 1846:         qdb_pystr_buf* b,
 1847:         col_t* col) except -1:
+1848:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1849:     cdef PyObject** access = <PyObject**>col.cursor.chunk.buffers[1]
  __pyx_v_access = ((PyObject **)(__pyx_v_col->cursor.chunk->buffers[1]));
+1850:     cdef PyObject* cell = access[col.cursor.offset]
  __pyx_v_cell = (__pyx_v_access[__pyx_v_col->cursor.offset]);
 1851:     cdef double value
+1852:     if PyFloat_CheckExact(cell):
  __pyx_t_1 = PyFloat_CheckExact(__pyx_v_cell);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+1853:         value = PyFloat_AS_DOUBLE(cell)
    __pyx_v_value = PyFloat_AS_DOUBLE(__pyx_v_cell);
+1854:         if not line_sender_buffer_column_f64(ls_buf, col.name, value, &err):
    __pyx_t_1 = (!line_sender_buffer_column_f64(__pyx_v_ls_buf, __pyx_v_col->name, __pyx_v_value, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1855:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 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(1, 1855, __pyx_L1_error)
+1856:     elif _dataframe_is_null_pyobj(cell):
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_is_null_pyobj(__pyx_v_cell);
  if (likely(__pyx_t_1)) {
    goto __pyx_L3;
  }
 1857:         pass
 1858:     else:
+1859:         raise ValueError(
  /*else*/ {
/* … */
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1859, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(1, 1859, __pyx_L1_error)
  }
  __pyx_L3:;
+1860:             'Expected an object of type float, got an object of type ' +
    __pyx_t_3 = __Pyx_PyUnicode_ConcatSafe(__pyx_kp_u_Expected_an_object_of_type_float, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1860, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1861:             _fqn(type(<object>cell)) + '.')
    __pyx_t_2 = __pyx_f_7questdb_7ingress__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1861, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
/* … */
    __pyx_t_2 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_3, __pyx_kp_u__5); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1861, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 1862: 
 1863: 
+1864: cdef void_int _dataframe_serialize_cell_column_f64__f32_numpy(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_f64__f32_numpy(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  float *__pyx_v_access;
  float __pyx_v_cell;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_f64__f32_numpy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1865:         line_sender_buffer* ls_buf,
 1866:         qdb_pystr_buf* b,
 1867:         col_t* col,
 1868:         PyThreadState** gs) except -1:
+1869:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 1870:     # Note: This is the C `float` type, not the Python `float` type.
+1871:     cdef float* access = <float*>col.cursor.chunk.buffers[1]
  __pyx_v_access = ((float *)(__pyx_v_col->cursor.chunk->buffers[1]));
+1872:     cdef float cell = access[col.cursor.offset]
  __pyx_v_cell = (__pyx_v_access[__pyx_v_col->cursor.offset]);
+1873:     if not line_sender_buffer_column_f64(ls_buf, col.name, <double>cell, &err):
  __pyx_t_1 = (!line_sender_buffer_column_f64(__pyx_v_ls_buf, __pyx_v_col->name, ((double)__pyx_v_cell), (&__pyx_v_err)));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1874:         _ensure_has_gil(gs)
    __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1874, __pyx_L1_error)
+1875:         raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 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(1, 1875, __pyx_L1_error)
 1876: 
 1877: 
+1878: cdef void_int _dataframe_serialize_cell_column_f64__f64_numpy(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_f64__f64_numpy(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  double *__pyx_v_access;
  double __pyx_v_cell;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_f64__f64_numpy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1879:         line_sender_buffer* ls_buf,
 1880:         qdb_pystr_buf* b,
 1881:         col_t* col,
 1882:         PyThreadState** gs) except -1:
+1883:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1884:     cdef double* access = <double*>col.cursor.chunk.buffers[1]
  __pyx_v_access = ((double *)(__pyx_v_col->cursor.chunk->buffers[1]));
+1885:     cdef double cell = access[col.cursor.offset]
  __pyx_v_cell = (__pyx_v_access[__pyx_v_col->cursor.offset]);
+1886:     if not line_sender_buffer_column_f64(ls_buf, col.name, cell, &err):
  __pyx_t_1 = (!line_sender_buffer_column_f64(__pyx_v_ls_buf, __pyx_v_col->name, __pyx_v_cell, (&__pyx_v_err)));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1887:         _ensure_has_gil(gs)
    __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1887, __pyx_L1_error)
+1888:         raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1888, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 1888, __pyx_L1_error)
 1889: 
 1890: 
+1891: cdef void_int _dataframe_serialize_cell_column_f64__f32_arrow(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_f64__f32_arrow(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  int __pyx_v_valid;
  float *__pyx_v_access;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_f64__f32_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1892:         line_sender_buffer* ls_buf,
 1893:         qdb_pystr_buf* b,
 1894:         col_t* col,
 1895:         PyThreadState** gs) except -1:
+1896:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1897:     cdef bint valid = _dataframe_arrow_is_valid(&col.cursor)
  __pyx_v_valid = __pyx_f_7questdb_7ingress__dataframe_arrow_is_valid((&__pyx_v_col->cursor));
 1898:     cdef float* access
+1899:     if valid:
  if (__pyx_v_valid) {
/* … */
  }
+1900:         access = <float*>col.cursor.chunk.buffers[1]
    __pyx_v_access = ((float *)(__pyx_v_col->cursor.chunk->buffers[1]));
+1901:         if not line_sender_buffer_column_f64(
    __pyx_t_1 = (!line_sender_buffer_column_f64(__pyx_v_ls_buf, __pyx_v_col->name, ((double)(__pyx_v_access[__pyx_v_col->cursor.offset])), (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
 1902:                 ls_buf,
 1903:                 col.name,
 1904:                 <double>access[col.cursor.offset],
 1905:                 &err):
+1906:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1906, __pyx_L1_error)
+1907:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1907, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1907, __pyx_L1_error)
 1908: 
 1909: 
+1910: cdef void_int _dataframe_serialize_cell_column_f64__f64_arrow(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_f64__f64_arrow(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  int __pyx_v_valid;
  double *__pyx_v_access;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_f64__f64_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1911:         line_sender_buffer* ls_buf,
 1912:         qdb_pystr_buf* b,
 1913:         col_t* col,
 1914:         PyThreadState** gs) except -1:
+1915:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1916:     cdef bint valid = _dataframe_arrow_is_valid(&col.cursor)
  __pyx_v_valid = __pyx_f_7questdb_7ingress__dataframe_arrow_is_valid((&__pyx_v_col->cursor));
 1917:     cdef double* access
+1918:     if valid:
  if (__pyx_v_valid) {
/* … */
  }
+1919:         access = <double*>col.cursor.chunk.buffers[1]
    __pyx_v_access = ((double *)(__pyx_v_col->cursor.chunk->buffers[1]));
+1920:         if not line_sender_buffer_column_f64(
    __pyx_t_1 = (!line_sender_buffer_column_f64(__pyx_v_ls_buf, __pyx_v_col->name, (__pyx_v_access[__pyx_v_col->cursor.offset]), (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
 1921:                 ls_buf,
 1922:                 col.name,
 1923:                 access[col.cursor.offset],
 1924:                 &err):
+1925:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1925, __pyx_L1_error)
+1926:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1926, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1926, __pyx_L1_error)
 1927: 
 1928: 
+1929: cdef void_int _dataframe_serialize_cell_column_str__str_pyobj(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_str__str_pyobj(struct line_sender_buffer *__pyx_v_ls_buf, struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col) {
  struct line_sender_error *__pyx_v_err;
  int __pyx_v_valid;
  struct line_sender_utf8 __pyx_v_utf8;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_str__str_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1930:         line_sender_buffer* ls_buf,
 1931:         qdb_pystr_buf* b,
 1932:         col_t* col) except -1:
+1933:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+1934:     cdef bint valid = False
  __pyx_v_valid = 0;
 1935:     cdef line_sender_utf8 utf8
+1936:     _dataframe_cell_str_pyobj_to_utf8(b, &col.cursor,  &valid, &utf8)
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_cell_str_pyobj_to_utf8(__pyx_v_b, (&__pyx_v_col->cursor), (&__pyx_v_valid), (&__pyx_v_utf8)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 1936, __pyx_L1_error)
+1937:     if valid and not line_sender_buffer_column_str(
  if (__pyx_v_valid) {
  } else {
    __pyx_t_2 = __pyx_v_valid;
    goto __pyx_L4_bool_binop_done;
  }
/* … */
  __pyx_t_3 = (!line_sender_buffer_column_str(__pyx_v_ls_buf, __pyx_v_col->name, __pyx_v_utf8, (&__pyx_v_err)));
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
/* … */
  if (unlikely(__pyx_t_2)) {
/* … */
  }
 1938:             ls_buf, col.name, utf8, &err):
+1939:         raise c_err_to_py(err)
    __pyx_t_4 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1939, __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(1, 1939, __pyx_L1_error)
 1940: 
 1941: 
+1942: cdef void_int _dataframe_serialize_cell_column_str__str_utf8_arrow(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_str__str_utf8_arrow(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_utf8 __pyx_v_utf8;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_str__str_utf8_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1943:         line_sender_buffer* ls_buf,
 1944:         qdb_pystr_buf* b,
 1945:         col_t* col,
 1946:         PyThreadState** gs) except -1:
+1947:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 1948:     cdef line_sender_utf8 utf8
+1949:     if _dataframe_arrow_str_utf8(&col.cursor, &utf8.len, &utf8.buf):
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_arrow_str_utf8((&__pyx_v_col->cursor), (&__pyx_v_utf8.len), (&__pyx_v_utf8.buf));
  if (__pyx_t_1) {
/* … */
  }
+1950:         if not line_sender_buffer_column_str(ls_buf, col.name, utf8, &err):
    __pyx_t_1 = (!line_sender_buffer_column_str(__pyx_v_ls_buf, __pyx_v_col->name, __pyx_v_utf8, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1951:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1951, __pyx_L1_error)
+1952:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1952, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1952, __pyx_L1_error)
 1953: 
+1954: cdef void_int _dataframe_serialize_cell_column_str__str_lrg_utf8_arrow(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_str__str_lrg_utf8_arrow(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_utf8 __pyx_v_utf8;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_str__str_lrg_utf8_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1955:         line_sender_buffer* ls_buf,
 1956:         qdb_pystr_buf* b,
 1957:         col_t* col,
 1958:         PyThreadState** gs) except -1:
+1959:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 1960:     cdef line_sender_utf8 utf8
+1961:     if _dataframe_arrow_str_utf8_lrg(&col.cursor, &utf8.len, &utf8.buf):
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_arrow_str_utf8_lrg((&__pyx_v_col->cursor), (&__pyx_v_utf8.len), (&__pyx_v_utf8.buf));
  if (__pyx_t_1) {
/* … */
  }
+1962:         if not line_sender_buffer_column_str(ls_buf, col.name, utf8, &err):
    __pyx_t_1 = (!line_sender_buffer_column_str(__pyx_v_ls_buf, __pyx_v_col->name, __pyx_v_utf8, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1963:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1963, __pyx_L1_error)
+1964:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1964, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1964, __pyx_L1_error)
 1965: 
 1966: 
+1967: cdef void_int _dataframe_serialize_cell_column_str__str_i8_cat(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_str__str_i8_cat(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_utf8 __pyx_v_utf8;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_str__str_i8_cat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1968:         line_sender_buffer* ls_buf,
 1969:         qdb_pystr_buf* b,
 1970:         col_t* col,
 1971:         PyThreadState** gs) except -1:
+1972:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 1973:     cdef line_sender_utf8 utf8
+1974:     if _dataframe_arrow_get_cat_i8(&col.cursor, &utf8.len, &utf8.buf):
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_arrow_get_cat_i8((&__pyx_v_col->cursor), (&__pyx_v_utf8.len), (&__pyx_v_utf8.buf));
  if (__pyx_t_1) {
/* … */
  }
+1975:         if not line_sender_buffer_column_str(ls_buf, col.name, utf8, &err):
    __pyx_t_1 = (!line_sender_buffer_column_str(__pyx_v_ls_buf, __pyx_v_col->name, __pyx_v_utf8, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1976:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1976, __pyx_L1_error)
+1977:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1977, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1977, __pyx_L1_error)
 1978: 
 1979: 
+1980: cdef void_int _dataframe_serialize_cell_column_str__str_i16_cat(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_str__str_i16_cat(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_utf8 __pyx_v_utf8;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_str__str_i16_cat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1981:         line_sender_buffer* ls_buf,
 1982:         qdb_pystr_buf* b,
 1983:         col_t* col,
 1984:         PyThreadState** gs) except -1:
+1985:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 1986:     cdef line_sender_utf8 utf8
+1987:     if _dataframe_arrow_get_cat_i16(&col.cursor, &utf8.len, &utf8.buf):
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_arrow_get_cat_i16((&__pyx_v_col->cursor), (&__pyx_v_utf8.len), (&__pyx_v_utf8.buf));
  if (__pyx_t_1) {
/* … */
  }
+1988:         if not line_sender_buffer_column_str(ls_buf, col.name, utf8, &err):
    __pyx_t_1 = (!line_sender_buffer_column_str(__pyx_v_ls_buf, __pyx_v_col->name, __pyx_v_utf8, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1989:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1989, __pyx_L1_error)
+1990:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1990, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 1990, __pyx_L1_error)
 1991: 
 1992: 
+1993: cdef void_int _dataframe_serialize_cell_column_str__str_i32_cat(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_str__str_i32_cat(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_utf8 __pyx_v_utf8;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_str__str_i32_cat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1994:         line_sender_buffer* ls_buf,
 1995:         qdb_pystr_buf* b,
 1996:         col_t* col,
 1997:         PyThreadState** gs) except -1:
+1998:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 1999:     cdef line_sender_utf8 utf8
+2000:     if _dataframe_arrow_get_cat_i32(&col.cursor, &utf8.len, &utf8.buf):
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_arrow_get_cat_i32((&__pyx_v_col->cursor), (&__pyx_v_utf8.len), (&__pyx_v_utf8.buf));
  if (__pyx_t_1) {
/* … */
  }
+2001:         if not line_sender_buffer_column_str(ls_buf, col.name, utf8, &err):
    __pyx_t_1 = (!line_sender_buffer_column_str(__pyx_v_ls_buf, __pyx_v_col->name, __pyx_v_utf8, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+2002:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2002, __pyx_L1_error)
+2003:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2003, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 2003, __pyx_L1_error)
 2004: 
 2005: 
+2006: cdef void_int _dataframe_serialize_cell_column_ts__dt64ns_numpy(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_ts__dt64ns_numpy(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  int64_t *__pyx_v_access;
  int64_t __pyx_v_cell;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_ts__dt64ns_numpy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2007:         line_sender_buffer* ls_buf,
 2008:         qdb_pystr_buf* b,
 2009:         col_t* col,
 2010:         PyThreadState** gs) except -1:
+2011:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+2012:     cdef int64_t* access = <int64_t*>col.cursor.chunk.buffers[1]
  __pyx_v_access = ((int64_t *)(__pyx_v_col->cursor.chunk->buffers[1]));
+2013:     cdef int64_t cell = access[col.cursor.offset]
  __pyx_v_cell = (__pyx_v_access[__pyx_v_col->cursor.offset]);
+2014:     if cell != _NAT:
  __pyx_t_1 = (__pyx_v_cell != __pyx_v_7questdb_7ingress__NAT);
  if (__pyx_t_1) {
/* … */
  }
+2015:         if not line_sender_buffer_column_ts_nanos(ls_buf, col.name, cell, &err):
    __pyx_t_1 = (!line_sender_buffer_column_ts_nanos(__pyx_v_ls_buf, __pyx_v_col->name, __pyx_v_cell, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+2016:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2016, __pyx_L1_error)
+2017:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2017, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 2017, __pyx_L1_error)
 2018: 
 2019: 
+2020: cdef void_int _dataframe_serialize_cell_column_ts__dt64ns_tz_arrow(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_ts__dt64ns_tz_arrow(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  int __pyx_v_valid;
  int64_t __pyx_v_cell;
  int64_t *__pyx_v_access;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_column_ts__dt64ns_tz_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2021:         line_sender_buffer* ls_buf,
 2022:         qdb_pystr_buf* b,
 2023:         col_t* col,
 2024:         PyThreadState** gs) except -1:
+2025:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+2026:     cdef bint valid = _dataframe_arrow_is_valid(&col.cursor)
  __pyx_v_valid = __pyx_f_7questdb_7ingress__dataframe_arrow_is_valid((&__pyx_v_col->cursor));
 2027:     cdef int64_t cell
 2028:     cdef int64_t* access
+2029:     if valid:
  if (__pyx_v_valid) {
/* … */
  }
+2030:         access = <int64_t*>col.cursor.chunk.buffers[1]
    __pyx_v_access = ((int64_t *)(__pyx_v_col->cursor.chunk->buffers[1]));
+2031:         cell = access[col.cursor.offset]
    __pyx_v_cell = (__pyx_v_access[__pyx_v_col->cursor.offset]);
+2032:         if not line_sender_buffer_column_ts_nanos(ls_buf, col.name, cell, &err):
    __pyx_t_1 = (!line_sender_buffer_column_ts_nanos(__pyx_v_ls_buf, __pyx_v_col->name, __pyx_v_cell, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+2033:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2033, __pyx_L1_error)
+2034:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2034, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 2034, __pyx_L1_error)
 2035: 
 2036: 
+2037: cdef void_int _dataframe_serialize_cell_at_dt64ns_numpy(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_at_dt64ns_numpy(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  int64_t *__pyx_v_access;
  int64_t __pyx_v_cell;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_at_dt64ns_numpy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2038:         line_sender_buffer* ls_buf,
 2039:         qdb_pystr_buf* b,
 2040:         col_t* col,
 2041:         PyThreadState** gs) except -1:
+2042:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+2043:     cdef int64_t* access = <int64_t*>col.cursor.chunk.buffers[1]
  __pyx_v_access = ((int64_t *)(__pyx_v_col->cursor.chunk->buffers[1]));
+2044:     cdef int64_t cell = access[col.cursor.offset]
  __pyx_v_cell = (__pyx_v_access[__pyx_v_col->cursor.offset]);
+2045:     if cell == _NAT:
  __pyx_t_1 = (__pyx_v_cell == __pyx_v_7questdb_7ingress__NAT);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+2046:         if not line_sender_buffer_at_now(ls_buf, &err):
    __pyx_t_1 = (!line_sender_buffer_at_now(__pyx_v_ls_buf, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+2047:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2047, __pyx_L1_error)
+2048:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2048, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 2048, __pyx_L1_error)
 2049:     else:
 2050:         # Note: ls_buf will validate against negative numbers.
+2051:         if not line_sender_buffer_at_nanos(ls_buf, cell, &err):
  /*else*/ {
    __pyx_t_1 = (!line_sender_buffer_at_nanos(__pyx_v_ls_buf, __pyx_v_cell, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
  }
  __pyx_L3:;
+2052:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2052, __pyx_L1_error)
+2053:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2053, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 2053, __pyx_L1_error)
 2054: 
 2055: 
+2056: cdef void_int _dataframe_serialize_cell_at_dt64ns_tz_arrow(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell_at_dt64ns_tz_arrow(struct line_sender_buffer *__pyx_v_ls_buf, CYTHON_UNUSED struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_err;
  int __pyx_v_valid;
  int64_t *__pyx_v_access;
  int64_t __pyx_v_cell;
  __pyx_t_7questdb_7ingress_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb.ingress._dataframe_serialize_cell_at_dt64ns_tz_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2057:         line_sender_buffer* ls_buf,
 2058:         qdb_pystr_buf* b,
 2059:         col_t* col,
 2060:         PyThreadState** gs) except -1:
+2061:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+2062:     cdef bint valid = _dataframe_arrow_is_valid(&col.cursor)
  __pyx_v_valid = __pyx_f_7questdb_7ingress__dataframe_arrow_is_valid((&__pyx_v_col->cursor));
 2063:     cdef int64_t* access
 2064:     cdef int64_t cell
+2065:     if valid:
  if (__pyx_v_valid) {
/* … */
    goto __pyx_L3;
  }
+2066:         access = <int64_t*>col.cursor.chunk.buffers[1]
    __pyx_v_access = ((int64_t *)(__pyx_v_col->cursor.chunk->buffers[1]));
+2067:         cell = access[col.cursor.offset]
    __pyx_v_cell = (__pyx_v_access[__pyx_v_col->cursor.offset]);
 2068:         # Note: ls_buf will validate against negative numbers.
+2069:         if not line_sender_buffer_at_nanos(ls_buf, cell, &err):
    __pyx_t_1 = (!line_sender_buffer_at_nanos(__pyx_v_ls_buf, __pyx_v_cell, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+2070:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2070, __pyx_L1_error)
+2071:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2071, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 2071, __pyx_L1_error)
 2072:     else:
+2073:         if not line_sender_buffer_at_now(ls_buf, &err):
  /*else*/ {
    __pyx_t_1 = (!line_sender_buffer_at_now(__pyx_v_ls_buf, (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
  }
  __pyx_L3:;
+2074:             _ensure_has_gil(gs)
      __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2074, __pyx_L1_error)
+2075:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2075, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 2075, __pyx_L1_error)
 2076: 
 2077: 
+2078: cdef void_int _dataframe_serialize_cell(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_serialize_cell(struct line_sender_buffer *__pyx_v_ls_buf, struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col, PyThreadState **__pyx_v_gs) {
  enum __pyx_t_7questdb_7ingress_col_dispatch_code_t __pyx_v_dc;
  __pyx_t_7questdb_7ingress_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_AddTraceback("questdb.ingress._dataframe_serialize_cell", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2079:         line_sender_buffer* ls_buf,
 2080:         qdb_pystr_buf* b,
 2081:         col_t* col,
 2082:         PyThreadState** gs) except -1:
+2083:     cdef col_dispatch_code_t dc = col.dispatch_code
  __pyx_t_1 = __pyx_v_col->dispatch_code;
  __pyx_v_dc = __pyx_t_1;
 2084:     # Note!: Code below will generate a `switch` statement.
 2085:     # Ensure this happens! Don't break the `dc == ...` pattern.
+2086:     if dc == col_dispatch_code_t.col_dispatch_code_skip_nulls:
  switch (__pyx_v_dc) {
    case __pyx_e_7questdb_7ingress_col_dispatch_code_skip_nulls:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_table__str_pyobj:
 2087:         pass  # We skip a null column. Nothing to do.
+2088:     elif dc == col_dispatch_code_t.col_dispatch_code_table__str_pyobj:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_table__str_utf8_arrow:
+2089:         _dataframe_serialize_cell_table__str_pyobj(ls_buf, b, col)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_table__str_pyobj(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2089, __pyx_L1_error)
+2090:     elif dc == col_dispatch_code_t.col_dispatch_code_table__str_utf8_arrow:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_table__str_lrg_utf8_arrow:
+2091:         _dataframe_serialize_cell_table__str_utf8_arrow(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_table__str_utf8_arrow(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2091, __pyx_L1_error)
+2092:     elif dc == col_dispatch_code_t.col_dispatch_code_table__str_lrg_utf8_arrow:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_table__str_i8_cat:
+2093:         _dataframe_serialize_cell_table__str_lrg_utf8_arrow(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_table__str_lrg_utf8_arrow(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2093, __pyx_L1_error)
+2094:     elif dc == col_dispatch_code_t.col_dispatch_code_table__str_i8_cat:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_table__str_i16_cat:
+2095:         _dataframe_serialize_cell_table__str_i8_cat(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_table__str_i8_cat(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2095, __pyx_L1_error)
+2096:     elif dc == col_dispatch_code_t.col_dispatch_code_table__str_i16_cat:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_table__str_i32_cat:
+2097:         _dataframe_serialize_cell_table__str_i16_cat(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_table__str_i16_cat(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2097, __pyx_L1_error)
+2098:     elif dc == col_dispatch_code_t.col_dispatch_code_table__str_i32_cat:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_symbol__str_pyobj:
+2099:         _dataframe_serialize_cell_table__str_i32_cat(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_table__str_i32_cat(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2099, __pyx_L1_error)
+2100:     elif dc == col_dispatch_code_t.col_dispatch_code_symbol__str_pyobj:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_symbol__str_utf8_arrow:
+2101:         _dataframe_serialize_cell_symbol__str_pyobj(ls_buf, b, col)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_symbol__str_pyobj(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2101, __pyx_L1_error)
+2102:     elif dc == col_dispatch_code_t.col_dispatch_code_symbol__str_utf8_arrow:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_symbol__str_lrg_utf8_arrow:
+2103:         _dataframe_serialize_cell_symbol__str_utf8_arrow(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_symbol__str_utf8_arrow(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2103, __pyx_L1_error)
+2104:     elif dc == col_dispatch_code_t.col_dispatch_code_symbol__str_lrg_utf8_arrow:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_symbol__str_i8_cat:
+2105:         _dataframe_serialize_cell_symbol__str_lrg_utf8_arrow(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_symbol__str_lrg_utf8_arrow(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2105, __pyx_L1_error)
+2106:     elif dc == col_dispatch_code_t.col_dispatch_code_symbol__str_i8_cat:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_symbol__str_i16_cat:
+2107:         _dataframe_serialize_cell_symbol__str_i8_cat(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_symbol__str_i8_cat(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2107, __pyx_L1_error)
+2108:     elif dc == col_dispatch_code_t.col_dispatch_code_symbol__str_i16_cat:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_symbol__str_i32_cat:
+2109:         _dataframe_serialize_cell_symbol__str_i16_cat(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_symbol__str_i16_cat(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2109, __pyx_L1_error)
+2110:     elif dc == col_dispatch_code_t.col_dispatch_code_symbol__str_i32_cat:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_bool__bool_pyobj:
+2111:         _dataframe_serialize_cell_symbol__str_i32_cat(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_symbol__str_i32_cat(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2111, __pyx_L1_error)
+2112:     elif dc == col_dispatch_code_t.col_dispatch_code_column_bool__bool_pyobj:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_bool__bool_numpy:
+2113:         _dataframe_serialize_cell_column_bool__bool_pyobj(ls_buf, b, col)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_bool__bool_pyobj(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2113, __pyx_L1_error)
+2114:     elif dc == col_dispatch_code_t.col_dispatch_code_column_bool__bool_numpy:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_bool__bool_arrow:
+2115:         _dataframe_serialize_cell_column_bool__bool_numpy(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_bool__bool_numpy(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2115, __pyx_L1_error)
+2116:     elif dc == col_dispatch_code_t.col_dispatch_code_column_bool__bool_arrow:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__int_pyobj:
+2117:         _dataframe_serialize_cell_column_bool__bool_arrow(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_bool__bool_arrow(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2117, __pyx_L1_error)
+2118:     elif dc == col_dispatch_code_t.col_dispatch_code_column_i64__int_pyobj:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__u8_numpy:
+2119:         _dataframe_serialize_cell_column_i64__int_pyobj(ls_buf, b, col)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__int_pyobj(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2119, __pyx_L1_error)
+2120:     elif dc == col_dispatch_code_t.col_dispatch_code_column_i64__u8_numpy:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__i8_numpy:
+2121:         _dataframe_serialize_cell_column_i64__u8_numpy(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__u8_numpy(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2121, __pyx_L1_error)
+2122:     elif dc == col_dispatch_code_t.col_dispatch_code_column_i64__i8_numpy:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__u16_numpy:
+2123:         _dataframe_serialize_cell_column_i64__i8_numpy(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__i8_numpy(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2123, __pyx_L1_error)
+2124:     elif dc == col_dispatch_code_t.col_dispatch_code_column_i64__u16_numpy:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__i16_numpy:
+2125:         _dataframe_serialize_cell_column_i64__u16_numpy(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__u16_numpy(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2125, __pyx_L1_error)
+2126:     elif dc == col_dispatch_code_t.col_dispatch_code_column_i64__i16_numpy:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__u32_numpy:
+2127:         _dataframe_serialize_cell_column_i64__i16_numpy(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__i16_numpy(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2127, __pyx_L1_error)
+2128:     elif dc == col_dispatch_code_t.col_dispatch_code_column_i64__u32_numpy:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__i32_numpy:
+2129:         _dataframe_serialize_cell_column_i64__u32_numpy(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__u32_numpy(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2129, __pyx_L1_error)
+2130:     elif dc == col_dispatch_code_t.col_dispatch_code_column_i64__i32_numpy:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__u64_numpy:
+2131:         _dataframe_serialize_cell_column_i64__i32_numpy(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__i32_numpy(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2131, __pyx_L1_error)
+2132:     elif dc == col_dispatch_code_t.col_dispatch_code_column_i64__u64_numpy:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__i64_numpy:
+2133:         _dataframe_serialize_cell_column_i64__u64_numpy(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__u64_numpy(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2133, __pyx_L1_error)
+2134:     elif dc == col_dispatch_code_t.col_dispatch_code_column_i64__i64_numpy:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__u8_arrow:
+2135:         _dataframe_serialize_cell_column_i64__i64_numpy(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__i64_numpy(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2135, __pyx_L1_error)
+2136:     elif dc == col_dispatch_code_t.col_dispatch_code_column_i64__u8_arrow:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__i8_arrow:
+2137:         _dataframe_serialize_cell_column_i64__u8_arrow(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__u8_arrow(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2137, __pyx_L1_error)
+2138:     elif dc == col_dispatch_code_t.col_dispatch_code_column_i64__i8_arrow:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__u16_arrow:
+2139:         _dataframe_serialize_cell_column_i64__i8_arrow(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__i8_arrow(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2139, __pyx_L1_error)
+2140:     elif dc == col_dispatch_code_t.col_dispatch_code_column_i64__u16_arrow:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__i16_arrow:
+2141:         _dataframe_serialize_cell_column_i64__u16_arrow(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__u16_arrow(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2141, __pyx_L1_error)
+2142:     elif dc == col_dispatch_code_t.col_dispatch_code_column_i64__i16_arrow:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__u32_arrow:
+2143:         _dataframe_serialize_cell_column_i64__i16_arrow(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__i16_arrow(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2143, __pyx_L1_error)
+2144:     elif dc == col_dispatch_code_t.col_dispatch_code_column_i64__u32_arrow:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__i32_arrow:
+2145:         _dataframe_serialize_cell_column_i64__u32_arrow(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__u32_arrow(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2145, __pyx_L1_error)
+2146:     elif dc == col_dispatch_code_t.col_dispatch_code_column_i64__i32_arrow:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__u64_arrow:
+2147:         _dataframe_serialize_cell_column_i64__i32_arrow(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__i32_arrow(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2147, __pyx_L1_error)
+2148:     elif dc == col_dispatch_code_t.col_dispatch_code_column_i64__u64_arrow:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_i64__i64_arrow:
+2149:         _dataframe_serialize_cell_column_i64__u64_arrow(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__u64_arrow(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2149, __pyx_L1_error)
+2150:     elif dc == col_dispatch_code_t.col_dispatch_code_column_i64__i64_arrow:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_f64__float_pyobj:
+2151:         _dataframe_serialize_cell_column_i64__i64_arrow(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_i64__i64_arrow(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2151, __pyx_L1_error)
+2152:     elif dc == col_dispatch_code_t.col_dispatch_code_column_f64__float_pyobj:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_f64__f32_numpy:
+2153:         _dataframe_serialize_cell_column_f64__float_pyobj(ls_buf, b, col)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_f64__float_pyobj(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2153, __pyx_L1_error)
+2154:     elif dc == col_dispatch_code_t.col_dispatch_code_column_f64__f32_numpy:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_f64__f64_numpy:
+2155:         _dataframe_serialize_cell_column_f64__f32_numpy(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_f64__f32_numpy(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2155, __pyx_L1_error)
+2156:     elif dc == col_dispatch_code_t.col_dispatch_code_column_f64__f64_numpy:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_f64__f32_arrow:
+2157:         _dataframe_serialize_cell_column_f64__f64_numpy(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_f64__f64_numpy(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2157, __pyx_L1_error)
+2158:     elif dc == col_dispatch_code_t.col_dispatch_code_column_f64__f32_arrow:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_f64__f64_arrow:
+2159:         _dataframe_serialize_cell_column_f64__f32_arrow(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_f64__f32_arrow(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2159, __pyx_L1_error)
+2160:     elif dc == col_dispatch_code_t.col_dispatch_code_column_f64__f64_arrow:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_str__str_pyobj:
+2161:         _dataframe_serialize_cell_column_f64__f64_arrow(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_f64__f64_arrow(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2161, __pyx_L1_error)
+2162:     elif dc == col_dispatch_code_t.col_dispatch_code_column_str__str_pyobj:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_str__str_utf8_arrow:
+2163:         _dataframe_serialize_cell_column_str__str_pyobj(ls_buf, b, col)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_str__str_pyobj(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2163, __pyx_L1_error)
+2164:     elif dc == col_dispatch_code_t.col_dispatch_code_column_str__str_utf8_arrow:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_str__str_lrg_utf8_arrow:
+2165:         _dataframe_serialize_cell_column_str__str_utf8_arrow(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_str__str_utf8_arrow(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2165, __pyx_L1_error)
+2166:     elif dc == col_dispatch_code_t.col_dispatch_code_column_str__str_lrg_utf8_arrow:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_str__str_i8_cat:
+2167:         _dataframe_serialize_cell_column_str__str_lrg_utf8_arrow(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_str__str_lrg_utf8_arrow(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2167, __pyx_L1_error)
+2168:     elif dc == col_dispatch_code_t.col_dispatch_code_column_str__str_i8_cat:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_str__str_i16_cat:
+2169:         _dataframe_serialize_cell_column_str__str_i8_cat(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_str__str_i8_cat(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2169, __pyx_L1_error)
+2170:     elif dc == col_dispatch_code_t.col_dispatch_code_column_str__str_i16_cat:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_str__str_i32_cat:
+2171:         _dataframe_serialize_cell_column_str__str_i16_cat(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_str__str_i16_cat(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2171, __pyx_L1_error)
+2172:     elif dc == col_dispatch_code_t.col_dispatch_code_column_str__str_i32_cat:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_ts__dt64ns_numpy:
+2173:         _dataframe_serialize_cell_column_str__str_i32_cat(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_str__str_i32_cat(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2173, __pyx_L1_error)
+2174:     elif dc == col_dispatch_code_t.col_dispatch_code_column_ts__dt64ns_numpy:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_column_ts__dt64ns_tz_arrow:
+2175:         _dataframe_serialize_cell_column_ts__dt64ns_numpy(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_ts__dt64ns_numpy(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2175, __pyx_L1_error)
+2176:     elif dc == col_dispatch_code_t.col_dispatch_code_column_ts__dt64ns_tz_arrow:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_at__dt64ns_numpy:
+2177:         _dataframe_serialize_cell_column_ts__dt64ns_tz_arrow(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_column_ts__dt64ns_tz_arrow(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2177, __pyx_L1_error)
+2178:     elif dc == col_dispatch_code_t.col_dispatch_code_at__dt64ns_numpy:
    break;
    case __pyx_e_7questdb_7ingress_col_dispatch_code_at__dt64ns_tz_arrow:
+2179:         _dataframe_serialize_cell_at_dt64ns_numpy(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_at_dt64ns_numpy(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2179, __pyx_L1_error)
+2180:     elif dc == col_dispatch_code_t.col_dispatch_code_at__dt64ns_tz_arrow:
    break;
    default:
+2181:         _dataframe_serialize_cell_at_dt64ns_tz_arrow(ls_buf, b, col, gs)
    __pyx_t_2 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell_at_dt64ns_tz_arrow(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, __pyx_v_gs); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2181, __pyx_L1_error)
 2182:     else:
+2183:         _ensure_has_gil(gs)
    __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2183, __pyx_L1_error)
+2184:         raise RuntimeError(f"Unknown column dispatch code: {dc}")
    __pyx_t_3 = __Pyx_PyUnicode_From_enum____pyx_t_7questdb_7ingress_col_dispatch_code_t(__pyx_v_dc, 0, ' ', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2184, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Unknown_column_dispatch_code, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2184, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_RuntimeError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2184, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(1, 2184, __pyx_L1_error)
    break;
  }
 2185:     # See earlier note about switch statement generation.
 2186:     # Don't add complex conditions above!
 2187: 
 2188: 
+2189: cdef void _dataframe_col_advance(col_t* col) noexcept nogil:
static void __pyx_f_7questdb_7ingress__dataframe_col_advance(struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col) {
  struct __pyx_t_7questdb_7ingress_col_cursor_t *__pyx_v_cursor;
  size_t __pyx_v_new_chunk;
/* … */
  /* function exit code */
}
 2190:     # Branchless version of:
 2191:     #     cdef bint new_chunk = cursor.offset == <size_t>cursor.chunk.length
 2192:     #     if new_chunk == 0:
 2193:     #         cursor.chunk_index += 1
 2194:     #         cursor.chunk += 1  # pointer advance
 2195:     #
 2196:     #     if new_chunk:
 2197:     #         cursor.offset = cursor.chunk.offset
 2198:     #     else:
 2199:     #         cursor.offset += 1
 2200:     #
 2201:     # (Checked with Godbolt, GCC -O3 code was rather "jumpy")
+2202:     cdef col_cursor_t* cursor = &col.cursor
  __pyx_v_cursor = (&__pyx_v_col->cursor);
 2203:     cdef size_t new_chunk  # disguised bint. Either 0 or 1.
+2204:     cursor.offset += 1
  __pyx_v_cursor->offset = (__pyx_v_cursor->offset + 1);
+2205:     new_chunk = cursor.offset == <size_t>cursor.chunk.length
  __pyx_v_new_chunk = (__pyx_v_cursor->offset == ((size_t)__pyx_v_cursor->chunk->length));
+2206:     cursor.chunk_index += new_chunk
  __pyx_v_cursor->chunk_index = (__pyx_v_cursor->chunk_index + __pyx_v_new_chunk);
+2207:     cursor.chunk += new_chunk
  __pyx_v_cursor->chunk = (__pyx_v_cursor->chunk + __pyx_v_new_chunk);
 2208:     # Note: We get away with this because we've allocated one extra blank chunk.
 2209:     # This ensures that accessing `cursor.chunk.offset` doesn't segfault.
+2210:     cursor.offset = (
  __pyx_v_cursor->offset = ((__pyx_v_new_chunk * __pyx_v_cursor->chunk->offset) + ((!(__pyx_v_new_chunk != 0)) * __pyx_v_cursor->offset));
 2211:         (new_chunk * cursor.chunk.offset) +
 2212:         ((not new_chunk) * cursor.offset))
 2213: 
 2214: 
+2215: cdef void_int _dataframe_handle_auto_flush(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe_handle_auto_flush(struct __pyx_t_7questdb_7ingress_auto_flush_t const *__pyx_v_af, struct line_sender_buffer *__pyx_v_ls_buf, PyThreadState **__pyx_v_gs) {
  struct line_sender_error *__pyx_v_flush_err;
  struct line_sender_error *__pyx_v_marker_err;
  int __pyx_v_flush_ok;
  int __pyx_v_marker_ok;
  int __pyx_v_had_gil;
  __pyx_t_7questdb_7ingress_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_AddTraceback("questdb.ingress._dataframe_handle_auto_flush", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2216:             const auto_flush_t* af,
 2217:             line_sender_buffer* ls_buf,
 2218:             PyThreadState** gs) except -1:
 2219:     cdef line_sender_error* flush_err
 2220:     cdef line_sender_error* marker_err
 2221:     cdef bint flush_ok
 2222:     cdef bint marker_ok
+2223:     if (af.sender == NULL) or (not should_auto_flush(&af.mode, ls_buf, af.last_flush_ms[0])):
  __pyx_t_2 = (__pyx_v_af->sender == NULL);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = __pyx_f_7questdb_7ingress_should_auto_flush((&__pyx_v_af->mode), __pyx_v_ls_buf, (__pyx_v_af->last_flush_ms[0])); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2223, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_2);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+2224:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
 2225: 
 2226:     # Always temporarily release GIL during a flush.
+2227:     had_gil = _ensure_doesnt_have_gil(gs)
  __pyx_t_1 = __pyx_f_7questdb_7ingress__ensure_doesnt_have_gil(__pyx_v_gs); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2227, __pyx_L1_error)
  __pyx_v_had_gil = __pyx_t_1;
+2228:     flush_ok = line_sender_flush(af.sender, ls_buf, &flush_err)
  __pyx_v_flush_ok = line_sender_flush(__pyx_v_af->sender, __pyx_v_ls_buf, (&__pyx_v_flush_err));
+2229:     if flush_ok:
  if (__pyx_v_flush_ok) {
/* … */
    goto __pyx_L6;
  }
+2230:         af.last_flush_ms[0] = line_sender_now_micros() // 1000
    (__pyx_v_af->last_flush_ms[0]) = __Pyx_div_int64_t(line_sender_now_micros(), 0x3E8);
 2231:     else:
 2232:         # To avoid flush reattempt on Sender.__exit__.
+2233:         line_sender_buffer_clear(ls_buf)
  /*else*/ {
    line_sender_buffer_clear(__pyx_v_ls_buf);
  }
  __pyx_L6:;
 2234: 
 2235:     # Flushing will have cleared the marker: We need to set it again
 2236:     # We need this also on error due to our error handling logic which will
 2237:     # try to rewind the buffer on error and fail if the marker is unset.
+2238:     marker_ok = line_sender_buffer_set_marker(ls_buf, &marker_err)
  __pyx_v_marker_ok = line_sender_buffer_set_marker(__pyx_v_ls_buf, (&__pyx_v_marker_err));
 2239: 
+2240:     if had_gil or (not flush_ok) or (not marker_ok):
  if (!__pyx_v_had_gil) {
  } else {
    __pyx_t_1 = __pyx_v_had_gil;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_3 = (!__pyx_v_flush_ok);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_3 = (!__pyx_v_marker_ok);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L8_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+2241:         _ensure_has_gil(gs)
    __pyx_f_7questdb_7ingress__ensure_has_gil(__pyx_v_gs); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2241, __pyx_L1_error)
 2242: 
+2243:     if not flush_ok:
  __pyx_t_1 = (!__pyx_v_flush_ok);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2244:         raise c_err_to_py_fmt(flush_err, _FLUSH_FMT)
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_FLUSH_FMT); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2244, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_t_4))) __PYX_ERR(1, 2244, __pyx_L1_error)
    __pyx_t_5 = __pyx_f_7questdb_7ingress_c_err_to_py_fmt(__pyx_v_flush_err, ((PyObject*)__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 2244, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_Raise(__pyx_t_5, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __PYX_ERR(1, 2244, __pyx_L1_error)
 2245: 
 2246:     # The flush error takes precedence over the marker error.
+2247:     if not marker_ok:
  __pyx_t_1 = (!__pyx_v_marker_ok);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2248:         raise c_err_to_py(marker_err)
    __pyx_t_5 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_marker_err); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 2248, __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(1, 2248, __pyx_L1_error)
 2249: 
 2250: 
 2251: # Every how many cells to release and re-acquire the Python GIL.
 2252: #
 2253: # We've done some perf testing with some mixed column dtypes.
 2254: # On a modern CPU we're doing over 8 million pandas cells per second.
 2255: # By default, `sys.getswitchinterval()` is 0.005 seconds.
 2256: # To accomodate this, we'd need to release the GIL every 40,000 cells.
 2257: # This will be divided by the column count to get the row gil blip interval.
+2258: cdef size_t _CELL_GIL_BLIP_INTERVAL = 40000
  __pyx_v_7questdb_7ingress__CELL_GIL_BLIP_INTERVAL = 0x9C40;
 2259: 
 2260: 
+2261: cdef void_int _dataframe(
static __pyx_t_7questdb_7ingress_void_int __pyx_f_7questdb_7ingress__dataframe(struct __pyx_t_7questdb_7ingress_auto_flush_t __pyx_v_af, struct line_sender_buffer *__pyx_v_ls_buf, struct qdb_pystr_buf *__pyx_v_b, 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_col_count;
  struct line_sender_table_name __pyx_v_c_table_name;
  int64_t __pyx_v_at_value;
  struct __pyx_t_7questdb_7ingress_col_t_arr __pyx_v_cols;
  int __pyx_v_any_cols_need_gil;
  struct qdb_pystr_pos __pyx_v_str_buf_marker;
  size_t __pyx_v_row_count;
  struct line_sender_error *__pyx_v_err;
  size_t __pyx_v_row_index;
  size_t __pyx_v_col_index;
  struct __pyx_t_7questdb_7ingress_col_t *__pyx_v_col;
  size_t __pyx_v_row_gil_blip_interval;
  PyThreadState *__pyx_v_gs;
  int __pyx_v_was_serializing_cell;
  PyObject *__pyx_v_e = NULL;
  __pyx_t_7questdb_7ingress_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_19);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_XDECREF(__pyx_t_22);
  __Pyx_XDECREF(__pyx_t_23);
  __Pyx_XDECREF(__pyx_t_24);
  __Pyx_XDECREF(__pyx_t_26);
  __Pyx_XDECREF(__pyx_t_27);
  __Pyx_XDECREF(__pyx_t_28);
  __Pyx_XDECREF(__pyx_t_29);
  __Pyx_AddTraceback("questdb.ingress._dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2262:         auto_flush_t af,
 2263:         line_sender_buffer* ls_buf,
 2264:         qdb_pystr_buf* b,
 2265:         object df,
 2266:         object table_name,
 2267:         object table_name_col,
 2268:         object symbols,
 2269:         object at) except -1:
 2270:     cdef size_t col_count
 2271:     cdef line_sender_table_name c_table_name
+2272:     cdef int64_t at_value = _AT_IS_SET_BY_COLUMN
  __pyx_v_at_value = __pyx_v_7questdb_7ingress__AT_IS_SET_BY_COLUMN;
+2273:     cdef col_t_arr cols = col_t_arr_blank()
  __pyx_v_cols = __pyx_f_7questdb_7ingress_col_t_arr_blank();
+2274:     cdef bint any_cols_need_gil = False
  __pyx_v_any_cols_need_gil = 0;
 2275:     cdef qdb_pystr_pos str_buf_marker
 2276:     cdef size_t row_count
+2277:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 2278:     cdef size_t row_index
 2279:     cdef size_t col_index
 2280:     cdef col_t* col
 2281:     cdef size_t row_gil_blip_interval
+2282:     cdef PyThreadState* gs = NULL  # GIL state. NULL means we have the GIL.
  __pyx_v_gs = NULL;
 2283:     cdef bint had_gil
+2284:     cdef bint was_serializing_cell = False
  __pyx_v_was_serializing_cell = 0;
 2285: 
+2286:     _dataframe_may_import_deps()
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_may_import_deps(); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2287:     _dataframe_check_is_dataframe(df)
  __pyx_t_1 = __pyx_f_7questdb_7ingress__dataframe_check_is_dataframe(__pyx_v_df); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2287, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2288:     row_count = len(df)
  __pyx_t_2 = PyObject_Length(__pyx_v_df); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(1, 2288, __pyx_L1_error)
  __pyx_v_row_count = __pyx_t_2;
+2289:     col_count = len(df.columns)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_n_s_columns); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2289, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(1, 2289, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_col_count = __pyx_t_2;
+2290:     if (col_count == 0) or (row_count == 0):
  __pyx_t_4 = (__pyx_v_col_count == 0);
  if (!__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = (__pyx_v_row_count == 0);
  __pyx_t_3 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
  }
+2291:         return 0  # Nothing to do.
    __pyx_r = 0;
    goto __pyx_L0;
 2292: 
+2293:     try:
  /*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_L14_try_end;
      __pyx_L9_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
      __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
      __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
      __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
      __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
      __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
      __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
      __Pyx_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_L11_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_L7_error;
      __pyx_L14_try_end:;
    }
  }
+2294:         qdb_pystr_buf_clear(b)
        qdb_pystr_buf_clear(__pyx_v_b);
+2295:         cols = col_t_arr_new(col_count)
        __pyx_v_cols = __pyx_f_7questdb_7ingress_col_t_arr_new(__pyx_v_col_count);
+2296:         _dataframe_resolve_args(
        __pyx_t_8 = __pyx_f_7questdb_7ingress__dataframe_resolve_args(__pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_t_1, __pyx_v_b, __pyx_v_col_count, (&__pyx_v_c_table_name), (&__pyx_v_at_value), (&__pyx_v_cols), (&__pyx_v_any_cols_need_gil)); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2296, __pyx_L9_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2297:             df,
 2298:             table_name,
 2299:             table_name_col,
 2300:             symbols,
+2301:             at if not isinstance(at, _ServerTimestamp) else None,
        __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_at, __pyx_ptype_7questdb_7ingress__ServerTimestamp); 
        __pyx_t_4 = (!__pyx_t_3);
        if (__pyx_t_4) {
          __Pyx_INCREF(__pyx_v_at);
          __pyx_t_1 = __pyx_v_at;
        } else {
          __Pyx_INCREF(Py_None);
          __pyx_t_1 = Py_None;
        }
 2302:             b,
 2303:             col_count,
 2304:             &c_table_name,
 2305:             &at_value,
 2306:             &cols,
 2307:             &any_cols_need_gil)
 2308: 
 2309:         # We've used the str buffer up to a point for the headers.
 2310:         # Instead of clearing it (which would clear the headers' memory)
 2311:         # we will truncate (rewind) back to this position.
+2312:         str_buf_marker = qdb_pystr_buf_tell(b)
        __pyx_v_str_buf_marker = qdb_pystr_buf_tell(__pyx_v_b);
+2313:         line_sender_buffer_clear_marker(ls_buf)
        line_sender_buffer_clear_marker(__pyx_v_ls_buf);
 2314: 
 2315:         # On error, undo all added lines.
+2316:         if not line_sender_buffer_set_marker(ls_buf, &err):
        __pyx_t_4 = (!line_sender_buffer_set_marker(__pyx_v_ls_buf, (&__pyx_v_err)));
        if (unlikely(__pyx_t_4)) {
/* … */
        }
+2317:             raise c_err_to_py(err)
          __pyx_t_1 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2317, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_Raise(__pyx_t_1, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __PYX_ERR(1, 2317, __pyx_L9_error)
 2318: 
+2319:         row_gil_blip_interval = _CELL_GIL_BLIP_INTERVAL // col_count
        if (unlikely(__pyx_v_col_count == 0)) {
          PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
          __PYX_ERR(1, 2319, __pyx_L9_error)
        }
        __pyx_v_row_gil_blip_interval = (__pyx_v_7questdb_7ingress__CELL_GIL_BLIP_INTERVAL / __pyx_v_col_count);
+2320:         if row_gil_blip_interval < 400:  # ceiling reached at 100 columns
        __pyx_t_4 = (__pyx_v_row_gil_blip_interval < 0x190);
        if (__pyx_t_4) {
/* … */
        }
+2321:             row_gil_blip_interval = 400
          __pyx_v_row_gil_blip_interval = 0x190;
+2322:         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_L22_try_end;
          __pyx_L17_error:;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
          __pyx_L19_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_L9_error;
          __pyx_L22_try_end:;
        }
 2323:             # Don't move this logic up! We need the GIL to execute a `try`.
 2324:             # Also we can't have any other `try` blocks between here and the
 2325:             # `finally` block.
+2326:             if not any_cols_need_gil:
            __pyx_t_4 = (!__pyx_v_any_cols_need_gil);
            if (__pyx_t_4) {
/* … */
            }
+2327:                 _ensure_doesnt_have_gil(&gs)
              __pyx_t_4 = __pyx_f_7questdb_7ingress__ensure_doesnt_have_gil((&__pyx_v_gs)); if (unlikely(__pyx_t_4 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2327, __pyx_L17_error)
 2328: 
+2329:             for row_index in range(row_count):
            __pyx_t_12 = __pyx_v_row_count;
            __pyx_t_13 = __pyx_t_12;
            for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
              __pyx_v_row_index = __pyx_t_14;
+2330:                 if (gs == NULL) and (row_index % row_gil_blip_interval == 0):
              __pyx_t_3 = (__pyx_v_gs == NULL);
              if (__pyx_t_3) {
              } else {
                __pyx_t_4 = __pyx_t_3;
                goto __pyx_L27_bool_binop_done;
              }
              if (unlikely(__pyx_v_row_gil_blip_interval == 0)) {
                PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
                __PYX_ERR(1, 2330, __pyx_L17_error)
              }
              __pyx_t_3 = ((__pyx_v_row_index % __pyx_v_row_gil_blip_interval) == 0);
              __pyx_t_4 = __pyx_t_3;
              __pyx_L27_bool_binop_done:;
              if (__pyx_t_4) {
/* … */
              }
 2331:                     # Release and re-acquire the GIL every so often.
 2332:                     # This is to allow other python threads to run.
 2333:                     # If we hold the GIL for too long, we can starve other
 2334:                     # threads, for example timing out network activity.
+2335:                     _ensure_doesnt_have_gil(&gs)
                __pyx_t_4 = __pyx_f_7questdb_7ingress__ensure_doesnt_have_gil((&__pyx_v_gs)); if (unlikely(__pyx_t_4 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2335, __pyx_L17_error)
+2336:                     _ensure_has_gil(&gs)
                __pyx_f_7questdb_7ingress__ensure_has_gil((&__pyx_v_gs)); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2336, __pyx_L17_error)
 2337: 
+2338:                 qdb_pystr_buf_truncate(b, str_buf_marker)
              qdb_pystr_buf_truncate(__pyx_v_b, __pyx_v_str_buf_marker);
 2339: 
 2340:                 # Table-name from `table_name` arg in Python.
+2341:                 if c_table_name.buf != NULL:
              __pyx_t_4 = (__pyx_v_c_table_name.buf != NULL);
              if (__pyx_t_4) {
/* … */
              }
+2342:                     if not line_sender_buffer_table(ls_buf, c_table_name, &err):
                __pyx_t_4 = (!line_sender_buffer_table(__pyx_v_ls_buf, __pyx_v_c_table_name, (&__pyx_v_err)));
                if (unlikely(__pyx_t_4)) {
/* … */
                }
+2343:                         _ensure_has_gil(&gs)
                  __pyx_f_7questdb_7ingress__ensure_has_gil((&__pyx_v_gs)); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2343, __pyx_L17_error)
+2344:                         raise c_err_to_py(err)
                  __pyx_t_1 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2344, __pyx_L17_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __PYX_ERR(1, 2344, __pyx_L17_error)
 2345: 
 2346:                 # Serialize columns cells.
 2347:                 # Note: Columns are sorted: table name, symbols, fields, at.
+2348:                 was_serializing_cell = True
              __pyx_v_was_serializing_cell = 1;
+2349:                 for col_index in range(col_count):
              __pyx_t_15 = __pyx_v_col_count;
              __pyx_t_16 = __pyx_t_15;
              for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
                __pyx_v_col_index = __pyx_t_17;
+2350:                     col = &cols.d[col_index]
                __pyx_v_col = (&(__pyx_v_cols.d[__pyx_v_col_index]));
+2351:                     _dataframe_serialize_cell(ls_buf, b, col, &gs)  # may raise
                __pyx_t_8 = __pyx_f_7questdb_7ingress__dataframe_serialize_cell(__pyx_v_ls_buf, __pyx_v_b, __pyx_v_col, (&__pyx_v_gs)); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2351, __pyx_L17_error)
+2352:                     _dataframe_col_advance(col)
                __pyx_f_7questdb_7ingress__dataframe_col_advance(__pyx_v_col);
              }
+2353:                 was_serializing_cell = False
              __pyx_v_was_serializing_cell = 0;
 2354: 
 2355:                 # Fixed "at" value (not from a column).
+2356:                 if at_value == _AT_IS_SERVER_NOW:
              __pyx_t_4 = (__pyx_v_at_value == __pyx_v_7questdb_7ingress__AT_IS_SERVER_NOW);
              if (__pyx_t_4) {
/* … */
                goto __pyx_L33;
              }
+2357:                     if not line_sender_buffer_at_now(ls_buf, &err):
                __pyx_t_4 = (!line_sender_buffer_at_now(__pyx_v_ls_buf, (&__pyx_v_err)));
                if (unlikely(__pyx_t_4)) {
/* … */
                }
+2358:                         _ensure_has_gil(&gs)
                  __pyx_f_7questdb_7ingress__ensure_has_gil((&__pyx_v_gs)); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2358, __pyx_L17_error)
+2359:                         raise c_err_to_py(err)
                  __pyx_t_1 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2359, __pyx_L17_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __PYX_ERR(1, 2359, __pyx_L17_error)
+2360:                 elif at_value >= 0:
              __pyx_t_4 = (__pyx_v_at_value >= 0);
              if (__pyx_t_4) {
/* … */
              }
              __pyx_L33:;
+2361:                     if not line_sender_buffer_at_nanos(ls_buf, at_value, &err):
                __pyx_t_4 = (!line_sender_buffer_at_nanos(__pyx_v_ls_buf, __pyx_v_at_value, (&__pyx_v_err)));
                if (unlikely(__pyx_t_4)) {
/* … */
                }
+2362:                         _ensure_has_gil(&gs)
                  __pyx_f_7questdb_7ingress__ensure_has_gil((&__pyx_v_gs)); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2362, __pyx_L17_error)
+2363:                         raise c_err_to_py(err)
                  __pyx_t_1 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2363, __pyx_L17_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __PYX_ERR(1, 2363, __pyx_L17_error)
 2364: 
+2365:                 _dataframe_handle_auto_flush(&af, ls_buf, &gs)
              __pyx_t_8 = __pyx_f_7questdb_7ingress__dataframe_handle_auto_flush((&__pyx_v_af), __pyx_v_ls_buf, (&__pyx_v_gs)); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7ingress_void_int)-1))) __PYX_ERR(1, 2365, __pyx_L17_error)
            }
+2366:         except Exception as e:
          __pyx_t_18 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
          if (__pyx_t_18) {
            __Pyx_AddTraceback("questdb.ingress._dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_19, &__pyx_t_20) < 0) __PYX_ERR(1, 2366, __pyx_L19_except_error)
            __Pyx_XGOTREF(__pyx_t_1);
            __Pyx_XGOTREF(__pyx_t_19);
            __Pyx_XGOTREF(__pyx_t_20);
            __Pyx_INCREF(__pyx_t_19);
            __pyx_v_e = __pyx_t_19;
            /*try:*/ {
/* … */
            /*finally:*/ {
              __pyx_L41_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_21); __pyx_t_21 = 0;
                __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
                __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
                __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
                __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
                __Pyx_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;
                if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
                if ((PY_MAJOR_VERSION < 3) || 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_18 = __pyx_lineno; __pyx_t_30 = __pyx_clineno; __pyx_t_31 = __pyx_filename;
                {
                  __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
                }
                if (PY_MAJOR_VERSION >= 3) {
                  __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_18; __pyx_clineno = __pyx_t_30; __pyx_filename = __pyx_t_31;
                goto __pyx_L19_except_error;
              }
            }
          }
          goto __pyx_L19_except_error;
 2367:             # It would be an internal bug for this to raise.
+2368:             if not line_sender_buffer_rewind_to_marker(ls_buf, &err):
              __pyx_t_4 = (!line_sender_buffer_rewind_to_marker(__pyx_v_ls_buf, (&__pyx_v_err)));
              if (unlikely(__pyx_t_4)) {
/* … */
              }
+2369:                 raise c_err_to_py(err)
                __pyx_t_21 = __pyx_f_7questdb_7ingress_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 2369, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_21);
                __Pyx_Raise(__pyx_t_21, 0, 0, 0);
                __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                __PYX_ERR(1, 2369, __pyx_L41_error)
 2370: 
+2371:             if (isinstance(e, IngressError) and
              __Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_n_s_IngressError); if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 2371, __pyx_L41_error)
              __Pyx_GOTREF(__pyx_t_21);
              __pyx_t_3 = PyObject_IsInstance(__pyx_v_e, __pyx_t_21); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 2371, __pyx_L41_error)
              __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
              if (__pyx_t_3) {
              } else {
                __pyx_t_4 = __pyx_t_3;
                goto __pyx_L45_bool_binop_done;
              }
/* … */
              if (unlikely(__pyx_t_4)) {
/* … */
              }
+2372:                     (e.code == IngressErrorCode.InvalidApiCall)):
              __pyx_t_21 = __Pyx_PyObject_GetAttrStr(__pyx_v_e, __pyx_n_s_code); if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 2372, __pyx_L41_error)
              __Pyx_GOTREF(__pyx_t_21);
              __Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_n_s_IngressErrorCode); if (unlikely(!__pyx_t_22)) __PYX_ERR(1, 2372, __pyx_L41_error)
              __Pyx_GOTREF(__pyx_t_22);
              __pyx_t_23 = __Pyx_PyObject_GetAttrStr(__pyx_t_22, __pyx_n_s_InvalidApiCall); if (unlikely(!__pyx_t_23)) __PYX_ERR(1, 2372, __pyx_L41_error)
              __Pyx_GOTREF(__pyx_t_23);
              __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
              __pyx_t_22 = PyObject_RichCompare(__pyx_t_21, __pyx_t_23, Py_EQ); __Pyx_XGOTREF(__pyx_t_22); if (unlikely(!__pyx_t_22)) __PYX_ERR(1, 2372, __pyx_L41_error)
              __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
              __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
              __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_22); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(1, 2372, __pyx_L41_error)
              __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
              __pyx_t_4 = __pyx_t_3;
              __pyx_L45_bool_binop_done:;
 2373:                 # TODO: This should be allowed by the database.
 2374:                 # It currently isn't so we have to raise an error.
+2375:                 raise IngressError(
                __Pyx_GetModuleGlobalName(__pyx_t_23, __pyx_n_s_IngressError); if (unlikely(!__pyx_t_23)) __PYX_ERR(1, 2375, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_23);
+2376:                     IngressErrorCode.BadDataFrame,
                __Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_n_s_IngressErrorCode); if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 2376, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_21);
                __pyx_t_24 = __Pyx_PyObject_GetAttrStr(__pyx_t_21, __pyx_n_s_BadDataFrame); if (unlikely(!__pyx_t_24)) __PYX_ERR(1, 2376, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_24);
                __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
+2377:                     f'Bad dataframe row at index {row_index}: ' +
                __pyx_t_21 = PyTuple_New(3); if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 2377, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_21);
                __pyx_t_2 = 0;
                __pyx_t_25 = 127;
                __Pyx_INCREF(__pyx_kp_u_Bad_dataframe_row_at_index);
                __pyx_t_2 += 27;
                __Pyx_GIVEREF(__pyx_kp_u_Bad_dataframe_row_at_index);
                PyTuple_SET_ITEM(__pyx_t_21, 0, __pyx_kp_u_Bad_dataframe_row_at_index);
                __pyx_t_26 = __Pyx_PyUnicode_From_size_t(__pyx_v_row_index, 0, ' ', 'd'); if (unlikely(!__pyx_t_26)) __PYX_ERR(1, 2377, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_26);
                __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_26);
                __Pyx_GIVEREF(__pyx_t_26);
                PyTuple_SET_ITEM(__pyx_t_21, 1, __pyx_t_26);
                __pyx_t_26 = 0;
                __Pyx_INCREF(__pyx_kp_u__21);
                __pyx_t_2 += 2;
                __Pyx_GIVEREF(__pyx_kp_u__21);
                PyTuple_SET_ITEM(__pyx_t_21, 2, __pyx_kp_u__21);
                __pyx_t_26 = __Pyx_PyUnicode_Join(__pyx_t_21, 3, __pyx_t_2, __pyx_t_25); if (unlikely(!__pyx_t_26)) __PYX_ERR(1, 2377, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_26);
                __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                __pyx_t_21 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_26, __pyx_kp_u_All_values_are_nulls); if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 2377, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_21);
                __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
+2378:                     'All values are nulls. '+
                __pyx_t_26 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_21, __pyx_kp_u_Ensure_at_least_one_column_is_no); if (unlikely(!__pyx_t_26)) __PYX_ERR(1, 2378, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_26);
                __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                __pyx_t_21 = NULL;
                __pyx_t_18 = 0;
                #if CYTHON_UNPACK_METHODS
                if (unlikely(PyMethod_Check(__pyx_t_23))) {
                  __pyx_t_21 = PyMethod_GET_SELF(__pyx_t_23);
                  if (likely(__pyx_t_21)) {
                    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_23);
                    __Pyx_INCREF(__pyx_t_21);
                    __Pyx_INCREF(function);
                    __Pyx_DECREF_SET(__pyx_t_23, function);
                    __pyx_t_18 = 1;
                  }
                }
                #endif
                {
                  PyObject *__pyx_callargs[3] = {__pyx_t_21, __pyx_t_24, __pyx_t_26};
                  __pyx_t_22 = __Pyx_PyObject_FastCall(__pyx_t_23, __pyx_callargs+1-__pyx_t_18, 2+__pyx_t_18);
                  __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
                  __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
                  __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
                  if (unlikely(!__pyx_t_22)) __PYX_ERR(1, 2375, __pyx_L41_error)
                  __Pyx_GOTREF(__pyx_t_22);
                  __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
                }
+2379:                     'Ensure at least one column is not null.') from e
                __Pyx_Raise(__pyx_t_22, 0, 0, __pyx_v_e);
                __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
                __PYX_ERR(1, 2375, __pyx_L41_error)
+2380:             elif was_serializing_cell:
              if (unlikely(__pyx_v_was_serializing_cell)) {
/* … */
              }
+2381:                 raise IngressError(
                __Pyx_GetModuleGlobalName(__pyx_t_23, __pyx_n_s_IngressError); if (unlikely(!__pyx_t_23)) __PYX_ERR(1, 2381, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_23);
+2382:                     IngressErrorCode.BadDataFrame,
                __Pyx_GetModuleGlobalName(__pyx_t_26, __pyx_n_s_IngressErrorCode); if (unlikely(!__pyx_t_26)) __PYX_ERR(1, 2382, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_26);
                __pyx_t_24 = __Pyx_PyObject_GetAttrStr(__pyx_t_26, __pyx_n_s_BadDataFrame); if (unlikely(!__pyx_t_24)) __PYX_ERR(1, 2382, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_24);
                __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
+2383:                     'Failed to serialize value of column ' +
                __pyx_t_21 = PyNumber_Add(__pyx_kp_u_Failed_to_serialize_value_of_col, __pyx_t_26); if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 2383, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_21);
                __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
+2384:                     repr(df.columns[col.setup.orig_index]) +
                __pyx_t_26 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_n_s_columns); if (unlikely(!__pyx_t_26)) __PYX_ERR(1, 2384, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_26);
                __pyx_t_21 = __Pyx_GetItemInt(__pyx_t_26, __pyx_v_col->setup->orig_index, size_t, 0, __Pyx_PyInt_FromSize_t, 0, 0, 1); if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 2384, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_21);
                __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
                __pyx_t_26 = PyObject_Repr(__pyx_t_21); if (unlikely(!__pyx_t_26)) __PYX_ERR(1, 2384, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_26);
                __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
/* … */
                __pyx_t_26 = PyNumber_Add(__pyx_t_21, __pyx_t_27); if (unlikely(!__pyx_t_26)) __PYX_ERR(1, 2384, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_26);
                __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
+2385:                     f' at row index {row_index} (' +
                __pyx_t_26 = PyTuple_New(3); if (unlikely(!__pyx_t_26)) __PYX_ERR(1, 2385, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_26);
                __pyx_t_2 = 0;
                __pyx_t_25 = 127;
                __Pyx_INCREF(__pyx_kp_u_at_row_index);
                __pyx_t_2 += 14;
                __Pyx_GIVEREF(__pyx_kp_u_at_row_index);
                PyTuple_SET_ITEM(__pyx_t_26, 0, __pyx_kp_u_at_row_index);
                __pyx_t_27 = __Pyx_PyUnicode_From_size_t(__pyx_v_row_index, 0, ' ', 'd'); if (unlikely(!__pyx_t_27)) __PYX_ERR(1, 2385, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_27);
                __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_27);
                __Pyx_GIVEREF(__pyx_t_27);
                PyTuple_SET_ITEM(__pyx_t_26, 1, __pyx_t_27);
                __pyx_t_27 = 0;
                __Pyx_INCREF(__pyx_kp_u__20);
                __pyx_t_2 += 2;
                __Pyx_GIVEREF(__pyx_kp_u__20);
                PyTuple_SET_ITEM(__pyx_t_26, 2, __pyx_kp_u__20);
                __pyx_t_27 = __Pyx_PyUnicode_Join(__pyx_t_26, 3, __pyx_t_2, __pyx_t_25); if (unlikely(!__pyx_t_27)) __PYX_ERR(1, 2385, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_27);
                __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
/* … */
                __pyx_t_28 = PyNumber_Add(__pyx_t_26, __pyx_t_29); if (unlikely(!__pyx_t_28)) __PYX_ERR(1, 2385, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_28);
                __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
                __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
+2386:                     repr(df.iloc[row_index, col.setup.orig_index]) +
                __pyx_t_27 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_n_s_iloc); if (unlikely(!__pyx_t_27)) __PYX_ERR(1, 2386, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_27);
                __pyx_t_21 = __Pyx_PyInt_FromSize_t(__pyx_v_row_index); if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 2386, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_21);
                __pyx_t_28 = __Pyx_PyInt_FromSize_t(__pyx_v_col->setup->orig_index); if (unlikely(!__pyx_t_28)) __PYX_ERR(1, 2386, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_28);
                __pyx_t_29 = PyTuple_New(2); if (unlikely(!__pyx_t_29)) __PYX_ERR(1, 2386, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_29);
                __Pyx_GIVEREF(__pyx_t_21);
                if (__Pyx_PyTuple_SET_ITEM(__pyx_t_29, 0, __pyx_t_21)) __PYX_ERR(1, 2386, __pyx_L41_error);
                __Pyx_GIVEREF(__pyx_t_28);
                if (__Pyx_PyTuple_SET_ITEM(__pyx_t_29, 1, __pyx_t_28)) __PYX_ERR(1, 2386, __pyx_L41_error);
                __pyx_t_21 = 0;
                __pyx_t_28 = 0;
                __pyx_t_28 = __Pyx_PyObject_GetItem(__pyx_t_27, __pyx_t_29); if (unlikely(!__pyx_t_28)) __PYX_ERR(1, 2386, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_28);
                __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
                __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
                __pyx_t_29 = PyObject_Repr(__pyx_t_28); if (unlikely(!__pyx_t_29)) __PYX_ERR(1, 2386, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_29);
                __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
/* … */
                __pyx_t_29 = PyNumber_Add(__pyx_t_28, __pyx_t_26); if (unlikely(!__pyx_t_29)) __PYX_ERR(1, 2386, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_29);
                __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
                __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
                __pyx_t_26 = NULL;
                __pyx_t_18 = 0;
                #if CYTHON_UNPACK_METHODS
                if (unlikely(PyMethod_Check(__pyx_t_23))) {
                  __pyx_t_26 = PyMethod_GET_SELF(__pyx_t_23);
                  if (likely(__pyx_t_26)) {
                    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_23);
                    __Pyx_INCREF(__pyx_t_26);
                    __Pyx_INCREF(function);
                    __Pyx_DECREF_SET(__pyx_t_23, function);
                    __pyx_t_18 = 1;
                  }
                }
                #endif
                {
                  PyObject *__pyx_callargs[3] = {__pyx_t_26, __pyx_t_24, __pyx_t_29};
                  __pyx_t_22 = __Pyx_PyObject_FastCall(__pyx_t_23, __pyx_callargs+1-__pyx_t_18, 2+__pyx_t_18);
                  __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
                  __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
                  __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
                  if (unlikely(!__pyx_t_22)) __PYX_ERR(1, 2381, __pyx_L41_error)
                  __Pyx_GOTREF(__pyx_t_22);
                  __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
                }
+2387:                     f'): {e}  [dc={<int>col.dispatch_code}]') from e
                __pyx_t_29 = PyTuple_New(5); if (unlikely(!__pyx_t_29)) __PYX_ERR(1, 2387, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_29);
                __pyx_t_2 = 0;
                __pyx_t_25 = 127;
                __Pyx_INCREF(__pyx_kp_u__27);
                __pyx_t_2 += 3;
                __Pyx_GIVEREF(__pyx_kp_u__27);
                PyTuple_SET_ITEM(__pyx_t_29, 0, __pyx_kp_u__27);
                __pyx_t_26 = __Pyx_PyObject_FormatSimple(__pyx_v_e, __pyx_empty_unicode); if (unlikely(!__pyx_t_26)) __PYX_ERR(1, 2387, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_26);
                __pyx_t_25 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_26) > __pyx_t_25) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_26) : __pyx_t_25;
                __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_26);
                __Pyx_GIVEREF(__pyx_t_26);
                PyTuple_SET_ITEM(__pyx_t_29, 1, __pyx_t_26);
                __pyx_t_26 = 0;
                __Pyx_INCREF(__pyx_kp_u_dc);
                __pyx_t_2 += 6;
                __Pyx_GIVEREF(__pyx_kp_u_dc);
                PyTuple_SET_ITEM(__pyx_t_29, 2, __pyx_kp_u_dc);
                __pyx_t_26 = __Pyx_PyUnicode_From_int(((int)__pyx_v_col->dispatch_code), 0, ' ', 'd'); if (unlikely(!__pyx_t_26)) __PYX_ERR(1, 2387, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_26);
                __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_26);
                __Pyx_GIVEREF(__pyx_t_26);
                PyTuple_SET_ITEM(__pyx_t_29, 3, __pyx_t_26);
                __pyx_t_26 = 0;
                __Pyx_INCREF(__pyx_kp_u__28);
                __pyx_t_2 += 1;
                __Pyx_GIVEREF(__pyx_kp_u__28);
                PyTuple_SET_ITEM(__pyx_t_29, 4, __pyx_kp_u__28);
                __pyx_t_26 = __Pyx_PyUnicode_Join(__pyx_t_29, 5, __pyx_t_2, __pyx_t_25); if (unlikely(!__pyx_t_26)) __PYX_ERR(1, 2387, __pyx_L41_error)
                __Pyx_GOTREF(__pyx_t_26);
                __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
/* … */
                __Pyx_Raise(__pyx_t_22, 0, 0, __pyx_v_e);
                __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
                __PYX_ERR(1, 2381, __pyx_L41_error)
 2388:             else:
+2389:                 raise
              /*else*/ {
                __Pyx_GIVEREF(__pyx_t_1);
                __Pyx_GIVEREF(__pyx_t_19);
                __Pyx_XGIVEREF(__pyx_t_20);
                __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_19, __pyx_t_20);
                __pyx_t_1 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; 
                __PYX_ERR(1, 2389, __pyx_L41_error)
              }
            }
+2390:     except Exception as e:
      __pyx_t_30 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
      if (__pyx_t_30) {
        __Pyx_AddTraceback("questdb.ingress._dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_20, &__pyx_t_19, &__pyx_t_1) < 0) __PYX_ERR(1, 2390, __pyx_L11_except_error)
        __Pyx_XGOTREF(__pyx_t_20);
        __Pyx_XGOTREF(__pyx_t_19);
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_19);
        __Pyx_XDECREF_SET(__pyx_v_e, __pyx_t_19);
        /*try:*/ {
/* … */
        /*finally:*/ {
          __pyx_L56_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_37 = 0; __pyx_t_36 = 0; __pyx_t_35 = 0;
            __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
            __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
            __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
            __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
            __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
            __Pyx_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;
            if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_37, &__pyx_t_36, &__pyx_t_35);
            if ((PY_MAJOR_VERSION < 3) || 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_37);
            __Pyx_XGOTREF(__pyx_t_36);
            __Pyx_XGOTREF(__pyx_t_35);
            __pyx_t_30 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_38 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
            }
            if (PY_MAJOR_VERSION >= 3) {
              __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_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_37 = 0; __pyx_t_36 = 0; __pyx_t_35 = 0;
            __pyx_lineno = __pyx_t_30; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_38;
            goto __pyx_L11_except_error;
          }
        }
      }
      goto __pyx_L11_except_error;
+2391:         if not isinstance(e, IngressError):
          __Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_n_s_IngressError); if (unlikely(!__pyx_t_22)) __PYX_ERR(1, 2391, __pyx_L56_error)
          __Pyx_GOTREF(__pyx_t_22);
          __pyx_t_4 = PyObject_IsInstance(__pyx_v_e, __pyx_t_22); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 2391, __pyx_L56_error)
          __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
          __pyx_t_3 = (!__pyx_t_4);
          if (unlikely(__pyx_t_3)) {
/* … */
          }
+2392:             raise IngressError(
            __Pyx_GetModuleGlobalName(__pyx_t_23, __pyx_n_s_IngressError); if (unlikely(!__pyx_t_23)) __PYX_ERR(1, 2392, __pyx_L56_error)
            __Pyx_GOTREF(__pyx_t_23);
+2393:                 IngressErrorCode.InvalidApiCall,
            __Pyx_GetModuleGlobalName(__pyx_t_29, __pyx_n_s_IngressErrorCode); if (unlikely(!__pyx_t_29)) __PYX_ERR(1, 2393, __pyx_L56_error)
            __Pyx_GOTREF(__pyx_t_29);
            __pyx_t_24 = __Pyx_PyObject_GetAttrStr(__pyx_t_29, __pyx_n_s_InvalidApiCall); if (unlikely(!__pyx_t_24)) __PYX_ERR(1, 2393, __pyx_L56_error)
            __Pyx_GOTREF(__pyx_t_24);
            __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
+2394:                 str(e)) from e
            __pyx_t_29 = __Pyx_PyObject_Str(__pyx_v_e); if (unlikely(!__pyx_t_29)) __PYX_ERR(1, 2394, __pyx_L56_error)
            __Pyx_GOTREF(__pyx_t_29);
            __pyx_t_26 = NULL;
            __pyx_t_30 = 0;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_23))) {
              __pyx_t_26 = PyMethod_GET_SELF(__pyx_t_23);
              if (likely(__pyx_t_26)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_23);
                __Pyx_INCREF(__pyx_t_26);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_23, function);
                __pyx_t_30 = 1;
              }
            }
            #endif
            {
              PyObject *__pyx_callargs[3] = {__pyx_t_26, __pyx_t_24, __pyx_t_29};
              __pyx_t_22 = __Pyx_PyObject_FastCall(__pyx_t_23, __pyx_callargs+1-__pyx_t_30, 2+__pyx_t_30);
              __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
              __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
              __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
              if (unlikely(!__pyx_t_22)) __PYX_ERR(1, 2392, __pyx_L56_error)
              __Pyx_GOTREF(__pyx_t_22);
              __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
            }
            __Pyx_Raise(__pyx_t_22, 0, 0, __pyx_v_e);
            __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
            __PYX_ERR(1, 2392, __pyx_L56_error)
 2395:         else:
+2396:             raise
          /*else*/ {
            __Pyx_GIVEREF(__pyx_t_20);
            __Pyx_GIVEREF(__pyx_t_19);
            __Pyx_XGIVEREF(__pyx_t_1);
            __Pyx_ErrRestoreWithState(__pyx_t_20, __pyx_t_19, __pyx_t_1);
            __pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_1 = 0; 
            __PYX_ERR(1, 2396, __pyx_L56_error)
          }
        }
 2397:     finally:
+2398:         _ensure_has_gil(&gs)  # Note: We need the GIL for cleanup.
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_f_7questdb_7ingress__ensure_has_gil((&__pyx_v_gs)); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2398, __pyx_L1_error)
/* … */
        __pyx_f_7questdb_7ingress__ensure_has_gil((&__pyx_v_gs)); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2398, __pyx_L64_error)
+2399:         line_sender_buffer_clear_marker(ls_buf)
      line_sender_buffer_clear_marker(__pyx_v_ls_buf);
/* … */
        line_sender_buffer_clear_marker(__pyx_v_ls_buf);
+2400:         col_t_arr_release(&cols)
      __pyx_f_7questdb_7ingress_col_t_arr_release((&__pyx_v_cols));
/* … */
        __pyx_f_7questdb_7ingress_col_t_arr_release((&__pyx_v_cols));
+2401:         qdb_pystr_buf_clear(b)
      qdb_pystr_buf_clear(__pyx_v_b);
      goto __pyx_L8;
    }
    __pyx_L7_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_5 = 0; __pyx_t_35 = 0; __pyx_t_36 = 0; __pyx_t_37 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
      __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
      __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
      __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
      __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
      __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
      __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
      __Pyx_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;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
      if ((PY_MAJOR_VERSION < 3) || 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_35);
      __Pyx_XGOTREF(__pyx_t_36);
      __Pyx_XGOTREF(__pyx_t_37);
      __pyx_t_18 = __pyx_lineno; __pyx_t_30 = __pyx_clineno; __pyx_t_39 = __pyx_filename;
      {
/* … */
        qdb_pystr_buf_clear(__pyx_v_b);
      }
      if (PY_MAJOR_VERSION >= 3) {
        __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_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_35 = 0; __pyx_t_36 = 0; __pyx_t_37 = 0;
      __pyx_lineno = __pyx_t_18; __pyx_clineno = __pyx_t_30; __pyx_filename = __pyx_t_39;
      goto __pyx_L1_error;
      __pyx_L64_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __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_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;
      __pyx_t_35 = 0; __pyx_t_36 = 0; __pyx_t_37 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L8:;
  }