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
@@ -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
  }