duckdb 0.10.1-dev9.0 → 0.10.1

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -244,12 +244,15 @@ void ColumnSegment::CommitDropSegment() {
244
244
  // Filter Selection
245
245
  //===--------------------------------------------------------------------===//
246
246
  template <class T, class OP, bool HAS_NULL>
247
- static idx_t TemplatedFilterSelection(T *vec, T predicate, SelectionVector &sel, idx_t approved_tuple_count,
248
- ValidityMask &mask, SelectionVector &result_sel) {
247
+ static idx_t TemplatedFilterSelection(UnifiedVectorFormat &vdata, T predicate, SelectionVector &sel,
248
+ idx_t approved_tuple_count, SelectionVector &result_sel) {
249
+ auto &mask = vdata.validity;
250
+ auto vec = UnifiedVectorFormat::GetData<T>(vdata);
249
251
  idx_t result_count = 0;
250
252
  for (idx_t i = 0; i < approved_tuple_count; i++) {
251
253
  auto idx = sel.get_index(i);
252
- if ((!HAS_NULL || mask.RowIsValid(idx)) && OP::Operation(vec[idx], predicate)) {
254
+ auto vector_idx = vdata.sel->get_index(idx);
255
+ if ((!HAS_NULL || mask.RowIsValid(vector_idx)) && OP::Operation(vec[vector_idx], predicate)) {
253
256
  result_sel.set_index(result_count++, idx);
254
257
  }
255
258
  }
@@ -257,68 +260,69 @@ static idx_t TemplatedFilterSelection(T *vec, T predicate, SelectionVector &sel,
257
260
  }
258
261
 
259
262
  template <class T>
260
- static void FilterSelectionSwitch(T *vec, T predicate, SelectionVector &sel, idx_t &approved_tuple_count,
261
- ExpressionType comparison_type, ValidityMask &mask) {
263
+ static void FilterSelectionSwitch(UnifiedVectorFormat &vdata, T predicate, SelectionVector &sel,
264
+ idx_t &approved_tuple_count, ExpressionType comparison_type) {
262
265
  SelectionVector new_sel(approved_tuple_count);
266
+ auto &mask = vdata.validity;
263
267
  // the inplace loops take the result as the last parameter
264
268
  switch (comparison_type) {
265
269
  case ExpressionType::COMPARE_EQUAL: {
266
270
  if (mask.AllValid()) {
267
271
  approved_tuple_count =
268
- TemplatedFilterSelection<T, Equals, false>(vec, predicate, sel, approved_tuple_count, mask, new_sel);
272
+ TemplatedFilterSelection<T, Equals, false>(vdata, predicate, sel, approved_tuple_count, new_sel);
269
273
  } else {
270
274
  approved_tuple_count =
271
- TemplatedFilterSelection<T, Equals, true>(vec, predicate, sel, approved_tuple_count, mask, new_sel);
275
+ TemplatedFilterSelection<T, Equals, true>(vdata, predicate, sel, approved_tuple_count, new_sel);
272
276
  }
273
277
  break;
274
278
  }
275
279
  case ExpressionType::COMPARE_NOTEQUAL: {
276
280
  if (mask.AllValid()) {
277
281
  approved_tuple_count =
278
- TemplatedFilterSelection<T, NotEquals, false>(vec, predicate, sel, approved_tuple_count, mask, new_sel);
282
+ TemplatedFilterSelection<T, NotEquals, false>(vdata, predicate, sel, approved_tuple_count, new_sel);
279
283
  } else {
280
284
  approved_tuple_count =
281
- TemplatedFilterSelection<T, NotEquals, true>(vec, predicate, sel, approved_tuple_count, mask, new_sel);
285
+ TemplatedFilterSelection<T, NotEquals, true>(vdata, predicate, sel, approved_tuple_count, new_sel);
282
286
  }
283
287
  break;
284
288
  }
285
289
  case ExpressionType::COMPARE_LESSTHAN: {
286
290
  if (mask.AllValid()) {
287
291
  approved_tuple_count =
288
- TemplatedFilterSelection<T, LessThan, false>(vec, predicate, sel, approved_tuple_count, mask, new_sel);
292
+ TemplatedFilterSelection<T, LessThan, false>(vdata, predicate, sel, approved_tuple_count, new_sel);
289
293
  } else {
290
294
  approved_tuple_count =
291
- TemplatedFilterSelection<T, LessThan, true>(vec, predicate, sel, approved_tuple_count, mask, new_sel);
295
+ TemplatedFilterSelection<T, LessThan, true>(vdata, predicate, sel, approved_tuple_count, new_sel);
292
296
  }
293
297
  break;
294
298
  }
295
299
  case ExpressionType::COMPARE_GREATERTHAN: {
296
300
  if (mask.AllValid()) {
297
- approved_tuple_count = TemplatedFilterSelection<T, GreaterThan, false>(vec, predicate, sel,
298
- approved_tuple_count, mask, new_sel);
301
+ approved_tuple_count =
302
+ TemplatedFilterSelection<T, GreaterThan, false>(vdata, predicate, sel, approved_tuple_count, new_sel);
299
303
  } else {
300
- approved_tuple_count = TemplatedFilterSelection<T, GreaterThan, true>(vec, predicate, sel,
301
- approved_tuple_count, mask, new_sel);
304
+ approved_tuple_count =
305
+ TemplatedFilterSelection<T, GreaterThan, true>(vdata, predicate, sel, approved_tuple_count, new_sel);
302
306
  }
303
307
  break;
304
308
  }
305
309
  case ExpressionType::COMPARE_LESSTHANOREQUALTO: {
306
310
  if (mask.AllValid()) {
307
- approved_tuple_count = TemplatedFilterSelection<T, LessThanEquals, false>(
308
- vec, predicate, sel, approved_tuple_count, mask, new_sel);
311
+ approved_tuple_count = TemplatedFilterSelection<T, LessThanEquals, false>(vdata, predicate, sel,
312
+ approved_tuple_count, new_sel);
309
313
  } else {
310
- approved_tuple_count = TemplatedFilterSelection<T, LessThanEquals, true>(
311
- vec, predicate, sel, approved_tuple_count, mask, new_sel);
314
+ approved_tuple_count =
315
+ TemplatedFilterSelection<T, LessThanEquals, true>(vdata, predicate, sel, approved_tuple_count, new_sel);
312
316
  }
313
317
  break;
314
318
  }
315
319
  case ExpressionType::COMPARE_GREATERTHANOREQUALTO: {
316
320
  if (mask.AllValid()) {
317
- approved_tuple_count = TemplatedFilterSelection<T, GreaterThanEquals, false>(
318
- vec, predicate, sel, approved_tuple_count, mask, new_sel);
321
+ approved_tuple_count = TemplatedFilterSelection<T, GreaterThanEquals, false>(vdata, predicate, sel,
322
+ approved_tuple_count, new_sel);
319
323
  } else {
320
- approved_tuple_count = TemplatedFilterSelection<T, GreaterThanEquals, true>(
321
- vec, predicate, sel, approved_tuple_count, mask, new_sel);
324
+ approved_tuple_count = TemplatedFilterSelection<T, GreaterThanEquals, true>(vdata, predicate, sel,
325
+ approved_tuple_count, new_sel);
322
326
  }
323
327
  break;
324
328
  }
@@ -329,7 +333,8 @@ static void FilterSelectionSwitch(T *vec, T predicate, SelectionVector &sel, idx
329
333
  }
330
334
 
331
335
  template <bool IS_NULL>
332
- static idx_t TemplatedNullSelection(SelectionVector &sel, idx_t &approved_tuple_count, ValidityMask &mask) {
336
+ static idx_t TemplatedNullSelection(UnifiedVectorFormat &vdata, SelectionVector &sel, idx_t &approved_tuple_count) {
337
+ auto &mask = vdata.validity;
333
338
  if (mask.AllValid()) {
334
339
  // no NULL values
335
340
  if (IS_NULL) {
@@ -343,7 +348,8 @@ static idx_t TemplatedNullSelection(SelectionVector &sel, idx_t &approved_tuple_
343
348
  idx_t result_count = 0;
344
349
  for (idx_t i = 0; i < approved_tuple_count; i++) {
345
350
  auto idx = sel.get_index(i);
346
- if (mask.RowIsValid(idx) != IS_NULL) {
351
+ auto vector_idx = vdata.sel->get_index(idx);
352
+ if (mask.RowIsValid(vector_idx) != IS_NULL) {
347
353
  result_sel.set_index(result_count++, idx);
348
354
  }
349
355
  }
@@ -353,8 +359,8 @@ static idx_t TemplatedNullSelection(SelectionVector &sel, idx_t &approved_tuple_
353
359
  }
354
360
  }
355
361
 
356
- idx_t ColumnSegment::FilterSelection(SelectionVector &sel, Vector &result, const TableFilter &filter,
357
- idx_t &approved_tuple_count, ValidityMask &mask) {
362
+ idx_t ColumnSegment::FilterSelection(SelectionVector &sel, Vector &vector, UnifiedVectorFormat &vdata,
363
+ const TableFilter &filter, idx_t scan_count, idx_t &approved_tuple_count) {
358
364
  switch (filter.filter_type) {
359
365
  case TableFilterType::CONJUNCTION_OR: {
360
366
  // similar to the CONJUNCTION_AND, but we need to take care of the SelectionVectors (OR all of them)
@@ -365,7 +371,7 @@ idx_t ColumnSegment::FilterSelection(SelectionVector &sel, Vector &result, const
365
371
  SelectionVector temp_sel;
366
372
  temp_sel.Initialize(sel);
367
373
  idx_t temp_tuple_count = approved_tuple_count;
368
- idx_t temp_count = FilterSelection(temp_sel, result, *child_filter, temp_tuple_count, mask);
374
+ idx_t temp_count = FilterSelection(temp_sel, vector, vdata, *child_filter, scan_count, temp_tuple_count);
369
375
  // tuples passed, move them into the actual result vector
370
376
  for (idx_t i = 0; i < temp_count; i++) {
371
377
  auto new_idx = temp_sel.get_index(i);
@@ -388,127 +394,111 @@ idx_t ColumnSegment::FilterSelection(SelectionVector &sel, Vector &result, const
388
394
  case TableFilterType::CONJUNCTION_AND: {
389
395
  auto &conjunction_and = filter.Cast<ConjunctionAndFilter>();
390
396
  for (auto &child_filter : conjunction_and.child_filters) {
391
- FilterSelection(sel, result, *child_filter, approved_tuple_count, mask);
397
+ FilterSelection(sel, vector, vdata, *child_filter, scan_count, approved_tuple_count);
392
398
  }
393
399
  return approved_tuple_count;
394
400
  }
395
401
  case TableFilterType::CONSTANT_COMPARISON: {
396
402
  auto &constant_filter = filter.Cast<ConstantFilter>();
397
403
  // the inplace loops take the result as the last parameter
398
- switch (result.GetType().InternalType()) {
404
+ switch (vector.GetType().InternalType()) {
399
405
  case PhysicalType::UINT8: {
400
- auto result_flat = FlatVector::GetData<uint8_t>(result);
401
406
  auto predicate = UTinyIntValue::Get(constant_filter.constant);
402
- FilterSelectionSwitch<uint8_t>(result_flat, predicate, sel, approved_tuple_count,
403
- constant_filter.comparison_type, mask);
407
+ FilterSelectionSwitch<uint8_t>(vdata, predicate, sel, approved_tuple_count,
408
+ constant_filter.comparison_type);
404
409
  break;
405
410
  }
406
411
  case PhysicalType::UINT16: {
407
- auto result_flat = FlatVector::GetData<uint16_t>(result);
408
412
  auto predicate = USmallIntValue::Get(constant_filter.constant);
409
- FilterSelectionSwitch<uint16_t>(result_flat, predicate, sel, approved_tuple_count,
410
- constant_filter.comparison_type, mask);
413
+ FilterSelectionSwitch<uint16_t>(vdata, predicate, sel, approved_tuple_count,
414
+ constant_filter.comparison_type);
411
415
  break;
412
416
  }
413
417
  case PhysicalType::UINT32: {
414
- auto result_flat = FlatVector::GetData<uint32_t>(result);
415
418
  auto predicate = UIntegerValue::Get(constant_filter.constant);
416
- FilterSelectionSwitch<uint32_t>(result_flat, predicate, sel, approved_tuple_count,
417
- constant_filter.comparison_type, mask);
419
+ FilterSelectionSwitch<uint32_t>(vdata, predicate, sel, approved_tuple_count,
420
+ constant_filter.comparison_type);
418
421
  break;
419
422
  }
420
423
  case PhysicalType::UINT64: {
421
- auto result_flat = FlatVector::GetData<uint64_t>(result);
422
424
  auto predicate = UBigIntValue::Get(constant_filter.constant);
423
- FilterSelectionSwitch<uint64_t>(result_flat, predicate, sel, approved_tuple_count,
424
- constant_filter.comparison_type, mask);
425
+ FilterSelectionSwitch<uint64_t>(vdata, predicate, sel, approved_tuple_count,
426
+ constant_filter.comparison_type);
425
427
  break;
426
428
  }
427
429
  case PhysicalType::INT8: {
428
- auto result_flat = FlatVector::GetData<int8_t>(result);
429
430
  auto predicate = TinyIntValue::Get(constant_filter.constant);
430
- FilterSelectionSwitch<int8_t>(result_flat, predicate, sel, approved_tuple_count,
431
- constant_filter.comparison_type, mask);
431
+ FilterSelectionSwitch<int8_t>(vdata, predicate, sel, approved_tuple_count, constant_filter.comparison_type);
432
432
  break;
433
433
  }
434
434
  case PhysicalType::INT16: {
435
- auto result_flat = FlatVector::GetData<int16_t>(result);
436
435
  auto predicate = SmallIntValue::Get(constant_filter.constant);
437
- FilterSelectionSwitch<int16_t>(result_flat, predicate, sel, approved_tuple_count,
438
- constant_filter.comparison_type, mask);
436
+ FilterSelectionSwitch<int16_t>(vdata, predicate, sel, approved_tuple_count,
437
+ constant_filter.comparison_type);
439
438
  break;
440
439
  }
441
440
  case PhysicalType::INT32: {
442
- auto result_flat = FlatVector::GetData<int32_t>(result);
443
441
  auto predicate = IntegerValue::Get(constant_filter.constant);
444
- FilterSelectionSwitch<int32_t>(result_flat, predicate, sel, approved_tuple_count,
445
- constant_filter.comparison_type, mask);
442
+ FilterSelectionSwitch<int32_t>(vdata, predicate, sel, approved_tuple_count,
443
+ constant_filter.comparison_type);
446
444
  break;
447
445
  }
448
446
  case PhysicalType::INT64: {
449
- auto result_flat = FlatVector::GetData<int64_t>(result);
450
447
  auto predicate = BigIntValue::Get(constant_filter.constant);
451
- FilterSelectionSwitch<int64_t>(result_flat, predicate, sel, approved_tuple_count,
452
- constant_filter.comparison_type, mask);
448
+ FilterSelectionSwitch<int64_t>(vdata, predicate, sel, approved_tuple_count,
449
+ constant_filter.comparison_type);
453
450
  break;
454
451
  }
455
452
  case PhysicalType::INT128: {
456
- auto result_flat = FlatVector::GetData<hugeint_t>(result);
457
453
  auto predicate = HugeIntValue::Get(constant_filter.constant);
458
- FilterSelectionSwitch<hugeint_t>(result_flat, predicate, sel, approved_tuple_count,
459
- constant_filter.comparison_type, mask);
454
+ FilterSelectionSwitch<hugeint_t>(vdata, predicate, sel, approved_tuple_count,
455
+ constant_filter.comparison_type);
460
456
  break;
461
457
  }
462
458
  case PhysicalType::UINT128: {
463
- auto result_flat = FlatVector::GetData<uhugeint_t>(result);
464
459
  auto predicate = UhugeIntValue::Get(constant_filter.constant);
465
- FilterSelectionSwitch<uhugeint_t>(result_flat, predicate, sel, approved_tuple_count,
466
- constant_filter.comparison_type, mask);
460
+ FilterSelectionSwitch<uhugeint_t>(vdata, predicate, sel, approved_tuple_count,
461
+ constant_filter.comparison_type);
467
462
  break;
468
463
  }
469
464
  case PhysicalType::FLOAT: {
470
- auto result_flat = FlatVector::GetData<float>(result);
471
465
  auto predicate = FloatValue::Get(constant_filter.constant);
472
- FilterSelectionSwitch<float>(result_flat, predicate, sel, approved_tuple_count,
473
- constant_filter.comparison_type, mask);
466
+ FilterSelectionSwitch<float>(vdata, predicate, sel, approved_tuple_count, constant_filter.comparison_type);
474
467
  break;
475
468
  }
476
469
  case PhysicalType::DOUBLE: {
477
- auto result_flat = FlatVector::GetData<double>(result);
478
470
  auto predicate = DoubleValue::Get(constant_filter.constant);
479
- FilterSelectionSwitch<double>(result_flat, predicate, sel, approved_tuple_count,
480
- constant_filter.comparison_type, mask);
471
+ FilterSelectionSwitch<double>(vdata, predicate, sel, approved_tuple_count, constant_filter.comparison_type);
481
472
  break;
482
473
  }
483
474
  case PhysicalType::VARCHAR: {
484
- auto result_flat = FlatVector::GetData<string_t>(result);
485
475
  auto predicate = string_t(StringValue::Get(constant_filter.constant));
486
- FilterSelectionSwitch<string_t>(result_flat, predicate, sel, approved_tuple_count,
487
- constant_filter.comparison_type, mask);
476
+ FilterSelectionSwitch<string_t>(vdata, predicate, sel, approved_tuple_count,
477
+ constant_filter.comparison_type);
488
478
  break;
489
479
  }
490
480
  case PhysicalType::BOOL: {
491
- auto result_flat = FlatVector::GetData<bool>(result);
492
481
  auto predicate = BooleanValue::Get(constant_filter.constant);
493
- FilterSelectionSwitch<bool>(result_flat, predicate, sel, approved_tuple_count,
494
- constant_filter.comparison_type, mask);
482
+ FilterSelectionSwitch<bool>(vdata, predicate, sel, approved_tuple_count, constant_filter.comparison_type);
495
483
  break;
496
484
  }
497
485
  default:
498
- throw InvalidTypeException(result.GetType(), "Invalid type for filter pushed down to table comparison");
486
+ throw InvalidTypeException(vector.GetType(), "Invalid type for filter pushed down to table comparison");
499
487
  }
500
488
  return approved_tuple_count;
501
489
  }
502
490
  case TableFilterType::IS_NULL:
503
- return TemplatedNullSelection<true>(sel, approved_tuple_count, mask);
491
+ return TemplatedNullSelection<true>(vdata, sel, approved_tuple_count);
504
492
  case TableFilterType::IS_NOT_NULL:
505
- return TemplatedNullSelection<false>(sel, approved_tuple_count, mask);
493
+ return TemplatedNullSelection<false>(vdata, sel, approved_tuple_count);
506
494
  case TableFilterType::STRUCT_EXTRACT: {
507
495
  auto &struct_filter = filter.Cast<StructFilter>();
508
496
  // Apply the filter on the child vector
509
- auto &child_vec = StructVector::GetEntries(result)[struct_filter.child_idx];
510
- auto &child_mask = FlatVector::Validity(*child_vec);
511
- return FilterSelection(sel, *child_vec, *struct_filter.child_filter, approved_tuple_count, child_mask);
497
+ auto &child_vec = StructVector::GetEntries(vector)[struct_filter.child_idx];
498
+ UnifiedVectorFormat child_data;
499
+ child_vec->ToUnifiedFormat(scan_count, child_data);
500
+ return FilterSelection(sel, *child_vec, child_data, *struct_filter.child_filter, scan_count,
501
+ approved_tuple_count);
512
502
  }
513
503
  default:
514
504
  throw InternalException("FIXME: unsupported type for filter selection");
@@ -303,6 +303,7 @@ void ListColumnData::FetchRow(TransactionData transaction, ColumnFetchState &sta
303
303
  }
304
304
 
305
305
  void ListColumnData::CommitDropColumn() {
306
+ ColumnData::CommitDropColumn();
306
307
  validity.CommitDropColumn();
307
308
  child_column->CommitDropColumn();
308
309
  }
@@ -26,12 +26,12 @@
26
26
  namespace duckdb {
27
27
 
28
28
  RowGroup::RowGroup(RowGroupCollection &collection, idx_t start, idx_t count)
29
- : SegmentBase<RowGroup>(start, count), collection(collection) {
29
+ : SegmentBase<RowGroup>(start, count), collection(collection), allocation_size(0) {
30
30
  Verify();
31
31
  }
32
32
 
33
33
  RowGroup::RowGroup(RowGroupCollection &collection, RowGroupPointer &&pointer)
34
- : SegmentBase<RowGroup>(pointer.row_start, pointer.tuple_count), collection(collection) {
34
+ : SegmentBase<RowGroup>(pointer.row_start, pointer.tuple_count), collection(collection), allocation_size(0) {
35
35
  // deserialize the columns
36
36
  if (pointer.data_pointers.size() != collection.GetTypes().size()) {
37
37
  throw IOException("Row group column count is unaligned with table column count. Corrupt file?");
@@ -184,12 +184,17 @@ bool RowGroup::InitializeScanWithOffset(CollectionScanState &state, idx_t vector
184
184
  state.vector_index = vector_offset;
185
185
  state.max_row_group_row =
186
186
  this->start > state.max_row ? 0 : MinValue<idx_t>(this->count, state.max_row - this->start);
187
+ auto row_number = start + vector_offset * STANDARD_VECTOR_SIZE;
188
+ if (state.max_row_group_row == 0) {
189
+ // exceeded row groups to scan
190
+ return false;
191
+ }
187
192
  D_ASSERT(state.column_scans);
188
193
  for (idx_t i = 0; i < column_ids.size(); i++) {
189
194
  const auto &column = column_ids[i];
190
195
  if (column != COLUMN_IDENTIFIER_ROW_ID) {
191
196
  auto &column_data = GetColumn(column);
192
- column_data.InitializeScanWithOffset(state.column_scans[i], start + vector_offset * STANDARD_VECTOR_SIZE);
197
+ column_data.InitializeScanWithOffset(state.column_scans[i], row_number);
193
198
  state.column_scans[i].scan_options = &state.GetOptions();
194
199
  } else {
195
200
  state.column_scans[i].current = nullptr;
@@ -660,16 +665,19 @@ void RowGroup::FetchRow(TransactionData transaction, ColumnFetchState &state, co
660
665
  row_t row_id, DataChunk &result, idx_t result_idx) {
661
666
  for (idx_t col_idx = 0; col_idx < column_ids.size(); col_idx++) {
662
667
  auto column = column_ids[col_idx];
668
+ auto &result_vector = result.data[col_idx];
669
+ D_ASSERT(result_vector.GetVectorType() == VectorType::FLAT_VECTOR);
670
+ D_ASSERT(!FlatVector::IsNull(result_vector, result_idx));
663
671
  if (column == COLUMN_IDENTIFIER_ROW_ID) {
664
672
  // row id column: fill in the row ids
665
- D_ASSERT(result.data[col_idx].GetType().InternalType() == PhysicalType::INT64);
666
- result.data[col_idx].SetVectorType(VectorType::FLAT_VECTOR);
667
- auto data = FlatVector::GetData<row_t>(result.data[col_idx]);
673
+ D_ASSERT(result_vector.GetType().InternalType() == PhysicalType::INT64);
674
+ result_vector.SetVectorType(VectorType::FLAT_VECTOR);
675
+ auto data = FlatVector::GetData<row_t>(result_vector);
668
676
  data[result_idx] = row_id;
669
677
  } else {
670
678
  // regular column: fetch data from the base column
671
679
  auto &col_data = GetColumn(column);
672
- col_data.FetchRow(transaction, state, row_id, result.data[col_idx], result_idx);
680
+ col_data.FetchRow(transaction, state, row_id, result_vector, result_idx);
673
681
  }
674
682
  }
675
683
  }
@@ -717,7 +725,9 @@ void RowGroup::Append(RowGroupAppendState &state, DataChunk &chunk, idx_t append
717
725
  D_ASSERT(chunk.ColumnCount() == GetColumnCount());
718
726
  for (idx_t i = 0; i < GetColumnCount(); i++) {
719
727
  auto &col_data = GetColumn(i);
728
+ auto prev_allocation_size = col_data.GetAllocationSize();
720
729
  col_data.Append(state.states[i], chunk.data[i], append_count);
730
+ allocation_size += col_data.GetAllocationSize() - prev_allocation_size;
721
731
  }
722
732
  state.offset_in_row_group += append_count;
723
733
  }
@@ -54,7 +54,7 @@ unique_ptr<RowGroup> RowGroupSegmentTree::LoadSegment() {
54
54
  RowGroupCollection::RowGroupCollection(shared_ptr<DataTableInfo> info_p, BlockManager &block_manager,
55
55
  vector<LogicalType> types_p, idx_t row_start_p, idx_t total_rows_p)
56
56
  : block_manager(block_manager), total_rows(total_rows_p), info(std::move(info_p)), types(std::move(types_p)),
57
- row_start(row_start_p) {
57
+ row_start(row_start_p), allocation_size(0) {
58
58
  row_groups = make_shared<RowGroupSegmentTree>(*this);
59
59
  }
60
60
 
@@ -217,6 +217,8 @@ bool RowGroupCollection::NextParallelScan(ClientContext &context, ParallelCollec
217
217
  }
218
218
  return true;
219
219
  }
220
+ lock_guard<mutex> l(state.lock);
221
+ scan_state.batch_index = state.batch_index;
220
222
  return false;
221
223
  }
222
224
 
@@ -288,11 +290,10 @@ void RowGroupCollection::Fetch(TransactionData transaction, DataChunk &result, c
288
290
  // Append
289
291
  //===--------------------------------------------------------------------===//
290
292
  TableAppendState::TableAppendState()
291
- : row_group_append_state(*this), total_append_count(0), start_row_group(nullptr), transaction(0, 0), remaining(0) {
293
+ : row_group_append_state(*this), total_append_count(0), start_row_group(nullptr), transaction(0, 0) {
292
294
  }
293
295
 
294
296
  TableAppendState::~TableAppendState() {
295
- D_ASSERT(Exception::UncaughtException() || remaining == 0);
296
297
  }
297
298
 
298
299
  bool RowGroupCollection::IsEmpty() const {
@@ -304,7 +305,7 @@ bool RowGroupCollection::IsEmpty(SegmentLock &l) const {
304
305
  return row_groups->IsEmpty(l);
305
306
  }
306
307
 
307
- void RowGroupCollection::InitializeAppend(TransactionData transaction, TableAppendState &state, idx_t append_count) {
308
+ void RowGroupCollection::InitializeAppend(TransactionData transaction, TableAppendState &state) {
308
309
  state.row_start = total_rows;
309
310
  state.current_row = state.row_start;
310
311
  state.total_append_count = 0;
@@ -318,17 +319,12 @@ void RowGroupCollection::InitializeAppend(TransactionData transaction, TableAppe
318
319
  state.start_row_group = row_groups->GetLastSegment(l);
319
320
  D_ASSERT(this->row_start + total_rows == state.start_row_group->start + state.start_row_group->count);
320
321
  state.start_row_group->InitializeAppend(state.row_group_append_state);
321
- state.remaining = append_count;
322
322
  state.transaction = transaction;
323
- if (state.remaining > 0) {
324
- state.start_row_group->AppendVersionInfo(transaction, state.remaining);
325
- total_rows += state.remaining;
326
- }
327
323
  }
328
324
 
329
325
  void RowGroupCollection::InitializeAppend(TableAppendState &state) {
330
326
  TransactionData tdata(0, 0);
331
- InitializeAppend(tdata, state, 0);
327
+ InitializeAppend(tdata, state);
332
328
  }
333
329
 
334
330
  bool RowGroupCollection::Append(DataChunk &chunk, TableAppendState &state) {
@@ -336,16 +332,18 @@ bool RowGroupCollection::Append(DataChunk &chunk, TableAppendState &state) {
336
332
  chunk.Verify();
337
333
 
338
334
  bool new_row_group = false;
339
- idx_t append_count = chunk.size();
335
+ idx_t total_append_count = chunk.size();
340
336
  idx_t remaining = chunk.size();
341
- state.total_append_count += append_count;
337
+ state.total_append_count += total_append_count;
342
338
  while (true) {
343
339
  auto current_row_group = state.row_group_append_state.row_group;
344
340
  // check how much we can fit into the current row_group
345
341
  idx_t append_count =
346
342
  MinValue<idx_t>(remaining, Storage::ROW_GROUP_SIZE - state.row_group_append_state.offset_in_row_group);
347
343
  if (append_count > 0) {
344
+ auto previous_allocation_size = current_row_group->GetAllocationSize();
348
345
  current_row_group->Append(state.row_group_append_state, chunk, append_count);
346
+ allocation_size += current_row_group->GetAllocationSize() - previous_allocation_size;
349
347
  // merge the stats
350
348
  auto stats_lock = stats.GetLock();
351
349
  for (idx_t i = 0; i < types.size(); i++) {
@@ -353,9 +351,6 @@ bool RowGroupCollection::Append(DataChunk &chunk, TableAppendState &state) {
353
351
  }
354
352
  }
355
353
  remaining -= append_count;
356
- if (state.remaining > 0) {
357
- state.remaining -= append_count;
358
- }
359
354
  if (remaining > 0) {
360
355
  // we expect max 1 iteration of this loop (i.e. a single chunk should never overflow more than one
361
356
  // row_group)
@@ -373,15 +368,12 @@ bool RowGroupCollection::Append(DataChunk &chunk, TableAppendState &state) {
373
368
  // set up the append state for this row_group
374
369
  auto last_row_group = row_groups->GetLastSegment(l);
375
370
  last_row_group->InitializeAppend(state.row_group_append_state);
376
- if (state.remaining > 0) {
377
- last_row_group->AppendVersionInfo(state.transaction, state.remaining);
378
- }
379
371
  continue;
380
372
  } else {
381
373
  break;
382
374
  }
383
375
  }
384
- state.current_row += append_count;
376
+ state.current_row += row_t(total_append_count);
385
377
  auto stats_lock = stats.GetLock();
386
378
  for (idx_t col_idx = 0; col_idx < types.size(); col_idx++) {
387
379
  stats.GetStats(col_idx).UpdateDistinctStatistics(chunk.data[col_idx], chunk.size());
@@ -427,14 +419,20 @@ void RowGroupCollection::CommitAppend(transaction_t commit_id, idx_t row_start,
427
419
  }
428
420
 
429
421
  void RowGroupCollection::RevertAppendInternal(idx_t start_row) {
430
- if (total_rows <= start_row) {
431
- return;
432
- }
433
422
  total_rows = start_row;
434
423
 
435
424
  auto l = row_groups->Lock();
436
- // find the segment index that the current row belongs to
437
- idx_t segment_index = row_groups->GetSegmentIndex(l, start_row);
425
+ idx_t segment_count = row_groups->GetSegmentCount(l);
426
+ if (segment_count == 0) {
427
+ // we have no segments to revert
428
+ return;
429
+ }
430
+ idx_t segment_index;
431
+ // find the segment index that the start row belongs to
432
+ if (!row_groups->TryGetSegmentIndex(l, start_row, segment_index)) {
433
+ // revert from the last segment
434
+ segment_index = segment_count - 1;
435
+ }
438
436
  auto &segment = *row_groups->GetSegmentByIndex(l, segment_index);
439
437
 
440
438
  // remove any segments AFTER this segment: they should be deleted entirely
@@ -776,11 +774,14 @@ public:
776
774
  scan_state.Initialize(column_ids);
777
775
  scan_state.table_state.Initialize(types);
778
776
  scan_state.table_state.max_row = idx_t(-1);
779
- idx_t next_idx = segment_idx + merge_count;
780
- for (idx_t c_idx = segment_idx; c_idx < next_idx; c_idx++) {
777
+ idx_t merged_groups = 0;
778
+ idx_t total_row_groups = vacuum_state.row_group_counts.size();
779
+ for (idx_t c_idx = segment_idx; merged_groups < merge_count && c_idx < total_row_groups; c_idx++) {
781
780
  if (vacuum_state.row_group_counts[c_idx] == 0) {
782
781
  continue;
783
782
  }
783
+ merged_groups++;
784
+
784
785
  auto &current_row_group = *checkpoint_state.segments[c_idx].node;
785
786
 
786
787
  current_row_group.InitializeScan(scan_state.table_state);
@@ -920,7 +921,7 @@ bool RowGroupCollection::ScheduleVacuumTasks(CollectionCheckpointState &checkpoi
920
921
  merge_rows, state.row_start);
921
922
  checkpoint_state.ScheduleTask(std::move(vacuum_task));
922
923
  // skip vacuuming by the row groups we have merged
923
- state.next_vacuum_idx = segment_idx + merge_count;
924
+ state.next_vacuum_idx = next_idx;
924
925
  state.row_start += merge_rows;
925
926
  return true;
926
927
  }
@@ -0,0 +1,17 @@
1
+ // Unity Build generated by CMake
2
+ #include </Users/carlo/duckdb/src/storage/table/chunk_info.cpp>
3
+ #include </Users/carlo/duckdb/src/storage/table/column_checkpoint_state.cpp>
4
+ #include </Users/carlo/duckdb/src/storage/table/column_data_checkpointer.cpp>
5
+ #include </Users/carlo/duckdb/src/storage/table/column_data.cpp>
6
+ #include </Users/carlo/duckdb/src/storage/table/column_segment.cpp>
7
+ #include </Users/carlo/duckdb/src/storage/table/list_column_data.cpp>
8
+ #include </Users/carlo/duckdb/src/storage/table/update_segment.cpp>
9
+ #include </Users/carlo/duckdb/src/storage/table/persistent_table_data.cpp>
10
+ #include </Users/carlo/duckdb/src/storage/table/row_group.cpp>
11
+ #include </Users/carlo/duckdb/src/storage/table/row_group_collection.cpp>
12
+ #include </Users/carlo/duckdb/src/storage/table/row_version_manager.cpp>
13
+ #include </Users/carlo/duckdb/src/storage/table/scan_state.cpp>
14
+ #include </Users/carlo/duckdb/src/storage/table/standard_column_data.cpp>
15
+ #include </Users/carlo/duckdb/src/storage/table/struct_column_data.cpp>
16
+ #include </Users/carlo/duckdb/src/storage/table/table_statistics.cpp>
17
+ #include </Users/carlo/duckdb/src/storage/table/validity_column_data.cpp>
@@ -574,12 +574,12 @@ void UpdateSegment::InitializeUpdateInfo(UpdateInfo &info, row_t *ids, const Sel
574
574
  info.next = nullptr;
575
575
 
576
576
  // set up the tuple ids
577
- info.N = count;
577
+ info.N = UnsafeNumericCast<sel_t>(count);
578
578
  for (idx_t i = 0; i < count; i++) {
579
579
  auto idx = sel.get_index(i);
580
580
  auto id = ids[idx];
581
581
  D_ASSERT(idx_t(id) >= vector_offset && idx_t(id) < vector_offset + STANDARD_VECTOR_SIZE);
582
- info.tuples[i] = id - vector_offset;
582
+ info.tuples[i] = NumericCast<sel_t>(id - vector_offset);
583
583
  };
584
584
  }
585
585
 
@@ -804,7 +804,7 @@ static void MergeUpdateLoopInternal(UpdateInfo *base_info, V *base_table_data, U
804
804
  result_values[result_offset] = UpdateSelectElement::Operation<T>(
805
805
  base_info->segment, OP::template Extract<T, V>(base_table_data, update_id));
806
806
  }
807
- result_ids[result_offset++] = update_id;
807
+ result_ids[result_offset++] = UnsafeNumericCast<sel_t>(update_id);
808
808
  }
809
809
  // write any remaining entries from the old updates
810
810
  while (update_info_offset < update_info->N) {
@@ -813,7 +813,7 @@ static void MergeUpdateLoopInternal(UpdateInfo *base_info, V *base_table_data, U
813
813
  update_info_offset++;
814
814
  }
815
815
  // now copy them back
816
- update_info->N = result_offset;
816
+ update_info->N = UnsafeNumericCast<sel_t>(result_offset);
817
817
  memcpy(update_info_data, result_values, result_offset * sizeof(T));
818
818
  memcpy(update_info->tuples, result_ids, result_offset * sizeof(sel_t));
819
819
 
@@ -821,12 +821,12 @@ static void MergeUpdateLoopInternal(UpdateInfo *base_info, V *base_table_data, U
821
821
  result_offset = 0;
822
822
  auto pick_new = [&](idx_t id, idx_t aidx, idx_t count) {
823
823
  result_values[result_offset] = OP::template Extract<T, V>(update_vector_data, aidx);
824
- result_ids[result_offset] = id;
824
+ result_ids[result_offset] = UnsafeNumericCast<sel_t>(id);
825
825
  result_offset++;
826
826
  };
827
827
  auto pick_old = [&](idx_t id, idx_t bidx, idx_t count) {
828
828
  result_values[result_offset] = base_info_data[bidx];
829
- result_ids[result_offset] = id;
829
+ result_ids[result_offset] = UnsafeNumericCast<sel_t>(id);
830
830
  result_offset++;
831
831
  };
832
832
  // now we perform a merge of the new ids with the old ids
@@ -835,7 +835,7 @@ static void MergeUpdateLoopInternal(UpdateInfo *base_info, V *base_table_data, U
835
835
  };
836
836
  MergeLoop(ids, base_info->tuples, count, base_info->N, base_id, merge, pick_new, pick_old, sel);
837
837
 
838
- base_info->N = result_offset;
838
+ base_info->N = UnsafeNumericCast<sel_t>(result_offset);
839
839
  memcpy(base_info_data, result_values, result_offset * sizeof(T));
840
840
  memcpy(base_info->tuples, result_ids, result_offset * sizeof(sel_t));
841
841
  }