duckdb 0.10.1-dev9.0 → 0.10.2-dev0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (702) hide show
  1. package/.github/workflows/NodeJS.yml +9 -16
  2. package/binding.gyp +4 -1
  3. package/package.json +1 -1
  4. package/src/database.cpp +1 -0
  5. package/src/duckdb/extension/icu/icu-strptime.cpp +46 -4
  6. package/src/duckdb/extension/icu/icu-table-range.cpp +5 -0
  7. package/src/duckdb/extension/icu/icu-timezone.cpp +28 -4
  8. package/src/duckdb/extension/json/buffered_json_reader.cpp +6 -5
  9. package/src/duckdb/extension/json/include/buffered_json_reader.hpp +3 -3
  10. package/src/duckdb/extension/json/include/json_transform.hpp +2 -0
  11. package/src/duckdb/extension/json/json_functions/json_create.cpp +6 -0
  12. package/src/duckdb/extension/json/json_functions/json_transform.cpp +8 -9
  13. package/src/duckdb/extension/json/json_functions.cpp +1 -2
  14. package/src/duckdb/extension/json/json_scan.cpp +1 -0
  15. package/src/duckdb/extension/parquet/column_reader.cpp +17 -1
  16. package/src/duckdb/extension/parquet/column_writer.cpp +151 -20
  17. package/src/duckdb/extension/parquet/include/column_writer.hpp +3 -4
  18. package/src/duckdb/extension/parquet/parquet_extension.cpp +14 -9
  19. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +10 -0
  20. package/src/duckdb/extension/parquet/parquet_writer.cpp +4 -0
  21. package/src/duckdb/src/catalog/catalog.cpp +94 -10
  22. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +9 -5
  23. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +1 -0
  24. package/src/duckdb/src/catalog/catalog_entry/ub_duckdb_catalog_entries.cpp +16 -0
  25. package/src/duckdb/src/catalog/catalog_entry/view_catalog_entry.cpp +28 -0
  26. package/src/duckdb/src/catalog/default/default_functions.cpp +3 -0
  27. package/src/duckdb/src/catalog/default/default_views.cpp +3 -3
  28. package/src/duckdb/src/catalog/default/ub_duckdb_catalog_default_entries.cpp +5 -0
  29. package/src/duckdb/src/catalog/dependency_catalog_set.cpp +1 -3
  30. package/src/duckdb/src/catalog/dependency_manager.cpp +2 -5
  31. package/src/duckdb/src/catalog/ub_duckdb_catalog.cpp +10 -0
  32. package/src/duckdb/src/common/adbc/adbc.cpp +1 -1
  33. package/src/duckdb/src/common/adbc/driver_manager.cpp +2 -1
  34. package/src/duckdb/src/common/adbc/nanoarrow/ub_duckdb_adbc_nanoarrow.cpp +5 -0
  35. package/src/duckdb/src/common/adbc/ub_duckdb_adbc.cpp +3 -0
  36. package/src/duckdb/src/common/allocator.cpp +34 -8
  37. package/src/duckdb/src/common/arrow/appender/fixed_size_list_data.cpp +39 -0
  38. package/src/duckdb/src/common/arrow/appender/ub_duckdb_common_arrow_appender.cpp +6 -0
  39. package/src/duckdb/src/common/arrow/appender/union_data.cpp +2 -1
  40. package/src/duckdb/src/common/arrow/arrow_appender.cpp +5 -5
  41. package/src/duckdb/src/common/arrow/arrow_converter.cpp +17 -0
  42. package/src/duckdb/src/common/arrow/ub_duckdb_common_arrow.cpp +4 -0
  43. package/src/duckdb/src/common/compressed_file_system.cpp +1 -0
  44. package/src/duckdb/src/common/crypto/ub_duckdb_common_crypto.cpp +2 -0
  45. package/src/duckdb/src/common/enum_util.cpp +153 -13
  46. package/src/duckdb/src/common/enums/logical_operator_type.cpp +0 -2
  47. package/src/duckdb/src/common/enums/physical_operator_type.cpp +2 -2
  48. package/src/duckdb/src/common/enums/ub_duckdb_common_enums.cpp +12 -0
  49. package/src/duckdb/src/common/exception/conversion_exception.cpp +23 -0
  50. package/src/duckdb/src/common/exception.cpp +7 -14
  51. package/src/duckdb/src/common/extra_type_info.cpp +6 -5
  52. package/src/duckdb/src/common/gzip_file_system.cpp +5 -4
  53. package/src/duckdb/src/common/local_file_system.cpp +85 -10
  54. package/src/duckdb/src/common/operator/cast_operators.cpp +413 -305
  55. package/src/duckdb/src/common/operator/ub_duckdb_common_operators.cpp +4 -0
  56. package/src/duckdb/src/common/progress_bar/ub_duckdb_progress_bar.cpp +3 -0
  57. package/src/duckdb/src/common/re2_regex.cpp +2 -1
  58. package/src/duckdb/src/common/row_operations/row_heap_scatter.cpp +2 -2
  59. package/src/duckdb/src/common/row_operations/row_matcher.cpp +1 -0
  60. package/src/duckdb/src/common/row_operations/row_scatter.cpp +2 -2
  61. package/src/duckdb/src/common/row_operations/ub_duckdb_row_operations.cpp +9 -0
  62. package/src/duckdb/src/common/serializer/binary_serializer.cpp +3 -3
  63. package/src/duckdb/src/common/serializer/ub_duckdb_common_serializer.cpp +7 -0
  64. package/src/duckdb/src/common/sort/partition_state.cpp +2 -3
  65. package/src/duckdb/src/common/sort/ub_duckdb_sort.cpp +7 -0
  66. package/src/duckdb/src/common/string_util.cpp +3 -3
  67. package/src/duckdb/src/common/types/bit.cpp +7 -6
  68. package/src/duckdb/src/common/types/blob.cpp +20 -9
  69. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +8 -6
  70. package/src/duckdb/src/common/types/column/column_data_collection.cpp +11 -1
  71. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +5 -0
  72. package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +1 -1
  73. package/src/duckdb/src/common/types/column/ub_duckdb_common_types_column.cpp +6 -0
  74. package/src/duckdb/src/common/types/data_chunk.cpp +1 -1
  75. package/src/duckdb/src/common/types/date.cpp +1 -1
  76. package/src/duckdb/src/common/types/hugeint.cpp +3 -2
  77. package/src/duckdb/src/common/types/interval.cpp +1 -1
  78. package/src/duckdb/src/common/types/list_segment.cpp +2 -1
  79. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +3 -9
  80. package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +7 -7
  81. package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +10 -27
  82. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +168 -88
  83. package/src/duckdb/src/common/types/row/ub_duckdb_common_types_row.cpp +11 -0
  84. package/src/duckdb/src/common/types/selection_vector.cpp +1 -1
  85. package/src/duckdb/src/common/types/string_heap.cpp +5 -1
  86. package/src/duckdb/src/common/types/string_type.cpp +18 -4
  87. package/src/duckdb/src/common/types/time.cpp +4 -2
  88. package/src/duckdb/src/common/types/timestamp.cpp +32 -6
  89. package/src/duckdb/src/common/types/ub_duckdb_common_types.cpp +28 -0
  90. package/src/duckdb/src/common/types/uhugeint.cpp +3 -2
  91. package/src/duckdb/src/common/types/uuid.cpp +11 -0
  92. package/src/duckdb/src/common/types/validity_mask.cpp +4 -3
  93. package/src/duckdb/src/common/types/value.cpp +17 -6
  94. package/src/duckdb/src/common/types/vector.cpp +243 -68
  95. package/src/duckdb/src/common/types.cpp +7 -5
  96. package/src/duckdb/src/common/ub_duckdb_common.cpp +34 -0
  97. package/src/duckdb/src/common/value_operations/ub_duckdb_value_operations.cpp +2 -0
  98. package/src/duckdb/src/common/vector_operations/generators.cpp +2 -1
  99. package/src/duckdb/src/common/vector_operations/vector_cast.cpp +4 -4
  100. package/src/duckdb/src/common/vector_operations/vector_copy.cpp +2 -2
  101. package/src/duckdb/src/common/vector_operations/vector_hash.cpp +17 -6
  102. package/src/duckdb/src/core_functions/aggregate/algebraic/ub_duckdb_aggr_algebraic.cpp +5 -0
  103. package/src/duckdb/src/core_functions/aggregate/distributive/arg_min_max.cpp +30 -6
  104. package/src/duckdb/src/core_functions/aggregate/distributive/bitagg.cpp +1 -1
  105. package/src/duckdb/src/core_functions/aggregate/distributive/bitstring_agg.cpp +12 -5
  106. package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +2 -2
  107. package/src/duckdb/src/core_functions/aggregate/distributive/string_agg.cpp +2 -1
  108. package/src/duckdb/src/core_functions/aggregate/distributive/ub_duckdb_aggr_distributive.cpp +13 -0
  109. package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +2 -1
  110. package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +2 -9
  111. package/src/duckdb/src/core_functions/aggregate/holistic/ub_duckdb_aggr_holistic.cpp +5 -0
  112. package/src/duckdb/src/core_functions/aggregate/nested/ub_duckdb_aggr_nested.cpp +3 -0
  113. package/src/duckdb/src/core_functions/aggregate/regression/ub_duckdb_aggr_regr.cpp +8 -0
  114. package/src/duckdb/src/core_functions/function_list.cpp +1 -0
  115. package/src/duckdb/src/core_functions/scalar/bit/bitstring.cpp +2 -2
  116. package/src/duckdb/src/core_functions/scalar/bit/ub_duckdb_func_bit.cpp +2 -0
  117. package/src/duckdb/src/core_functions/scalar/blob/ub_duckdb_func_blob.cpp +3 -0
  118. package/src/duckdb/src/core_functions/scalar/date/date_diff.cpp +8 -0
  119. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +22 -3
  120. package/src/duckdb/src/core_functions/scalar/date/make_date.cpp +29 -7
  121. package/src/duckdb/src/core_functions/scalar/date/to_interval.cpp +3 -1
  122. package/src/duckdb/src/core_functions/scalar/date/ub_duckdb_func_date.cpp +12 -0
  123. package/src/duckdb/src/core_functions/scalar/debug/ub_duckdb_func_debug.cpp +2 -0
  124. package/src/duckdb/src/core_functions/scalar/enum/ub_duckdb_func_enum.cpp +2 -0
  125. package/src/duckdb/src/core_functions/scalar/generic/ub_duckdb_func_generic.cpp +9 -0
  126. package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +12 -8
  127. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +2 -1
  128. package/src/duckdb/src/core_functions/scalar/list/list_reduce.cpp +6 -5
  129. package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +5 -3
  130. package/src/duckdb/src/core_functions/scalar/list/list_value.cpp +28 -12
  131. package/src/duckdb/src/core_functions/scalar/list/ub_duckdb_func_list.cpp +11 -0
  132. package/src/duckdb/src/core_functions/scalar/map/map.cpp +129 -160
  133. package/src/duckdb/src/core_functions/scalar/map/ub_duckdb_func_map_nested.cpp +8 -0
  134. package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +19 -16
  135. package/src/duckdb/src/core_functions/scalar/math/ub_duckdb_func_math.cpp +1 -0
  136. package/src/duckdb/src/core_functions/scalar/operators/bitwise.cpp +4 -4
  137. package/src/duckdb/src/core_functions/scalar/operators/ub_duckdb_func_ops.cpp +1 -0
  138. package/src/duckdb/src/core_functions/scalar/random/ub_duckdb_func_random.cpp +3 -0
  139. package/src/duckdb/src/core_functions/scalar/string/hex.cpp +2 -1
  140. package/src/duckdb/src/core_functions/scalar/string/pad.cpp +2 -2
  141. package/src/duckdb/src/core_functions/scalar/string/repeat.cpp +1 -1
  142. package/src/duckdb/src/core_functions/scalar/string/replace.cpp +1 -1
  143. package/src/duckdb/src/core_functions/scalar/string/string_split.cpp +2 -1
  144. package/src/duckdb/src/core_functions/scalar/string/translate.cpp +1 -1
  145. package/src/duckdb/src/core_functions/scalar/string/ub_duckdb_func_string.cpp +26 -0
  146. package/src/duckdb/src/core_functions/scalar/struct/ub_duckdb_func_struct.cpp +3 -0
  147. package/src/duckdb/src/core_functions/scalar/union/ub_duckdb_func_union.cpp +4 -0
  148. package/src/duckdb/src/core_functions/ub_duckdb_core_functions.cpp +3 -0
  149. package/src/duckdb/src/execution/adaptive_filter.cpp +1 -1
  150. package/src/duckdb/src/execution/aggregate_hashtable.cpp +1 -1
  151. package/src/duckdb/src/execution/column_binding_resolver.cpp +7 -1
  152. package/src/duckdb/src/execution/expression_executor/execute_case.cpp +2 -2
  153. package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +2 -0
  154. package/src/duckdb/src/execution/expression_executor/execute_function.cpp +2 -2
  155. package/src/duckdb/src/execution/expression_executor/execute_operator.cpp +1 -1
  156. package/src/duckdb/src/execution/expression_executor/ub_duckdb_expression_executor.cpp +11 -0
  157. package/src/duckdb/src/execution/expression_executor.cpp +5 -2
  158. package/src/duckdb/src/execution/index/art/art.cpp +12 -6
  159. package/src/duckdb/src/execution/index/art/art_key.cpp +3 -3
  160. package/src/duckdb/src/execution/index/art/leaf.cpp +2 -2
  161. package/src/duckdb/src/execution/index/art/node16.cpp +2 -2
  162. package/src/duckdb/src/execution/index/art/node256.cpp +3 -3
  163. package/src/duckdb/src/execution/index/art/node48.cpp +5 -5
  164. package/src/duckdb/src/execution/index/art/prefix.cpp +1 -1
  165. package/src/duckdb/src/execution/index/art/ub_duckdb_art_index_execution.cpp +12 -0
  166. package/src/duckdb/src/execution/index/art/ub_duckdb_execution_index_art.cpp +11 -0
  167. package/src/duckdb/src/execution/index/fixed_size_buffer.cpp +6 -5
  168. package/src/duckdb/src/execution/index/ub_duckdb_execution_index.cpp +3 -0
  169. package/src/duckdb/src/execution/nested_loop_join/ub_duckdb_nested_loop_join.cpp +3 -0
  170. package/src/duckdb/src/execution/operator/aggregate/aggregate_object.cpp +1 -1
  171. package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +3 -4
  172. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +0 -1
  173. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +3 -4
  174. package/src/duckdb/src/execution/operator/aggregate/ub_duckdb_operator_aggregate.cpp +9 -0
  175. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer.cpp +1 -1
  176. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.cpp +8 -3
  177. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_file_handle.cpp +1 -1
  178. package/src/duckdb/src/execution/operator/csv_scanner/scanner/base_scanner.cpp +5 -5
  179. package/src/duckdb/src/execution/operator/csv_scanner/scanner/column_count_scanner.cpp +2 -3
  180. package/src/duckdb/src/execution/operator/csv_scanner/scanner/scanner_boundary.cpp +5 -1
  181. package/src/duckdb/src/execution/operator/csv_scanner/scanner/skip_scanner.cpp +2 -2
  182. package/src/duckdb/src/execution/operator/csv_scanner/scanner/string_value_scanner.cpp +151 -79
  183. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/csv_sniffer.cpp +11 -6
  184. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp +27 -6
  185. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/header_detection.cpp +71 -18
  186. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_detection.cpp +22 -11
  187. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_refinement.cpp +6 -4
  188. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_replacement.cpp +5 -3
  189. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/ub_duckdb_operator_csv_sniffer.cpp +7 -0
  190. package/src/duckdb/src/execution/operator/csv_scanner/state_machine/csv_state_machine.cpp +3 -3
  191. package/src/duckdb/src/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.cpp +30 -5
  192. package/src/duckdb/src/execution/operator/csv_scanner/table_function/csv_file_scanner.cpp +6 -2
  193. package/src/duckdb/src/execution/operator/csv_scanner/table_function/global_csv_state.cpp +47 -46
  194. package/src/duckdb/src/execution/operator/csv_scanner/ub_duckdb_operator_csv_scanner.cpp +10 -0
  195. package/src/duckdb/src/execution/operator/csv_scanner/util/csv_error.cpp +102 -54
  196. package/src/duckdb/src/execution/operator/csv_scanner/util/csv_reader_options.cpp +8 -1
  197. package/src/duckdb/src/execution/operator/filter/ub_duckdb_operator_filter.cpp +2 -0
  198. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +54 -36
  199. package/src/duckdb/src/execution/operator/helper/physical_limit_percent.cpp +56 -32
  200. package/src/duckdb/src/execution/operator/helper/physical_streaming_limit.cpp +9 -13
  201. package/src/duckdb/src/execution/operator/helper/physical_transaction.cpp +12 -0
  202. package/src/duckdb/src/execution/operator/helper/physical_verify_vector.cpp +221 -0
  203. package/src/duckdb/src/execution/operator/helper/ub_duckdb_operator_helper.cpp +18 -0
  204. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +1 -0
  205. package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +23 -8
  206. package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +8 -3
  207. package/src/duckdb/src/execution/operator/join/ub_duckdb_operator_join.cpp +16 -0
  208. package/src/duckdb/src/execution/operator/order/physical_order.cpp +2 -3
  209. package/src/duckdb/src/execution/operator/order/physical_top_n.cpp +2 -7
  210. package/src/duckdb/src/execution/operator/order/ub_duckdb_operator_order.cpp +3 -0
  211. package/src/duckdb/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +451 -55
  212. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +312 -150
  213. package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +200 -75
  214. package/src/duckdb/src/execution/operator/persistent/physical_delete.cpp +1 -0
  215. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +6 -5
  216. package/src/duckdb/src/execution/operator/persistent/ub_duckdb_operator_persistent.cpp +10 -0
  217. package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +3 -2
  218. package/src/duckdb/src/execution/operator/projection/ub_duckdb_operator_projection.cpp +5 -0
  219. package/src/duckdb/src/execution/operator/scan/ub_duckdb_operator_scan.cpp +7 -0
  220. package/src/duckdb/src/execution/operator/schema/ub_duckdb_operator_schema.cpp +12 -0
  221. package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +25 -0
  222. package/src/duckdb/src/execution/operator/set/ub_duckdb_operator_set.cpp +4 -0
  223. package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +4 -4
  224. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +2 -2
  225. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +2 -2
  226. package/src/duckdb/src/execution/physical_plan/plan_copy_to_file.cpp +7 -17
  227. package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +10 -0
  228. package/src/duckdb/src/execution/physical_plan/plan_insert.cpp +7 -0
  229. package/src/duckdb/src/execution/physical_plan/plan_limit.cpp +45 -13
  230. package/src/duckdb/src/execution/physical_plan/ub_duckdb_physical_plan.cpp +44 -0
  231. package/src/duckdb/src/execution/physical_plan_generator.cpp +5 -3
  232. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +13 -12
  233. package/src/duckdb/src/execution/ub_duckdb_execution.cpp +15 -0
  234. package/src/duckdb/src/execution/window_executor.cpp +71 -61
  235. package/src/duckdb/src/execution/window_segment_tree.cpp +6 -6
  236. package/src/duckdb/src/extension_forward_decl/icu.cpp +59 -0
  237. package/src/duckdb/src/function/aggregate/algebraic/ub_duckdb_aggr_algebraic.cpp +5 -0
  238. package/src/duckdb/src/function/aggregate/distributive/first.cpp +2 -2
  239. package/src/duckdb/src/function/aggregate/distributive/ub_duckdb_aggr_distr.cpp +3 -0
  240. package/src/duckdb/src/function/aggregate/holistic/ub_duckdb_aggr_holistic.cpp +5 -0
  241. package/src/duckdb/src/function/aggregate/nested/ub_duckdb_aggr_nested.cpp +3 -0
  242. package/src/duckdb/src/function/aggregate/regression/ub_duckdb_aggr_regr.cpp +8 -0
  243. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +3 -2
  244. package/src/duckdb/src/function/aggregate/ub_duckdb_func_aggr.cpp +3 -0
  245. package/src/duckdb/src/function/cast/array_casts.cpp +2 -4
  246. package/src/duckdb/src/function/cast/bit_cast.cpp +13 -13
  247. package/src/duckdb/src/function/cast/cast_function_set.cpp +2 -0
  248. package/src/duckdb/src/function/cast/decimal_cast.cpp +38 -44
  249. package/src/duckdb/src/function/cast/default_casts.cpp +5 -2
  250. package/src/duckdb/src/function/cast/enum_casts.cpp +5 -5
  251. package/src/duckdb/src/function/cast/list_casts.cpp +24 -14
  252. package/src/duckdb/src/function/cast/string_cast.cpp +48 -30
  253. package/src/duckdb/src/function/cast/struct_cast.cpp +2 -2
  254. package/src/duckdb/src/function/cast/time_casts.cpp +12 -0
  255. package/src/duckdb/src/function/cast/ub_duckdb_func_cast.cpp +17 -0
  256. package/src/duckdb/src/function/cast/union/ub_duckdb_union_cast.cpp +2 -0
  257. package/src/duckdb/src/function/cast/union_casts.cpp +13 -15
  258. package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +1 -1
  259. package/src/duckdb/src/function/cast_rules.cpp +2 -1
  260. package/src/duckdb/src/function/pragma/ub_duckdb_func_pragma.cpp +3 -0
  261. package/src/duckdb/src/function/scalar/bit/ub_duckdb_func_bit.cpp +2 -0
  262. package/src/duckdb/src/function/scalar/blob/ub_duckdb_func_blob.cpp +3 -0
  263. package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +7 -6
  264. package/src/duckdb/src/function/scalar/compressed_materialization/compress_string.cpp +3 -3
  265. package/src/duckdb/src/function/scalar/compressed_materialization/ub_duckdb_func_compressed_materialization.cpp +3 -0
  266. package/src/duckdb/src/function/scalar/date/ub_duckdb_func_date.cpp +12 -0
  267. package/src/duckdb/src/function/scalar/enum/ub_duckdb_func_enum.cpp +2 -0
  268. package/src/duckdb/src/function/scalar/generic/ub_duckdb_func_generic.cpp +8 -0
  269. package/src/duckdb/src/function/scalar/generic/ub_duckdb_func_generic_main.cpp +2 -0
  270. package/src/duckdb/src/function/scalar/list/list_resize.cpp +3 -1
  271. package/src/duckdb/src/function/scalar/list/list_zip.cpp +3 -4
  272. package/src/duckdb/src/function/scalar/list/ub_duckdb_func_list.cpp +11 -0
  273. package/src/duckdb/src/function/scalar/list/ub_duckdb_func_list_nested.cpp +5 -0
  274. package/src/duckdb/src/function/scalar/map/ub_duckdb_func_map_nested.cpp +7 -0
  275. package/src/duckdb/src/function/scalar/math/ub_duckdb_func_math.cpp +4 -0
  276. package/src/duckdb/src/function/scalar/nested_functions.cpp +7 -3
  277. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +1 -1
  278. package/src/duckdb/src/function/scalar/operators/multiply.cpp +4 -2
  279. package/src/duckdb/src/function/scalar/operators/subtract.cpp +9 -3
  280. package/src/duckdb/src/function/scalar/operators/ub_duckdb_func_ops.cpp +6 -0
  281. package/src/duckdb/src/function/scalar/operators/ub_duckdb_func_ops_main.cpp +5 -0
  282. package/src/duckdb/src/function/scalar/sequence/ub_duckdb_func_seq.cpp +2 -0
  283. package/src/duckdb/src/function/scalar/strftime_format.cpp +21 -20
  284. package/src/duckdb/src/function/scalar/string/like.cpp +14 -3
  285. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +4 -2
  286. package/src/duckdb/src/function/scalar/string/regexp/ub_duckdb_func_string_regexp.cpp +3 -0
  287. package/src/duckdb/src/function/scalar/string/regexp.cpp +6 -4
  288. package/src/duckdb/src/function/scalar/string/suffix.cpp +1 -1
  289. package/src/duckdb/src/function/scalar/string/ub_duckdb_func_string.cpp +31 -0
  290. package/src/duckdb/src/function/scalar/string/ub_duckdb_func_string_main.cpp +12 -0
  291. package/src/duckdb/src/function/scalar/struct/ub_duckdb_func_struct.cpp +4 -0
  292. package/src/duckdb/src/function/scalar/struct/ub_duckdb_func_struct_main.cpp +2 -0
  293. package/src/duckdb/src/function/scalar/system/ub_duckdb_func_system.cpp +2 -0
  294. package/src/duckdb/src/function/scalar/ub_duckdb_func_scalar.cpp +9 -0
  295. package/src/duckdb/src/function/scalar/union/ub_duckdb_func_union.cpp +4 -0
  296. package/src/duckdb/src/function/table/arrow/arrow_array_scan_state.cpp +28 -2
  297. package/src/duckdb/src/function/table/arrow/ub_duckdb_arrow_conversion.cpp +2 -0
  298. package/src/duckdb/src/function/table/arrow.cpp +23 -6
  299. package/src/duckdb/src/function/table/arrow_conversion.cpp +75 -33
  300. package/src/duckdb/src/function/table/copy_csv.cpp +8 -3
  301. package/src/duckdb/src/function/table/range.cpp +5 -0
  302. package/src/duckdb/src/function/table/read_csv.cpp +9 -8
  303. package/src/duckdb/src/function/table/read_file.cpp +1 -1
  304. package/src/duckdb/src/function/table/sniff_csv.cpp +5 -5
  305. package/src/duckdb/src/function/table/system/duckdb_columns.cpp +6 -2
  306. package/src/duckdb/src/function/table/system/duckdb_secrets.cpp +5 -1
  307. package/src/duckdb/src/function/table/system/duckdb_sequences.cpp +3 -1
  308. package/src/duckdb/src/function/table/system/duckdb_settings.cpp +13 -1
  309. package/src/duckdb/src/function/table/system/test_all_types.cpp +64 -0
  310. package/src/duckdb/src/function/table/system/ub_duckdb_table_func_system.cpp +23 -0
  311. package/src/duckdb/src/function/table/ub_duckdb_func_table.cpp +16 -0
  312. package/src/duckdb/src/function/table/version/pragma_version.cpp +11 -2
  313. package/src/duckdb/src/function/table/version/ub_duckdb_func_table_version.cpp +2 -0
  314. package/src/duckdb/src/function/ub_duckdb_function.cpp +14 -0
  315. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +11 -1
  316. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/view_catalog_entry.hpp +2 -0
  317. package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +1 -1
  318. package/src/duckdb/src/include/duckdb/common/allocator.hpp +8 -11
  319. package/src/duckdb/src/include/duckdb/common/arrow/appender/enum_data.hpp +2 -2
  320. package/src/duckdb/src/include/duckdb/common/arrow/appender/fixed_size_list_data.hpp +14 -0
  321. package/src/duckdb/src/include/duckdb/common/arrow/appender/list.hpp +1 -0
  322. package/src/duckdb/src/include/duckdb/common/arrow/appender/list_data.hpp +1 -1
  323. package/src/duckdb/src/include/duckdb/common/arrow/appender/varchar_data.hpp +2 -2
  324. package/src/duckdb/src/include/duckdb/common/bitpacking.hpp +2 -2
  325. package/src/duckdb/src/include/duckdb/common/bswap.hpp +6 -2
  326. package/src/duckdb/src/include/duckdb/common/enum_util.hpp +32 -0
  327. package/src/duckdb/src/include/duckdb/common/enums/catalog_lookup_behavior.hpp +21 -0
  328. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +0 -1
  329. package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +1 -1
  330. package/src/duckdb/src/include/duckdb/common/enums/prepared_statement_mode.hpp +20 -0
  331. package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +2 -0
  332. package/src/duckdb/src/include/duckdb/common/exception/conversion_exception.hpp +6 -0
  333. package/src/duckdb/src/include/duckdb/common/exception/parser_exception.hpp +4 -0
  334. package/src/duckdb/src/include/duckdb/common/exception.hpp +2 -0
  335. package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +3 -3
  336. package/src/duckdb/src/include/duckdb/common/file_opener.hpp +6 -5
  337. package/src/duckdb/src/include/duckdb/common/file_system.hpp +4 -2
  338. package/src/duckdb/src/include/duckdb/common/helper.hpp +7 -0
  339. package/src/duckdb/src/include/duckdb/common/limits.hpp +2 -2
  340. package/src/duckdb/src/include/duckdb/common/local_file_system.hpp +3 -0
  341. package/src/duckdb/src/include/duckdb/common/numeric_utils.hpp +64 -0
  342. package/src/duckdb/src/include/duckdb/common/operator/cast_operators.hpp +34 -33
  343. package/src/duckdb/src/include/duckdb/common/operator/decimal_cast_operators.hpp +150 -124
  344. package/src/duckdb/src/include/duckdb/common/operator/integer_cast_operator.hpp +5 -5
  345. package/src/duckdb/src/include/duckdb/common/radix.hpp +1 -1
  346. package/src/duckdb/src/include/duckdb/common/serializer/deserializer.hpp +1 -1
  347. package/src/duckdb/src/include/duckdb/common/sort/duckdb_pdqsort.hpp +4 -4
  348. package/src/duckdb/src/include/duckdb/common/types/bit.hpp +1 -1
  349. package/src/duckdb/src/include/duckdb/common/types/blob.hpp +4 -1
  350. package/src/duckdb/src/include/duckdb/common/types/cast_helpers.hpp +15 -13
  351. package/src/duckdb/src/include/duckdb/common/types/column/column_data_allocator.hpp +5 -0
  352. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection.hpp +2 -0
  353. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection_segment.hpp +3 -0
  354. package/src/duckdb/src/include/duckdb/common/types/column/partitioned_column_data.hpp +1 -1
  355. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +1 -1
  356. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_states.hpp +4 -1
  357. package/src/duckdb/src/include/duckdb/common/types/selection_vector.hpp +2 -1
  358. package/src/duckdb/src/include/duckdb/common/types/string_heap.hpp +2 -0
  359. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +11 -4
  360. package/src/duckdb/src/include/duckdb/common/types/time.hpp +1 -1
  361. package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +7 -2
  362. package/src/duckdb/src/include/duckdb/common/types/uuid.hpp +3 -0
  363. package/src/duckdb/src/include/duckdb/common/types/value.hpp +7 -0
  364. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +40 -7
  365. package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +1 -1
  366. package/src/duckdb/src/include/duckdb/common/types.hpp +1 -1
  367. package/src/duckdb/src/include/duckdb/common/vector_operations/general_cast.hpp +12 -4
  368. package/src/duckdb/src/include/duckdb/common/vector_operations/generic_executor.hpp +6 -6
  369. package/src/duckdb/src/include/duckdb/common/vector_operations/vector_operations.hpp +3 -2
  370. package/src/duckdb/src/include/duckdb/common/windows_undefs.hpp +4 -0
  371. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +1 -1
  372. package/src/duckdb/src/include/duckdb/core_functions/scalar/list_functions.hpp +9 -0
  373. package/src/duckdb/src/include/duckdb/execution/column_binding_resolver.hpp +2 -1
  374. package/src/duckdb/src/include/duckdb/execution/executor.hpp +10 -0
  375. package/src/duckdb/src/include/duckdb/execution/expression_executor_state.hpp +1 -1
  376. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/base_scanner.hpp +262 -0
  377. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/column_count_scanner.hpp +70 -0
  378. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_buffer.hpp +103 -0
  379. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp +74 -0
  380. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_casting.hpp +154 -0
  381. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_error.hpp +130 -0
  382. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_file_handle.hpp +60 -0
  383. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_file_scanner.hpp +70 -0
  384. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_option.hpp +155 -0
  385. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_reader_options.hpp +166 -0
  386. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_sniffer.hpp +191 -0
  387. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_state.hpp +30 -0
  388. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_state_machine.hpp +99 -0
  389. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_state_machine_cache.hpp +91 -0
  390. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/global_csv_state.hpp +80 -0
  391. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/quote_rules.hpp +21 -0
  392. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner_boundary.hpp +93 -0
  393. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/skip_scanner.hpp +60 -0
  394. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine_options.hpp +35 -0
  395. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/string_value_scanner.hpp +200 -0
  396. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_limit.hpp +13 -10
  397. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_limit_percent.hpp +5 -11
  398. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_streaming_limit.hpp +4 -6
  399. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_verify_vector.hpp +51 -0
  400. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_hash_join.hpp +3 -0
  401. package/src/duckdb/src/include/duckdb/execution/operator/persistent/batch_memory_manager.hpp +165 -0
  402. package/src/duckdb/src/include/duckdb/execution/operator/persistent/batch_task_manager.hpp +48 -0
  403. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_batch_copy_to_file.hpp +10 -17
  404. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_batch_insert.hpp +4 -0
  405. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_copy_to_file.hpp +2 -0
  406. package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +10 -6
  407. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +0 -2
  408. package/src/duckdb/src/include/duckdb/execution/window_executor.hpp +2 -1
  409. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +1 -1
  410. package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +1 -0
  411. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +14 -5
  412. package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +27 -43
  413. package/src/duckdb/src/include/duckdb/function/compression_function.hpp +4 -4
  414. package/src/duckdb/src/include/duckdb/function/copy_function.hpp +3 -3
  415. package/src/duckdb/src/include/duckdb/function/function.hpp +1 -1
  416. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +1 -0
  417. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +1 -1
  418. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +1 -1
  419. package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +10 -4
  420. package/src/duckdb/src/include/duckdb/function/table/read_csv.hpp +8 -6
  421. package/src/duckdb/src/include/duckdb/function/table_function.hpp +3 -3
  422. package/src/duckdb/src/include/duckdb/main/attached_database.hpp +3 -0
  423. package/src/duckdb/src/include/duckdb/main/capi/cast/from_decimal.hpp +6 -4
  424. package/src/duckdb/src/include/duckdb/main/capi/cast/to_decimal.hpp +17 -10
  425. package/src/duckdb/src/include/duckdb/main/client_config.hpp +2 -0
  426. package/src/duckdb/src/include/duckdb/main/client_context.hpp +17 -3
  427. package/src/duckdb/src/include/duckdb/main/client_context_file_opener.hpp +2 -2
  428. package/src/duckdb/src/include/duckdb/main/client_context_state.hpp +20 -0
  429. package/src/duckdb/src/include/duckdb/main/client_data.hpp +1 -1
  430. package/src/duckdb/src/include/duckdb/main/database.hpp +3 -2
  431. package/src/duckdb/src/include/duckdb/main/database_manager.hpp +2 -1
  432. package/src/duckdb/src/include/duckdb/main/extension/generated_extension_loader.hpp +1 -1
  433. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +230 -199
  434. package/src/duckdb/src/include/duckdb/main/extension_helper.hpp +18 -0
  435. package/src/duckdb/src/include/duckdb/main/relation/read_csv_relation.hpp +1 -1
  436. package/src/duckdb/src/include/duckdb/main/relation/table_function_relation.hpp +2 -0
  437. package/src/duckdb/src/include/duckdb/main/relation.hpp +1 -1
  438. package/src/duckdb/src/include/duckdb/main/secret/secret_manager.hpp +4 -0
  439. package/src/duckdb/src/include/duckdb/main/settings.hpp +54 -10
  440. package/src/duckdb/src/include/duckdb/optimizer/join_order/relation_manager.hpp +2 -1
  441. package/src/duckdb/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp +2 -0
  442. package/src/duckdb/src/include/duckdb/parallel/concurrentqueue.hpp +21 -5
  443. package/src/duckdb/src/include/duckdb/parallel/event.hpp +1 -1
  444. package/src/duckdb/src/include/duckdb/parallel/executor_task.hpp +37 -0
  445. package/src/duckdb/src/include/duckdb/parallel/interrupt.hpp +1 -1
  446. package/src/duckdb/src/include/duckdb/parallel/pipeline.hpp +1 -1
  447. package/src/duckdb/src/include/duckdb/parallel/task.hpp +0 -20
  448. package/src/duckdb/src/include/duckdb/parallel/task_scheduler.hpp +4 -2
  449. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +10 -0
  450. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +2 -1
  451. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +0 -24
  452. package/src/duckdb/src/include/duckdb/parser/parsed_data/comment_on_column_info.hpp +46 -0
  453. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_view_info.hpp +2 -0
  454. package/src/duckdb/src/include/duckdb/parser/parsed_data/extra_drop_info.hpp +1 -1
  455. package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +3 -2
  456. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +3 -3
  457. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +3 -3
  458. package/src/duckdb/src/include/duckdb/planner/binder.hpp +11 -4
  459. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +59 -23
  460. package/src/duckdb/src/include/duckdb/planner/expression.hpp +1 -0
  461. package/src/duckdb/src/include/duckdb/planner/expression_binder/column_alias_binder.hpp +2 -2
  462. package/src/duckdb/src/include/duckdb/planner/expression_iterator.hpp +11 -3
  463. package/src/duckdb/src/include/duckdb/planner/extension_callback.hpp +6 -0
  464. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +0 -1
  465. package/src/duckdb/src/include/duckdb/planner/operator/logical_insert.hpp +1 -1
  466. package/src/duckdb/src/include/duckdb/planner/operator/logical_limit.hpp +5 -9
  467. package/src/duckdb/src/include/duckdb/planner/subquery/rewrite_correlated_expressions.hpp +0 -15
  468. package/src/duckdb/src/include/duckdb/storage/arena_allocator.hpp +5 -0
  469. package/src/duckdb/src/include/duckdb/storage/buffer/buffer_pool.hpp +40 -5
  470. package/src/duckdb/src/include/duckdb/storage/compression/alp/algorithm/alp.hpp +1 -1
  471. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_analyze.hpp +5 -1
  472. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_compress.hpp +4 -4
  473. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_utils.hpp +2 -1
  474. package/src/duckdb/src/include/duckdb/storage/compression/alprd/algorithm/alprd.hpp +10 -8
  475. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_analyze.hpp +5 -1
  476. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_compress.hpp +3 -3
  477. package/src/duckdb/src/include/duckdb/storage/compression/chimp/algorithm/bit_reader.hpp +11 -10
  478. package/src/duckdb/src/include/duckdb/storage/compression/chimp/algorithm/bit_utils.hpp +3 -1
  479. package/src/duckdb/src/include/duckdb/storage/compression/chimp/algorithm/chimp128.hpp +1 -1
  480. package/src/duckdb/src/include/duckdb/storage/compression/chimp/algorithm/leading_zero_buffer.hpp +5 -3
  481. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +2 -1
  482. package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +1 -1
  483. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +3 -1
  484. package/src/duckdb/src/include/duckdb/storage/index.hpp +1 -1
  485. package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +1 -1
  486. package/src/duckdb/src/include/duckdb/storage/standard_buffer_manager.hpp +3 -0
  487. package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +1 -1
  488. package/src/duckdb/src/include/duckdb/storage/table/append_state.hpp +0 -2
  489. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +1 -1
  490. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +5 -3
  491. package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +2 -2
  492. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +5 -0
  493. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +9 -2
  494. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +2 -6
  495. package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +3 -3
  496. package/src/duckdb/src/include/duckdb/storage/temporary_file_manager.hpp +169 -0
  497. package/src/duckdb/src/include/duckdb/transaction/duck_transaction_manager.hpp +11 -1
  498. package/src/duckdb/src/include/duckdb/transaction/meta_transaction.hpp +6 -1
  499. package/src/duckdb/src/include/duckdb/transaction/transaction.hpp +1 -1
  500. package/src/duckdb/src/include/duckdb.h +119 -67
  501. package/src/duckdb/src/main/appender.cpp +2 -1
  502. package/src/duckdb/src/main/attached_database.cpp +49 -27
  503. package/src/duckdb/src/main/capi/appender-c.cpp +1 -1
  504. package/src/duckdb/src/main/capi/cast/ub_duckdb_main_capi_cast.cpp +3 -0
  505. package/src/duckdb/src/main/capi/cast/utils-c.cpp +1 -1
  506. package/src/duckdb/src/main/capi/data_chunk-c.cpp +9 -1
  507. package/src/duckdb/src/main/capi/datetime-c.cpp +14 -8
  508. package/src/duckdb/src/main/capi/duckdb_value-c.cpp +29 -2
  509. package/src/duckdb/src/main/capi/helper-c.cpp +2 -0
  510. package/src/duckdb/src/main/capi/hugeint-c.cpp +2 -1
  511. package/src/duckdb/src/main/capi/logical_types-c.cpp +35 -1
  512. package/src/duckdb/src/main/capi/result-c.cpp +9 -0
  513. package/src/duckdb/src/main/capi/ub_duckdb_main_capi.cpp +19 -0
  514. package/src/duckdb/src/main/chunk_scan_state/ub_duckdb_main_chunk_scan_state.cpp +2 -0
  515. package/src/duckdb/src/main/client_context.cpp +133 -33
  516. package/src/duckdb/src/main/client_context_file_opener.cpp +8 -7
  517. package/src/duckdb/src/main/config.cpp +2 -0
  518. package/src/duckdb/src/main/connection_manager.cpp +8 -0
  519. package/src/duckdb/src/main/database.cpp +13 -4
  520. package/src/duckdb/src/main/database_manager.cpp +10 -1
  521. package/src/duckdb/src/main/extension/extension_helper.cpp +8 -5
  522. package/src/duckdb/src/main/extension/extension_install.cpp +1 -1
  523. package/src/duckdb/src/main/extension/ub_duckdb_main_extension.cpp +6 -0
  524. package/src/duckdb/src/main/prepared_statement_data.cpp +23 -6
  525. package/src/duckdb/src/main/query_profiler.cpp +9 -7
  526. package/src/duckdb/src/main/relation/read_csv_relation.cpp +17 -12
  527. package/src/duckdb/src/main/relation/ub_duckdb_main_relation.cpp +26 -0
  528. package/src/duckdb/src/main/relation/value_relation.cpp +2 -0
  529. package/src/duckdb/src/main/secret/secret.cpp +1 -1
  530. package/src/duckdb/src/main/secret/secret_manager.cpp +41 -8
  531. package/src/duckdb/src/main/secret/secret_storage.cpp +8 -2
  532. package/src/duckdb/src/main/settings/settings.cpp +42 -2
  533. package/src/duckdb/src/main/settings/ub_duckdb_main_settings.cpp +2 -0
  534. package/src/duckdb/src/main/ub_duckdb_main.cpp +25 -0
  535. package/src/duckdb/src/optimizer/compressed_materialization/ub_duckdb_optimizer_compressed_materialization.cpp +4 -0
  536. package/src/duckdb/src/optimizer/filter_combiner.cpp +20 -14
  537. package/src/duckdb/src/optimizer/in_clause_rewriter.cpp +5 -1
  538. package/src/duckdb/src/optimizer/join_order/relation_manager.cpp +23 -11
  539. package/src/duckdb/src/optimizer/join_order/ub_duckdb_optimizer_join_order.cpp +12 -0
  540. package/src/duckdb/src/optimizer/matcher/ub_duckdb_optimizer_matcher.cpp +2 -0
  541. package/src/duckdb/src/optimizer/pullup/ub_duckdb_optimizer_pullup.cpp +6 -0
  542. package/src/duckdb/src/optimizer/pushdown/pushdown_limit.cpp +1 -1
  543. package/src/duckdb/src/optimizer/pushdown/ub_duckdb_optimizer_pushdown.cpp +12 -0
  544. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +7 -6
  545. package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +8 -6
  546. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +1 -1
  547. package/src/duckdb/src/optimizer/rule/ub_duckdb_optimizer_rules.cpp +16 -0
  548. package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +71 -1
  549. package/src/duckdb/src/optimizer/statistics/expression/ub_duckdb_optimizer_statistics_expr.cpp +11 -0
  550. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +1 -1
  551. package/src/duckdb/src/optimizer/statistics/operator/propagate_limit.cpp +5 -1
  552. package/src/duckdb/src/optimizer/statistics/operator/ub_duckdb_optimizer_statistics_op.cpp +11 -0
  553. package/src/duckdb/src/optimizer/topn_optimizer.cpp +12 -11
  554. package/src/duckdb/src/optimizer/ub_duckdb_optimizer.cpp +20 -0
  555. package/src/duckdb/src/parallel/executor.cpp +8 -19
  556. package/src/duckdb/src/parallel/executor_task.cpp +6 -2
  557. package/src/duckdb/src/parallel/pipeline.cpp +12 -6
  558. package/src/duckdb/src/parallel/pipeline_executor.cpp +1 -1
  559. package/src/duckdb/src/parallel/pipeline_finish_event.cpp +2 -2
  560. package/src/duckdb/src/parallel/pipeline_initialize_event.cpp +1 -2
  561. package/src/duckdb/src/parallel/task_scheduler.cpp +15 -8
  562. package/src/duckdb/src/parallel/ub_duckdb_parallel.cpp +15 -0
  563. package/src/duckdb/src/parser/constraints/ub_duckdb_constraints.cpp +5 -0
  564. package/src/duckdb/src/parser/expression/ub_duckdb_expression.cpp +18 -0
  565. package/src/duckdb/src/parser/parsed_data/alter_table_info.cpp +0 -18
  566. package/src/duckdb/src/parser/parsed_data/comment_on_column_info.cpp +44 -0
  567. package/src/duckdb/src/parser/parsed_data/create_view_info.cpp +1 -0
  568. package/src/duckdb/src/parser/parsed_data/extra_drop_info.cpp +2 -0
  569. package/src/duckdb/src/parser/parsed_data/ub_duckdb_parsed_data.cpp +24 -0
  570. package/src/duckdb/src/parser/parser.cpp +1 -1
  571. package/src/duckdb/src/parser/query_error_context.cpp +15 -1
  572. package/src/duckdb/src/parser/query_node/ub_duckdb_query_node.cpp +5 -0
  573. package/src/duckdb/src/parser/statement/export_statement.cpp +2 -1
  574. package/src/duckdb/src/parser/statement/relation_statement.cpp +2 -2
  575. package/src/duckdb/src/parser/statement/ub_duckdb_statement.cpp +25 -0
  576. package/src/duckdb/src/parser/tableref/pivotref.cpp +3 -3
  577. package/src/duckdb/src/parser/tableref/showref.cpp +2 -0
  578. package/src/duckdb/src/parser/tableref/ub_duckdb_parser_tableref.cpp +8 -0
  579. package/src/duckdb/src/parser/transform/constraint/ub_duckdb_transformer_constraint.cpp +2 -0
  580. package/src/duckdb/src/parser/transform/expression/transform_boolean_test.cpp +1 -1
  581. package/src/duckdb/src/parser/transform/expression/transform_cast.cpp +10 -2
  582. package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +7 -7
  583. package/src/duckdb/src/parser/transform/expression/transform_interval.cpp +2 -1
  584. package/src/duckdb/src/parser/transform/expression/ub_duckdb_transformer_expression.cpp +20 -0
  585. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +2 -2
  586. package/src/duckdb/src/parser/transform/helpers/ub_duckdb_transformer_helpers.cpp +8 -0
  587. package/src/duckdb/src/parser/transform/statement/transform_comment_on.cpp +3 -8
  588. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +3 -1
  589. package/src/duckdb/src/parser/transform/statement/transform_show_select.cpp +2 -3
  590. package/src/duckdb/src/parser/transform/statement/ub_duckdb_transformer_statement.cpp +37 -0
  591. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +16 -0
  592. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +49 -32
  593. package/src/duckdb/src/parser/transform/tableref/ub_duckdb_transformer_tableref.cpp +8 -0
  594. package/src/duckdb/src/parser/ub_duckdb_parser.cpp +15 -0
  595. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +11 -4
  596. package/src/duckdb/src/planner/binder/expression/bind_operator_expression.cpp +4 -1
  597. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +71 -5
  598. package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +35 -1
  599. package/src/duckdb/src/planner/binder/expression/ub_duckdb_bind_expression.cpp +20 -0
  600. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +55 -51
  601. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +1 -11
  602. package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +2 -2
  603. package/src/duckdb/src/planner/binder/query_node/ub_duckdb_bind_query_node.cpp +12 -0
  604. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +12 -6
  605. package/src/duckdb/src/planner/binder/statement/bind_drop.cpp +1 -1
  606. package/src/duckdb/src/planner/binder/statement/bind_export.cpp +8 -2
  607. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +6 -3
  608. package/src/duckdb/src/planner/binder/statement/bind_simple.cpp +13 -2
  609. package/src/duckdb/src/planner/binder/statement/ub_duckdb_bind_statement.cpp +26 -0
  610. package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +15 -4
  611. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +9 -2
  612. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +93 -45
  613. package/src/duckdb/src/planner/binder/tableref/bind_subqueryref.cpp +6 -1
  614. package/src/duckdb/src/planner/binder/tableref/ub_duckdb_bind_tableref.cpp +17 -0
  615. package/src/duckdb/src/planner/binder.cpp +22 -23
  616. package/src/duckdb/src/planner/bound_result_modifier.cpp +67 -4
  617. package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +5 -1
  618. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +3 -0
  619. package/src/duckdb/src/planner/expression/ub_duckdb_planner_expression.cpp +19 -0
  620. package/src/duckdb/src/planner/expression_binder/column_alias_binder.cpp +14 -9
  621. package/src/duckdb/src/planner/expression_binder/having_binder.cpp +17 -9
  622. package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +61 -37
  623. package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +8 -4
  624. package/src/duckdb/src/planner/expression_binder/ub_duckdb_expression_binders.cpp +20 -0
  625. package/src/duckdb/src/planner/expression_binder/where_binder.cpp +3 -2
  626. package/src/duckdb/src/planner/expression_iterator.cpp +73 -52
  627. package/src/duckdb/src/planner/filter/ub_duckdb_planner_filter.cpp +4 -0
  628. package/src/duckdb/src/planner/logical_operator_visitor.cpp +4 -14
  629. package/src/duckdb/src/planner/operator/logical_limit.cpp +14 -6
  630. package/src/duckdb/src/planner/operator/ub_duckdb_planner_operator.cpp +43 -0
  631. package/src/duckdb/src/planner/parsed_data/ub_duckdb_planner_parsed_data.cpp +2 -0
  632. package/src/duckdb/src/planner/planner.cpp +3 -0
  633. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +46 -18
  634. package/src/duckdb/src/planner/subquery/rewrite_correlated_expressions.cpp +39 -33
  635. package/src/duckdb/src/planner/subquery/ub_duckdb_planner_subquery.cpp +4 -0
  636. package/src/duckdb/src/planner/ub_duckdb_planner.cpp +15 -0
  637. package/src/duckdb/src/storage/arena_allocator.cpp +9 -0
  638. package/src/duckdb/src/storage/buffer/block_handle.cpp +7 -2
  639. package/src/duckdb/src/storage/buffer/block_manager.cpp +7 -3
  640. package/src/duckdb/src/storage/buffer/buffer_pool.cpp +121 -24
  641. package/src/duckdb/src/storage/buffer/ub_duckdb_storage_buffer.cpp +6 -0
  642. package/src/duckdb/src/storage/checkpoint/ub_duckdb_storage_checkpoint.cpp +5 -0
  643. package/src/duckdb/src/storage/checkpoint/write_overflow_strings_to_disk.cpp +4 -4
  644. package/src/duckdb/src/storage/compression/chimp/ub_duckdb_storage_compression_chimp.cpp +6 -0
  645. package/src/duckdb/src/storage/compression/dictionary_compression.cpp +6 -5
  646. package/src/duckdb/src/storage/compression/fsst.cpp +3 -2
  647. package/src/duckdb/src/storage/compression/rle.cpp +1 -1
  648. package/src/duckdb/src/storage/compression/string_uncompressed.cpp +4 -4
  649. package/src/duckdb/src/storage/compression/ub_duckdb_storage_compression.cpp +12 -0
  650. package/src/duckdb/src/storage/data_table.cpp +6 -3
  651. package/src/duckdb/src/storage/local_storage.cpp +5 -2
  652. package/src/duckdb/src/storage/metadata/metadata_manager.cpp +4 -4
  653. package/src/duckdb/src/storage/metadata/metadata_reader.cpp +1 -1
  654. package/src/duckdb/src/storage/metadata/metadata_writer.cpp +1 -1
  655. package/src/duckdb/src/storage/metadata/ub_duckdb_storage_metadata.cpp +4 -0
  656. package/src/duckdb/src/storage/partial_block_manager.cpp +1 -1
  657. package/src/duckdb/src/storage/serialization/serialize_create_info.cpp +2 -0
  658. package/src/duckdb/src/storage/serialization/serialize_expression.cpp +3 -0
  659. package/src/duckdb/src/storage/serialization/serialize_logical_operator.cpp +5 -29
  660. package/src/duckdb/src/storage/serialization/serialize_nodes.cpp +22 -4
  661. package/src/duckdb/src/storage/serialization/serialize_parse_info.cpp +12 -32
  662. package/src/duckdb/src/storage/serialization/ub_duckdb_storage_serialization.cpp +16 -0
  663. package/src/duckdb/src/storage/standard_buffer_manager.cpp +29 -397
  664. package/src/duckdb/src/storage/statistics/string_stats.cpp +1 -1
  665. package/src/duckdb/src/storage/statistics/ub_duckdb_storage_statistics.cpp +10 -0
  666. package/src/duckdb/src/storage/storage_info.cpp +1 -1
  667. package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +3 -3
  668. package/src/duckdb/src/storage/table/column_data.cpp +7 -16
  669. package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +4 -1
  670. package/src/duckdb/src/storage/table/column_segment.cpp +68 -78
  671. package/src/duckdb/src/storage/table/list_column_data.cpp +1 -0
  672. package/src/duckdb/src/storage/table/row_group.cpp +17 -7
  673. package/src/duckdb/src/storage/table/row_group_collection.cpp +28 -27
  674. package/src/duckdb/src/storage/table/ub_duckdb_storage_table.cpp +17 -0
  675. package/src/duckdb/src/storage/table/update_segment.cpp +7 -7
  676. package/src/duckdb/src/storage/temporary_file_manager.cpp +334 -0
  677. package/src/duckdb/src/storage/ub_duckdb_storage.cpp +20 -0
  678. package/src/duckdb/src/storage/write_ahead_log.cpp +3 -2
  679. package/src/duckdb/src/transaction/commit_state.cpp +4 -2
  680. package/src/duckdb/src/transaction/duck_transaction_manager.cpp +32 -17
  681. package/src/duckdb/src/transaction/meta_transaction.cpp +24 -0
  682. package/src/duckdb/src/transaction/transaction_context.cpp +0 -9
  683. package/src/duckdb/src/transaction/ub_duckdb_transaction.cpp +11 -0
  684. package/src/duckdb/src/transaction/undo_buffer.cpp +1 -1
  685. package/src/duckdb/third_party/jaro_winkler/details/common.hpp +1 -1
  686. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +2 -0
  687. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +1032 -551
  688. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24122 -24304
  689. package/src/duckdb/third_party/mbedtls/include/mbedtls/mbedtls_config.h +0 -3
  690. package/src/duckdb/third_party/mbedtls/library/entropy_poll.cpp +32 -4
  691. package/src/duckdb/third_party/miniz/miniz_wrapper.hpp +4 -4
  692. package/src/duckdb/third_party/tdigest/t_digest.hpp +3 -3
  693. package/src/duckdb/ub_src_common_arrow_appender.cpp +2 -0
  694. package/src/duckdb/ub_src_common_exception.cpp +2 -0
  695. package/src/duckdb/ub_src_execution_operator_helper.cpp +2 -0
  696. package/src/duckdb/ub_src_execution_operator_persistent.cpp +0 -2
  697. package/src/duckdb/ub_src_execution_physical_plan.cpp +0 -2
  698. package/src/duckdb/ub_src_parser_parsed_data.cpp +1 -1
  699. package/src/duckdb/ub_src_planner_operator.cpp +0 -2
  700. package/src/duckdb/ub_src_storage.cpp +2 -0
  701. package/test/columns.test.ts +1 -1
  702. package/test/test_all_types.test.ts +1 -1
@@ -18,6 +18,12 @@ public:
18
18
  virtual ~ExtensionCallback() {
19
19
  }
20
20
 
21
+ //! Called when a new connection is opened
22
+ virtual void OnConnectionOpened(ClientContext &context) {
23
+ }
24
+ //! Called when a connection is closed
25
+ virtual void OnConnectionClosed(ClientContext &context) {
26
+ }
21
27
  //! Called after an extension is finished loading
22
28
  virtual void OnExtensionLoaded(DatabaseInstance &db, const string &name) {
23
29
  }
@@ -25,7 +25,6 @@
25
25
  #include "duckdb/planner/operator/logical_insert.hpp"
26
26
  #include "duckdb/planner/operator/logical_join.hpp"
27
27
  #include "duckdb/planner/operator/logical_limit.hpp"
28
- #include "duckdb/planner/operator/logical_limit_percent.hpp"
29
28
  #include "duckdb/planner/operator/logical_materialized_cte.hpp"
30
29
  #include "duckdb/planner/operator/logical_order.hpp"
31
30
  #include "duckdb/planner/operator/logical_pivot.hpp"
@@ -53,7 +53,7 @@ public:
53
53
  // The types of the columns targeted by the DO UPDATE SET expressions
54
54
  vector<LogicalType> set_types;
55
55
  // The table_index referring to the column references qualified with 'excluded'
56
- idx_t excluded_table_index;
56
+ idx_t excluded_table_index = 0;
57
57
  // The columns to fetch from the 'destination' table
58
58
  vector<column_t> columns_to_fetch;
59
59
  // The columns to fetch from the 'source' table
@@ -9,6 +9,7 @@
9
9
  #pragma once
10
10
 
11
11
  #include "duckdb/planner/logical_operator.hpp"
12
+ #include "duckdb/planner/bound_result_modifier.hpp"
12
13
 
13
14
  namespace duckdb {
14
15
 
@@ -18,15 +19,10 @@ public:
18
19
  static constexpr const LogicalOperatorType TYPE = LogicalOperatorType::LOGICAL_LIMIT;
19
20
 
20
21
  public:
21
- LogicalLimit(int64_t limit_val, int64_t offset_val, unique_ptr<Expression> limit, unique_ptr<Expression> offset);
22
-
23
- //! Limit and offset values in case they are constants, used in optimizations.
24
- int64_t limit_val;
25
- int64_t offset_val;
26
- //! The maximum amount of elements to emit
27
- unique_ptr<Expression> limit;
28
- //! The offset from the start to begin emitting elements
29
- unique_ptr<Expression> offset;
22
+ LogicalLimit(BoundLimitNode limit_val, BoundLimitNode offset_val);
23
+
24
+ BoundLimitNode limit_val;
25
+ BoundLimitNode offset_val;
30
26
 
31
27
  public:
32
28
  vector<ColumnBinding> GetColumnBindings() override;
@@ -26,21 +26,6 @@ protected:
26
26
  unique_ptr<Expression> VisitReplace(BoundColumnRefExpression &expr, unique_ptr<Expression> *expr_ptr) override;
27
27
  unique_ptr<Expression> VisitReplace(BoundSubqueryExpression &expr, unique_ptr<Expression> *expr_ptr) override;
28
28
 
29
- private:
30
- //! Helper class used to recursively rewrite correlated expressions within nested subqueries.
31
- class RewriteCorrelatedRecursive {
32
- public:
33
- RewriteCorrelatedRecursive(BoundSubqueryExpression &parent, ColumnBinding base_binding,
34
- column_binding_map_t<idx_t> &correlated_map);
35
- void RewriteJoinRefRecursive(BoundTableRef &ref);
36
- void RewriteCorrelatedSubquery(BoundSubqueryExpression &expr);
37
- void RewriteCorrelatedExpressions(Expression &child);
38
-
39
- BoundSubqueryExpression &parent;
40
- ColumnBinding base_binding;
41
- column_binding_map_t<idx_t> &correlated_map;
42
- };
43
-
44
29
  private:
45
30
  ColumnBinding base_binding;
46
31
  column_binding_map_t<idx_t> &correlated_map;
@@ -46,7 +46,10 @@ public:
46
46
  DUCKDB_API ArenaChunk *GetTail();
47
47
 
48
48
  DUCKDB_API bool IsEmpty() const;
49
+ //! Get the total *used* size (not cached)
49
50
  DUCKDB_API idx_t SizeInBytes() const;
51
+ //! Get the currently allocated size in bytes (cached, read from "allocated_size")
52
+ DUCKDB_API idx_t AllocationSize() const;
50
53
 
51
54
  //! Returns an "Allocator" wrapper for this arena allocator
52
55
  Allocator &GetAllocator() {
@@ -61,6 +64,8 @@ private:
61
64
  ArenaChunk *tail;
62
65
  //! An allocator wrapper using this arena allocator
63
66
  Allocator arena_allocator;
67
+ //! The total allocated size
68
+ idx_t allocated_size = 0;
64
69
  };
65
70
 
66
71
  } // namespace duckdb
@@ -29,7 +29,6 @@ struct BufferEvictionNode {
29
29
  idx_t timestamp;
30
30
 
31
31
  bool CanUnload(BlockHandle &handle_p);
32
-
33
32
  shared_ptr<BlockHandle> TryGetBlockHandle();
34
33
  };
35
34
 
@@ -73,9 +72,24 @@ protected:
73
72
  virtual EvictionResult EvictBlocks(MemoryTag tag, idx_t extra_memory, idx_t memory_limit,
74
73
  unique_ptr<FileBuffer> *buffer = nullptr);
75
74
 
76
- //! Garbage collect eviction queue
75
+ //! Tries to dequeue an element from the eviction queue, but only after acquiring the purge queue lock.
76
+ bool TryDequeueWithLock(BufferEvictionNode &node);
77
+ //! Bulk purge dead nodes from the eviction queue. Then, enqueue those that are still alive.
78
+ void PurgeIteration(const idx_t purge_size);
79
+ //! Garbage collect dead nodes in the eviction queue.
77
80
  void PurgeQueue();
78
- void AddToEvictionQueue(shared_ptr<BlockHandle> &handle);
81
+ //! Add a buffer handle to the eviction queue. Returns true, if the queue is
82
+ //! ready to be purged, and false otherwise.
83
+ bool AddToEvictionQueue(shared_ptr<BlockHandle> &handle);
84
+
85
+ //! Increment the dead node counter in the purge queue.
86
+ inline void IncrementDeadNodes() {
87
+ total_dead_nodes++;
88
+ }
89
+ //! Decrement the dead node counter in the purge queue.
90
+ inline void DecrementDeadNodes() {
91
+ total_dead_nodes--;
92
+ }
79
93
 
80
94
  protected:
81
95
  //! The lock for changing the memory limit
@@ -86,12 +100,33 @@ protected:
86
100
  atomic<idx_t> maximum_memory;
87
101
  //! Eviction queue
88
102
  unique_ptr<EvictionQueue> queue;
89
- //! Total number of insertions into the eviction queue. This guides the schedule for calling PurgeQueue.
90
- atomic<uint32_t> queue_insertions;
91
103
  //! Memory manager for concurrently used temporary memory, e.g., for physical operators
92
104
  unique_ptr<TemporaryMemoryManager> temporary_memory_manager;
93
105
  //! Memory usage per tag
94
106
  atomic<idx_t> memory_usage_per_tag[MEMORY_TAG_COUNT];
107
+
108
+ //! We trigger a purge of the eviction queue every INSERT_INTERVAL insertions
109
+ constexpr static idx_t INSERT_INTERVAL = 4096;
110
+ //! We multiply the base purge size by this value.
111
+ constexpr static idx_t PURGE_SIZE_MULTIPLIER = 2;
112
+ //! We multiply the purge size by this value to determine early-outs. This is the minimum queue size.
113
+ //! We never purge below this point.
114
+ constexpr static idx_t EARLY_OUT_MULTIPLIER = 4;
115
+ //! We multiply the approximate alive nodes by this value to test whether our total dead nodes
116
+ //! exceed their allowed ratio. Must be greater than 1.
117
+ constexpr static idx_t ALIVE_NODE_MULTIPLIER = 4;
118
+
119
+ //! Total number of insertions into the eviction queue. This guides the schedule for calling PurgeQueue.
120
+ atomic<idx_t> evict_queue_insertions;
121
+ //! Total dead nodes in the eviction queue. There are two scenarios in which a node dies: (1) we destroy its block
122
+ //! handle, or (2) we insert a newer version into the eviction queue.
123
+ atomic<idx_t> total_dead_nodes;
124
+ //! Locked, if a queue purge is currently active or we're trying to forcefully evict a node.
125
+ //! Only lets a single thread enter the purge phase.
126
+ mutex purge_lock;
127
+
128
+ //! A pre-allocated vector of eviction nodes. We reuse this to keep the allocation overhead of purges small.
129
+ vector<BufferEvictionNode> purge_nodes;
95
130
  };
96
131
 
97
132
  } // namespace duckdb
@@ -306,7 +306,7 @@ struct AlpCompression {
306
306
  state.encoded_integers[i] = encoded_value;
307
307
  //! We detect exceptions using a predicated comparison
308
308
  auto is_exception = (decoded_value != actual_value);
309
- state.exceptions_positions[exceptions_idx] = i;
309
+ state.exceptions_positions[exceptions_idx] = UnsafeNumericCast<uint16_t>(i);
310
310
  exceptions_idx += is_exception;
311
311
  }
312
312
 
@@ -115,7 +115,7 @@ bool AlpAnalyze(AnalyzeState &state, Vector &input, idx_t count) {
115
115
  T value = data[idx];
116
116
  //! We resolve null values with a predicated comparison
117
117
  bool is_null = !vdata.validity.RowIsValid(idx);
118
- current_vector_null_positions[nulls_idx] = i;
118
+ current_vector_null_positions[nulls_idx] = UnsafeNumericCast<uint16_t>(i);
119
119
  nulls_idx += is_null;
120
120
  current_vector_values[i] = value;
121
121
  }
@@ -164,6 +164,10 @@ idx_t AlpFinalAnalyze(AnalyzeState &state) {
164
164
  // Flush last unfinished segment
165
165
  analyze_state.FlushSegment();
166
166
 
167
+ if (compressed_values == 0) {
168
+ return DConstants::INVALID_INDEX;
169
+ }
170
+
167
171
  // We estimate the size by taking into account the portion of the values we took
168
172
  const auto factor_of_sampling = analyze_state.total_values_count / compressed_values;
169
173
  const auto final_analyze_size = analyze_state.TotalUsedBytes() * factor_of_sampling;
@@ -141,7 +141,7 @@ public:
141
141
  Store<uint64_t>(state.frame_of_reference, data_ptr);
142
142
  data_ptr += AlpConstants::FOR_SIZE;
143
143
 
144
- Store<uint8_t>(state.bit_width, data_ptr);
144
+ Store<uint8_t>(UnsafeNumericCast<uint8_t>(state.bit_width), data_ptr);
145
145
  data_ptr += AlpConstants::BIT_WIDTH_SIZE;
146
146
 
147
147
  memcpy((void *)data_ptr, (void *)state.values_encoded, state.bp_size);
@@ -166,7 +166,7 @@ public:
166
166
  // Write pointer to the vector data (metadata)
167
167
  metadata_ptr -= sizeof(uint32_t);
168
168
  Store<uint32_t>(next_vector_byte_index_start, metadata_ptr);
169
- next_vector_byte_index_start = UsedSpace();
169
+ next_vector_byte_index_start = NumericCast<uint32_t>(UsedSpace());
170
170
 
171
171
  vectors_flushed++;
172
172
  vector_idx = 0;
@@ -206,7 +206,7 @@ public:
206
206
  }
207
207
 
208
208
  // Store the offset to the end of metadata (to be used as a backwards pointer in decoding)
209
- Store<uint32_t>(total_segment_size, dataptr);
209
+ Store<uint32_t>(NumericCast<uint32_t>(total_segment_size), dataptr);
210
210
 
211
211
  handle.Destroy();
212
212
  checkpoint_state.FlushSegment(std::move(current_segment), total_segment_size);
@@ -244,7 +244,7 @@ public:
244
244
  T value = data[idx];
245
245
  bool is_null = !vdata.validity.RowIsValid(idx);
246
246
  //! We resolve null values with a predicated comparison
247
- vector_null_positions[nulls_idx] = vector_idx + i;
247
+ vector_null_positions[nulls_idx] = UnsafeNumericCast<uint16_t>(vector_idx + i);
248
248
  nulls_idx += is_null;
249
249
  input_vector[vector_idx + i] = value;
250
250
  }
@@ -37,7 +37,8 @@ public:
37
37
  public:
38
38
  static AlpSamplingParameters GetSamplingParameters(idx_t current_vector_n_values) {
39
39
 
40
- uint32_t n_lookup_values = MinValue(current_vector_n_values, (idx_t)AlpConstants::ALP_VECTOR_SIZE);
40
+ auto n_lookup_values =
41
+ NumericCast<uint32_t>(MinValue(current_vector_n_values, (idx_t)AlpConstants::ALP_VECTOR_SIZE));
41
42
  //! We sample equidistant values within a vector; to do this we jump a fixed number of values
42
43
  uint32_t n_sampled_increments =
43
44
  MaxValue(1, (int32_t)std::ceil((double)n_lookup_values / AlpConstants::SAMPLES_PER_VECTOR));
@@ -16,6 +16,7 @@
16
16
  #include "duckdb/common/pair.hpp"
17
17
  #include "duckdb/common/unordered_map.hpp"
18
18
  #include "duckdb/common/limits.hpp"
19
+ #include "duckdb/common/numeric_utils.hpp"
19
20
 
20
21
  #include <cmath>
21
22
 
@@ -109,7 +110,8 @@ struct AlpRDCompression {
109
110
  if (PERSIST_DICT) {
110
111
  for (idx_t dict_idx = 0; dict_idx < actual_dictionary_size; dict_idx++) {
111
112
  //! The dict keys are mapped to the left part themselves
112
- state.left_parts_dict[dict_idx] = left_parts_sorted_repetitions[dict_idx].hash;
113
+ state.left_parts_dict[dict_idx] =
114
+ UnsafeNumericCast<uint16_t>(left_parts_sorted_repetitions[dict_idx].hash);
113
115
  state.left_parts_dict_map.insert({state.left_parts_dict[dict_idx], dict_idx});
114
116
  }
115
117
  //! Pararelly we store a map of the dictionary to quickly resolve exceptions during encoding
@@ -118,24 +120,24 @@ struct AlpRDCompression {
118
120
  }
119
121
  state.left_bit_width = left_bit_width;
120
122
  state.right_bit_width = right_bit_width;
121
- state.actual_dictionary_size = actual_dictionary_size;
123
+ state.actual_dictionary_size = UnsafeNumericCast<uint8_t>(actual_dictionary_size);
122
124
 
123
125
  D_ASSERT(state.left_bit_width > 0 && state.right_bit_width > 0 &&
124
126
  state.left_bit_width <= AlpRDConstants::MAX_DICTIONARY_BIT_WIDTH &&
125
127
  state.actual_dictionary_size <= AlpRDConstants::MAX_DICTIONARY_SIZE);
126
128
  }
127
129
 
128
- double estimated_size =
129
- EstimateCompressionSize(right_bit_width, left_bit_width, exceptions_count, values.size());
130
+ double estimated_size = EstimateCompressionSize(right_bit_width, left_bit_width,
131
+ UnsafeNumericCast<uint16_t>(exceptions_count), values.size());
130
132
  return estimated_size;
131
133
  }
132
134
 
133
135
  static double FindBestDictionary(const vector<EXACT_TYPE> &values, State &state) {
134
- uint8_t right_bit_width;
136
+ uint8_t right_bit_width = 0;
135
137
  double best_dict_size = NumericLimits<int32_t>::Maximum();
136
138
  //! Finding the best position to CUT the values
137
139
  for (idx_t i = 1; i <= AlpRDConstants::CUTTING_LIMIT; i++) {
138
- uint8_t candidate_right_bit_width = EXACT_TYPE_BITSIZE - i;
140
+ uint8_t candidate_right_bit_width = UnsafeNumericCast<uint8_t>(EXACT_TYPE_BITSIZE - i);
139
141
  double estimated_size = BuildLeftPartsDictionary<false>(values, candidate_right_bit_width, state);
140
142
  if (estimated_size <= best_dict_size) {
141
143
  right_bit_width = candidate_right_bit_width;
@@ -156,7 +158,7 @@ struct AlpRDCompression {
156
158
  for (idx_t i = 0; i < n_values; i++) {
157
159
  EXACT_TYPE tmp = input_vector[i];
158
160
  right_parts[i] = tmp & ((1ULL << state.right_bit_width) - 1);
159
- left_parts[i] = (tmp >> state.right_bit_width);
161
+ left_parts[i] = UnsafeNumericCast<uint16_t>(tmp >> state.right_bit_width);
160
162
  }
161
163
 
162
164
  // Dictionary encoding for left parts
@@ -174,7 +176,7 @@ struct AlpRDCompression {
174
176
  //! Left parts not found in the dictionary are stored as exceptions
175
177
  if (dictionary_index >= state.actual_dictionary_size) {
176
178
  state.exceptions[state.exceptions_count] = dictionary_key;
177
- state.exceptions_positions[state.exceptions_count] = i;
179
+ state.exceptions_positions[state.exceptions_count] = UnsafeNumericCast<uint16_t>(i);
178
180
  state.exceptions_count++;
179
181
  }
180
182
  }
@@ -14,6 +14,7 @@
14
14
  #include "duckdb/storage/compression/alprd/alprd_constants.hpp"
15
15
  #include "duckdb/storage/compression/alp/alp_utils.hpp"
16
16
  #include "duckdb/storage/compression/alp/alp_constants.hpp"
17
+ #include "duckdb/common/numeric_utils.hpp"
17
18
 
18
19
  #include <cmath>
19
20
 
@@ -82,7 +83,7 @@ bool AlpRDAnalyze(AnalyzeState &state, Vector &input, idx_t count) {
82
83
  current_vector_sample[sample_idx] = value;
83
84
  //! We resolve null values with a predicated comparison
84
85
  bool is_null = !vdata.validity.RowIsValid(idx);
85
- current_vector_null_positions[nulls_idx] = sample_idx;
86
+ current_vector_null_positions[nulls_idx] = UnsafeNumericCast<uint16_t>(sample_idx);
86
87
  nulls_idx += is_null;
87
88
  sample_idx++;
88
89
  }
@@ -108,6 +109,9 @@ bool AlpRDAnalyze(AnalyzeState &state, Vector &input, idx_t count) {
108
109
  template <class T>
109
110
  idx_t AlpRDFinalAnalyze(AnalyzeState &state) {
110
111
  auto &analyze_state = (AlpRDAnalyzeState<T> &)state;
112
+ if (analyze_state.total_values_count == 0) {
113
+ return DConstants::INVALID_INDEX;
114
+ }
111
115
  double factor_of_sampling = 1 / ((double)analyze_state.rowgroup_sample.size() / analyze_state.total_values_count);
112
116
 
113
117
  // Finding which is the best dictionary for the sample
@@ -168,7 +168,7 @@ public:
168
168
  // Write pointer to the vector data (metadata)
169
169
  metadata_ptr -= AlpRDConstants::METADATA_POINTER_SIZE;
170
170
  Store<uint32_t>(next_vector_byte_index_start, metadata_ptr);
171
- next_vector_byte_index_start = UsedSpace();
171
+ next_vector_byte_index_start = NumericCast<uint32_t>(UsedSpace());
172
172
 
173
173
  vectors_flushed++;
174
174
  vector_idx = 0;
@@ -208,7 +208,7 @@ public:
208
208
  }
209
209
 
210
210
  // Store the offset to the end of metadata (to be used as a backwards pointer in decoding)
211
- Store<uint32_t>(total_segment_size, dataptr);
211
+ Store<uint32_t>(NumericCast<uint32_t>(total_segment_size), dataptr);
212
212
  dataptr += AlpRDConstants::METADATA_POINTER_SIZE;
213
213
 
214
214
  // Store the right bw for the segment
@@ -261,7 +261,7 @@ public:
261
261
  EXACT_TYPE value = Load<EXACT_TYPE>(const_data_ptr_cast(&data[idx]));
262
262
  bool is_null = !vdata.validity.RowIsValid(idx);
263
263
  //! We resolve null values with a predicated comparison
264
- vector_null_positions[nulls_idx] = vector_idx + i;
264
+ vector_null_positions[nulls_idx] = UnsafeNumericCast<uint16_t>(vector_idx + i);
265
265
  nulls_idx += is_null;
266
266
  input_vector[vector_idx + i] = value;
267
267
  }
@@ -9,6 +9,7 @@
9
9
  #pragma once
10
10
 
11
11
  #include "duckdb.h"
12
+ #include "duckdb/common/numeric_utils.hpp"
12
13
 
13
14
  namespace duckdb {
14
15
 
@@ -71,7 +72,7 @@ public:
71
72
  }
72
73
 
73
74
  inline uint8_t InnerReadByte(const uint8_t &offset) {
74
- uint8_t result = input[ByteIndex() + offset] << BitIndex() |
75
+ uint8_t result = static_cast<uint8_t>(input[ByteIndex() + offset] << BitIndex()) |
75
76
  ((input[ByteIndex() + offset + 1] & REMAINDER_MASKS[8 + BitIndex()]) >> (8 - BitIndex()));
76
77
  return result;
77
78
  }
@@ -114,30 +115,30 @@ public:
114
115
  inline T ReadBytes(const uint8_t &remainder) {
115
116
  T result = 0;
116
117
  if (BYTES > 0) {
117
- result = result << 8 | InnerReadByte(0);
118
+ result = UnsafeNumericCast<T>(result << 8 | InnerReadByte(0));
118
119
  }
119
120
  if (BYTES > 1) {
120
- result = result << 8 | InnerReadByte(1);
121
+ result = UnsafeNumericCast<T>(result << 8 | InnerReadByte(1));
121
122
  }
122
123
  if (BYTES > 2) {
123
- result = result << 8 | InnerReadByte(2);
124
+ result = UnsafeNumericCast<T>(result << 8 | InnerReadByte(2));
124
125
  }
125
126
  if (BYTES > 3) {
126
- result = result << 8 | InnerReadByte(3);
127
+ result = UnsafeNumericCast<T>(result << 8 | InnerReadByte(3));
127
128
  }
128
129
  if (BYTES > 4) {
129
- result = result << 8 | InnerReadByte(4);
130
+ result = UnsafeNumericCast<T>(result << 8 | InnerReadByte(4));
130
131
  }
131
132
  if (BYTES > 5) {
132
- result = result << 8 | InnerReadByte(5);
133
+ result = UnsafeNumericCast<T>(result << 8 | InnerReadByte(5));
133
134
  }
134
135
  if (BYTES > 6) {
135
- result = result << 8 | InnerReadByte(6);
136
+ result = UnsafeNumericCast<T>(result << 8 | InnerReadByte(6));
136
137
  }
137
138
  if (BYTES > 7) {
138
- result = result << 8 | InnerReadByte(7);
139
+ result = UnsafeNumericCast<T>(result << 8 | InnerReadByte(7));
139
140
  }
140
- result = result << remainder | InnerRead(remainder, BYTES);
141
+ result = UnsafeNumericCast<T>(result << remainder | InnerRead(remainder, BYTES));
141
142
  index += (BYTES << 3) + remainder;
142
143
  return result;
143
144
  }
@@ -8,12 +8,14 @@
8
8
 
9
9
  #pragma once
10
10
 
11
+ #include "duckdb/common/numeric_utils.hpp"
12
+
11
13
  namespace duckdb {
12
14
 
13
15
  template <class R>
14
16
  struct BitUtils {
15
17
  static constexpr R Mask(unsigned int const bits) {
16
- return (((uint64_t)(bits < (sizeof(R) * 8))) << (bits & ((sizeof(R) * 8) - 1))) - 1U;
18
+ return UnsafeNumericCast<R>((((uint64_t)(bits < (sizeof(R) * 8))) << (bits & ((sizeof(R) * 8) - 1))) - 1U);
17
19
  }
18
20
  };
19
21
 
@@ -257,7 +257,7 @@ public:
257
257
  case ChimpConstants::Flags::VALUE_IDENTICAL: {
258
258
  //! Value is identical to previous value
259
259
  auto index = state.input.template ReadValue<uint8_t, 7>();
260
- result = state.ring_buffer.Value(index);
260
+ result = UnsafeNumericCast<CHIMP_TYPE>(state.ring_buffer.Value(index));
261
261
  break;
262
262
  }
263
263
  case ChimpConstants::Flags::TRAILING_EXCEEDS_THRESHOLD: {
@@ -10,6 +10,7 @@
10
10
 
11
11
  #include "duckdb.h"
12
12
  #include "duckdb/common/helper.hpp"
13
+ #include "duckdb/common/numeric_utils.hpp"
13
14
  #ifdef DEBUG
14
15
  #include "duckdb/common/vector.hpp"
15
16
  #include "duckdb/common/assert.hpp"
@@ -91,7 +92,8 @@ public:
91
92
  public:
92
93
  #ifdef DEBUG
93
94
  uint8_t ExtractValue(uint32_t value, uint8_t index) {
94
- return (value & LeadingZeroBufferConstants::MASKS[index]) >> LeadingZeroBufferConstants::SHIFTS[index];
95
+ return NumericCast<uint8_t>((value & LeadingZeroBufferConstants::MASKS[index]) >>
96
+ LeadingZeroBufferConstants::SHIFTS[index]);
95
97
  }
96
98
  #endif
97
99
 
@@ -140,8 +142,8 @@ public:
140
142
  const auto buffer_idx = BlockIndex();
141
143
  auto const temp = Load<uint32_t>(buffer + buffer_idx);
142
144
 
143
- const uint8_t result =
144
- (temp & LeadingZeroBufferConstants::MASKS[counter & 7]) >> LeadingZeroBufferConstants::SHIFTS[counter & 7];
145
+ const uint8_t result = UnsafeNumericCast<uint8_t>((temp & LeadingZeroBufferConstants::MASKS[counter & 7]) >>
146
+ LeadingZeroBufferConstants::SHIFTS[counter & 7]);
145
147
  counter++;
146
148
  return result;
147
149
  }
@@ -12,6 +12,7 @@
12
12
  #include "duckdb/storage/compression/chimp/algorithm/chimp_utils.hpp"
13
13
 
14
14
  #include "duckdb/common/limits.hpp"
15
+ #include "duckdb/common/numeric_utils.hpp"
15
16
  #include "duckdb/common/types/null_value.hpp"
16
17
  #include "duckdb/function/compression/compression.hpp"
17
18
  #include "duckdb/function/compression_function.hpp"
@@ -210,7 +211,7 @@ public:
210
211
  auto group_size = MinValue<idx_t>(segment_count - total_value_count, ChimpPrimitives::CHIMP_SEQUENCE_SIZE);
211
212
  // Reduce by one, because the first value of a group does not have a flag
212
213
  auto flag_count = group_size - 1;
213
- uint16_t flag_byte_count = (AlignValue<uint16_t, 4>(flag_count) / 4);
214
+ uint16_t flag_byte_count = AlignValue<uint16_t, 4>(UnsafeNumericCast<uint16_t>(flag_count)) / 4;
214
215
 
215
216
  // Load the flags
216
217
  metadata_ptr -= flag_byte_count;
@@ -29,7 +29,7 @@ struct ColumnSegmentState {
29
29
 
30
30
  template <class TARGET>
31
31
  TARGET &Cast() {
32
- D_ASSERT(dynamic_cast<TARGET *>(this));
32
+ DynamicCastCheck<TARGET>(this);
33
33
  return reinterpret_cast<TARGET &>(*this);
34
34
  }
35
35
  template <class TARGET>
@@ -128,9 +128,11 @@ public:
128
128
  //! Fetches an append lock
129
129
  void AppendLock(TableAppendState &state);
130
130
  //! Begin appending structs to this table, obtaining necessary locks, etc
131
- void InitializeAppend(DuckTransaction &transaction, TableAppendState &state, idx_t append_count);
131
+ void InitializeAppend(DuckTransaction &transaction, TableAppendState &state);
132
132
  //! Append a chunk to the table using the AppendState obtained from InitializeAppend
133
133
  void Append(DataChunk &chunk, TableAppendState &state);
134
+ //! Finalize an append
135
+ void FinalizeAppend(DuckTransaction &transaction, TableAppendState &state);
134
136
  //! Commit the append
135
137
  void CommitAppend(transaction_t commit_id, idx_t row_start, idx_t count);
136
138
  //! Write a segment of the table to the WAL
@@ -154,7 +154,7 @@ private:
154
154
  public:
155
155
  template <class TARGET>
156
156
  TARGET &Cast() {
157
- D_ASSERT(dynamic_cast<TARGET *>(this));
157
+ DynamicCastCheck<TARGET>(this);
158
158
  return reinterpret_cast<TARGET &>(*this);
159
159
  }
160
160
 
@@ -69,7 +69,7 @@ public:
69
69
  public:
70
70
  template <class TARGET>
71
71
  TARGET &Cast() {
72
- D_ASSERT(dynamic_cast<TARGET *>(this));
72
+ DynamicCastCheck<TARGET>(this);
73
73
  return reinterpret_cast<TARGET &>(*this);
74
74
  }
75
75
  };
@@ -40,6 +40,9 @@ public:
40
40
 
41
41
  public:
42
42
  static unique_ptr<StandardBufferManager> CreateBufferManager(DatabaseInstance &db, string temp_directory);
43
+ static unique_ptr<FileBuffer> ReadTemporaryBufferInternal(BufferManager &buffer_manager, FileHandle &handle,
44
+ idx_t position, idx_t size,
45
+ unique_ptr<FileBuffer> reusable_buffer);
43
46
  //! Registers an in-memory buffer that cannot be unloaded until it is destroyed
44
47
  //! This buffer can be small (smaller than BLOCK_SIZE)
45
48
  //! Unpin and pin are nops on this block of memory
@@ -91,7 +91,7 @@ protected:
91
91
  public:
92
92
  template <class TARGET>
93
93
  TARGET &Cast() {
94
- D_ASSERT(dynamic_cast<TARGET *>(this));
94
+ DynamicCastCheck<TARGET>(this);
95
95
  return reinterpret_cast<TARGET &>(*this);
96
96
  }
97
97
  template <class TARGET>
@@ -67,8 +67,6 @@ struct TableAppendState {
67
67
  RowGroup *start_row_group;
68
68
  //! The transaction data
69
69
  TransactionData transaction;
70
- //! The remaining append count, only if the append count is known beforehand
71
- idx_t remaining;
72
70
  };
73
71
 
74
72
  struct LocalAppendState {
@@ -46,7 +46,7 @@ public:
46
46
  public:
47
47
  template <class TARGET>
48
48
  TARGET &Cast() {
49
- D_ASSERT(dynamic_cast<TARGET *>(this));
49
+ DynamicCastCheck<TARGET>(this);
50
50
  return reinterpret_cast<TARGET &>(*this);
51
51
  }
52
52
  template <class TARGET>
@@ -68,7 +68,9 @@ public:
68
68
  DataTableInfo &GetTableInfo() const;
69
69
  virtual idx_t GetMaxEntry();
70
70
 
71
- void IncrementVersion();
71
+ idx_t GetAllocationSize() const {
72
+ return allocation_size;
73
+ }
72
74
 
73
75
  virtual void SetStart(idx_t new_start);
74
76
  //! The root type of the column
@@ -164,10 +166,10 @@ protected:
164
166
  mutex update_lock;
165
167
  //! The updates for this column segment
166
168
  unique_ptr<UpdateSegment> updates;
167
- //! The internal version of the column data
168
- idx_t version;
169
169
  //! The stats of the root segment
170
170
  unique_ptr<SegmentStatistics> stats;
171
+ //! Total transient allocation size
172
+ idx_t allocation_size;
171
173
  };
172
174
 
173
175
  } // namespace duckdb
@@ -68,8 +68,8 @@ public:
68
68
  //! Fetch a value of the specific row id and append it to the result
69
69
  void FetchRow(ColumnFetchState &state, row_t row_id, Vector &result, idx_t result_idx);
70
70
 
71
- static idx_t FilterSelection(SelectionVector &sel, Vector &result, const TableFilter &filter,
72
- idx_t &approved_tuple_count, ValidityMask &mask);
71
+ static idx_t FilterSelection(SelectionVector &sel, Vector &vector, UnifiedVectorFormat &vdata,
72
+ const TableFilter &filter, idx_t scan_count, idx_t &approved_tuple_count);
73
73
 
74
74
  //! Skip a scan forward to the row_index specified in the scan state
75
75
  void Skip(ColumnScanState &state);
@@ -139,6 +139,10 @@ public:
139
139
 
140
140
  void GetColumnSegmentInfo(idx_t row_group_index, vector<ColumnSegmentInfo> &result);
141
141
 
142
+ idx_t GetAllocationSize() const {
143
+ return allocation_size;
144
+ }
145
+
142
146
  void Verify();
143
147
 
144
148
  void NextVector(CollectionScanState &state);
@@ -172,6 +176,7 @@ private:
172
176
  unique_ptr<atomic<bool>[]> is_loaded;
173
177
  vector<MetaBlockPointer> deletes_pointers;
174
178
  atomic<bool> deletes_is_loaded;
179
+ idx_t allocation_size;
175
180
  };
176
181
 
177
182
  } // namespace duckdb