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
@@ -9,6 +9,7 @@
9
9
  #include "duckdb/planner/expression_iterator.hpp"
10
10
  #include "duckdb/planner/tableref/bound_joinref.hpp"
11
11
  #include "duckdb/planner/operator/logical_dependent_join.hpp"
12
+ #include "duckdb/planner/tableref/bound_subqueryref.hpp"
12
13
 
13
14
  namespace duckdb {
14
15
 
@@ -69,6 +70,20 @@ unique_ptr<Expression> RewriteCorrelatedExpressions::VisitReplace(BoundColumnRef
69
70
  return nullptr;
70
71
  }
71
72
 
73
+ //! Helper class used to recursively rewrite correlated expressions within nested subqueries.
74
+ class RewriteCorrelatedRecursive : public BoundNodeVisitor {
75
+ public:
76
+ RewriteCorrelatedRecursive(ColumnBinding base_binding, column_binding_map_t<idx_t> &correlated_map);
77
+
78
+ void VisitBoundTableRef(BoundTableRef &ref) override;
79
+ void VisitExpression(unique_ptr<Expression> &expression) override;
80
+
81
+ void RewriteCorrelatedSubquery(Binder &binder, BoundQueryNode &subquery);
82
+
83
+ ColumnBinding base_binding;
84
+ column_binding_map_t<idx_t> &correlated_map;
85
+ };
86
+
72
87
  unique_ptr<Expression> RewriteCorrelatedExpressions::VisitReplace(BoundSubqueryExpression &expr,
73
88
  unique_ptr<Expression> *expr_ptr) {
74
89
  if (!expr.IsCorrelated()) {
@@ -76,19 +91,19 @@ unique_ptr<Expression> RewriteCorrelatedExpressions::VisitReplace(BoundSubqueryE
76
91
  }
77
92
  // subquery detected within this subquery
78
93
  // recursively rewrite it using the RewriteCorrelatedRecursive class
79
- RewriteCorrelatedRecursive rewrite(expr, base_binding, correlated_map);
80
- rewrite.RewriteCorrelatedSubquery(expr);
94
+ RewriteCorrelatedRecursive rewrite(base_binding, correlated_map);
95
+ rewrite.RewriteCorrelatedSubquery(*expr.binder, *expr.subquery);
81
96
  return nullptr;
82
97
  }
83
98
 
84
- RewriteCorrelatedExpressions::RewriteCorrelatedRecursive::RewriteCorrelatedRecursive(
85
- BoundSubqueryExpression &parent, ColumnBinding base_binding, column_binding_map_t<idx_t> &correlated_map)
86
- : parent(parent), base_binding(base_binding), correlated_map(correlated_map) {
99
+ RewriteCorrelatedRecursive::RewriteCorrelatedRecursive(ColumnBinding base_binding,
100
+ column_binding_map_t<idx_t> &correlated_map)
101
+ : base_binding(base_binding), correlated_map(correlated_map) {
87
102
  }
88
103
 
89
- void RewriteCorrelatedExpressions::RewriteCorrelatedRecursive::RewriteJoinRefRecursive(BoundTableRef &ref) {
90
- // recursively rewrite bindings in the correlated columns for the table ref and all the children
104
+ void RewriteCorrelatedRecursive::VisitBoundTableRef(BoundTableRef &ref) {
91
105
  if (ref.type == TableReferenceType::JOIN) {
106
+ // rewrite correlated columns in child joins
92
107
  auto &bound_join = ref.Cast<BoundJoinRef>();
93
108
  for (auto &corr : bound_join.correlated_columns) {
94
109
  auto entry = correlated_map.find(corr.binding);
@@ -96,39 +111,30 @@ void RewriteCorrelatedExpressions::RewriteCorrelatedRecursive::RewriteJoinRefRec
96
111
  corr.binding = ColumnBinding(base_binding.table_index, base_binding.column_index + entry->second);
97
112
  }
98
113
  }
99
- RewriteJoinRefRecursive(*bound_join.left);
100
- RewriteJoinRefRecursive(*bound_join.right);
114
+ } else if (ref.type == TableReferenceType::SUBQUERY) {
115
+ auto &subquery = ref.Cast<BoundSubqueryRef>();
116
+ RewriteCorrelatedSubquery(*subquery.binder, *subquery.subquery);
117
+ return;
101
118
  }
119
+ // visit the children of the table ref
120
+ BoundNodeVisitor::VisitBoundTableRef(ref);
102
121
  }
103
122
 
104
- void RewriteCorrelatedExpressions::RewriteCorrelatedRecursive::RewriteCorrelatedSubquery(
105
- BoundSubqueryExpression &expr) {
123
+ void RewriteCorrelatedRecursive::RewriteCorrelatedSubquery(Binder &binder, BoundQueryNode &subquery) {
106
124
  // rewrite the binding in the correlated list of the subquery)
107
- for (auto &corr : expr.binder->correlated_columns) {
125
+ for (auto &corr : binder.correlated_columns) {
108
126
  auto entry = correlated_map.find(corr.binding);
109
127
  if (entry != correlated_map.end()) {
110
128
  corr.binding = ColumnBinding(base_binding.table_index, base_binding.column_index + entry->second);
111
129
  }
112
130
  }
113
- // TODO: Cleanup and find a better way to do this
114
- auto &node = *expr.subquery;
115
- if (node.type == QueryNodeType::SELECT_NODE) {
116
- // Found an unplanned select node, need to update column bindings correlated columns in the from tables
117
- auto &bound_select = node.Cast<BoundSelectNode>();
118
- if (bound_select.from_table) {
119
- BoundTableRef &table_ref = *bound_select.from_table;
120
- RewriteJoinRefRecursive(table_ref);
121
- }
122
- }
123
- // now rewrite any correlated BoundColumnRef expressions inside the subquery
124
- ExpressionIterator::EnumerateQueryNodeChildren(*expr.subquery,
125
- [&](Expression &child) { RewriteCorrelatedExpressions(child); });
131
+ VisitBoundQueryNode(subquery);
126
132
  }
127
133
 
128
- void RewriteCorrelatedExpressions::RewriteCorrelatedRecursive::RewriteCorrelatedExpressions(Expression &child) {
129
- if (child.type == ExpressionType::BOUND_COLUMN_REF) {
134
+ void RewriteCorrelatedRecursive::VisitExpression(unique_ptr<Expression> &expression) {
135
+ if (expression->type == ExpressionType::BOUND_COLUMN_REF) {
130
136
  // bound column reference
131
- auto &bound_colref = child.Cast<BoundColumnRefExpression>();
137
+ auto &bound_colref = expression->Cast<BoundColumnRefExpression>();
132
138
  if (bound_colref.depth == 0) {
133
139
  // not a correlated column, ignore
134
140
  return;
@@ -142,13 +148,13 @@ void RewriteCorrelatedExpressions::RewriteCorrelatedRecursive::RewriteCorrelated
142
148
  bound_colref.binding = ColumnBinding(base_binding.table_index, base_binding.column_index + entry->second);
143
149
  bound_colref.depth--;
144
150
  }
145
- } else if (child.type == ExpressionType::SUBQUERY) {
151
+ } else if (expression->type == ExpressionType::SUBQUERY) {
146
152
  // we encountered another subquery: rewrite recursively
147
- D_ASSERT(child.GetExpressionClass() == ExpressionClass::BOUND_SUBQUERY);
148
- auto &bound_subquery = child.Cast<BoundSubqueryExpression>();
149
- RewriteCorrelatedRecursive rewrite(bound_subquery, base_binding, correlated_map);
150
- rewrite.RewriteCorrelatedSubquery(bound_subquery);
153
+ auto &bound_subquery = expression->Cast<BoundSubqueryExpression>();
154
+ RewriteCorrelatedSubquery(*bound_subquery.binder, *bound_subquery.subquery);
151
155
  }
156
+ // recurse into the children of this subquery
157
+ BoundNodeVisitor::VisitExpression(expression);
152
158
  }
153
159
 
154
160
  RewriteCountAggregates::RewriteCountAggregates(column_binding_map_t<idx_t> &replacement_map)
@@ -0,0 +1,4 @@
1
+ // Unity Build generated by CMake
2
+ #include </Users/carlo/duckdb/src/planner/subquery/flatten_dependent_join.cpp>
3
+ #include </Users/carlo/duckdb/src/planner/subquery/has_correlated_expressions.cpp>
4
+ #include </Users/carlo/duckdb/src/planner/subquery/rewrite_correlated_expressions.cpp>
@@ -0,0 +1,15 @@
1
+ // Unity Build generated by CMake
2
+ #include </Users/carlo/duckdb/src/planner/bound_result_modifier.cpp>
3
+ #include </Users/carlo/duckdb/src/planner/bound_parameter_map.cpp>
4
+ #include </Users/carlo/duckdb/src/planner/expression_iterator.cpp>
5
+ #include </Users/carlo/duckdb/src/planner/expression.cpp>
6
+ #include </Users/carlo/duckdb/src/planner/table_binding.cpp>
7
+ #include </Users/carlo/duckdb/src/planner/expression_binder.cpp>
8
+ #include </Users/carlo/duckdb/src/planner/joinside.cpp>
9
+ #include </Users/carlo/duckdb/src/planner/logical_operator.cpp>
10
+ #include </Users/carlo/duckdb/src/planner/binder.cpp>
11
+ #include </Users/carlo/duckdb/src/planner/bind_context.cpp>
12
+ #include </Users/carlo/duckdb/src/planner/planner.cpp>
13
+ #include </Users/carlo/duckdb/src/planner/pragma_handler.cpp>
14
+ #include </Users/carlo/duckdb/src/planner/logical_operator_visitor.cpp>
15
+ #include </Users/carlo/duckdb/src/planner/table_filter.cpp>
@@ -72,6 +72,7 @@ data_ptr_t ArenaAllocator::Allocate(idx_t len) {
72
72
  tail = new_chunk.get();
73
73
  }
74
74
  head = std::move(new_chunk);
75
+ allocated_size += current_capacity;
75
76
  }
76
77
  D_ASSERT(head->current_position + len <= head->maximum_size);
77
78
  auto result = head->data.get() + head->current_position;
@@ -123,12 +124,14 @@ void ArenaAllocator::Reset() {
123
124
  head->current_position = 0;
124
125
  head->prev = nullptr;
125
126
  }
127
+ allocated_size = 0;
126
128
  }
127
129
 
128
130
  void ArenaAllocator::Destroy() {
129
131
  head = nullptr;
130
132
  tail = nullptr;
131
133
  current_capacity = ARENA_ALLOCATOR_INITIAL_CAPACITY;
134
+ allocated_size = 0;
132
135
  }
133
136
 
134
137
  void ArenaAllocator::Move(ArenaAllocator &other) {
@@ -136,6 +139,7 @@ void ArenaAllocator::Move(ArenaAllocator &other) {
136
139
  other.tail = tail;
137
140
  other.head = std::move(head);
138
141
  other.current_capacity = current_capacity;
142
+ other.allocated_size = allocated_size;
139
143
  Destroy();
140
144
  }
141
145
 
@@ -163,4 +167,9 @@ idx_t ArenaAllocator::SizeInBytes() const {
163
167
  return total_size;
164
168
  }
165
169
 
170
+ idx_t ArenaAllocator::AllocationSize() const {
171
+ D_ASSERT(head || allocated_size == 0);
172
+ return allocated_size;
173
+ }
174
+
166
175
  } // namespace duckdb
@@ -31,7 +31,12 @@ BlockHandle::BlockHandle(BlockManager &block_manager, block_id_t block_id_p, Mem
31
31
  BlockHandle::~BlockHandle() { // NOLINT: allow internal exceptions
32
32
  // being destroyed, so any unswizzled pointers are just binary junk now.
33
33
  unswizzled = nullptr;
34
- auto &buffer_manager = block_manager.buffer_manager;
34
+ if (buffer && buffer->type != FileBufferType::TINY_BUFFER) {
35
+ // we kill the latest version in the eviction queue
36
+ auto &buffer_manager = block_manager.buffer_manager;
37
+ buffer_manager.GetBufferPool().IncrementDeadNodes();
38
+ }
39
+
35
40
  // no references remain to this block: erase
36
41
  if (buffer && state == BlockState::BLOCK_LOADED) {
37
42
  D_ASSERT(memory_charge.size > 0);
@@ -41,7 +46,7 @@ BlockHandle::~BlockHandle() { // NOLINT: allow internal exceptions
41
46
  } else {
42
47
  D_ASSERT(memory_charge.size == 0);
43
48
  }
44
- buffer_manager.GetBufferPool().PurgeQueue();
49
+
45
50
  block_manager.UnregisterBlock(block_id, can_destroy);
46
51
  }
47
52
 
@@ -35,8 +35,8 @@ shared_ptr<BlockHandle> BlockManager::ConvertToPersistent(block_id_t block_id, s
35
35
  D_ASSERT(old_block->state == BlockState::BLOCK_LOADED);
36
36
  D_ASSERT(old_block->buffer);
37
37
 
38
- // Temp buffers can be larger than the storage block size. But persistent buffers
39
- // cannot.
38
+ // Temp buffers can be larger than the storage block size.
39
+ // But persistent buffers cannot.
40
40
  D_ASSERT(old_block->buffer->AllocSize() <= Storage::BLOCK_ALLOC_SIZE);
41
41
 
42
42
  // register a block with the new block id
@@ -60,7 +60,11 @@ shared_ptr<BlockHandle> BlockManager::ConvertToPersistent(block_id_t block_id, s
60
60
  // persist the new block to disk
61
61
  Write(*new_block->buffer, block_id);
62
62
 
63
- buffer_manager.GetBufferPool().AddToEvictionQueue(new_block);
63
+ // potentially purge the queue
64
+ auto purge_queue = buffer_manager.GetBufferPool().AddToEvictionQueue(new_block);
65
+ if (purge_queue) {
66
+ buffer_manager.GetBufferPool().PurgeQueue();
67
+ }
64
68
 
65
69
  return new_block;
66
70
  }
@@ -35,8 +35,8 @@ shared_ptr<BlockHandle> BufferEvictionNode::TryGetBlockHandle() {
35
35
  }
36
36
 
37
37
  BufferPool::BufferPool(idx_t maximum_memory)
38
- : current_memory(0), maximum_memory(maximum_memory), queue(make_uniq<EvictionQueue>()), queue_insertions(0),
39
- temporary_memory_manager(make_uniq<TemporaryMemoryManager>()) {
38
+ : current_memory(0), maximum_memory(maximum_memory), queue(make_uniq<EvictionQueue>()),
39
+ temporary_memory_manager(make_uniq<TemporaryMemoryManager>()), evict_queue_insertions(0), total_dead_nodes(0) {
40
40
  for (idx_t i = 0; i < MEMORY_TAG_COUNT; i++) {
41
41
  memory_usage_per_tag[i] = 0;
42
42
  }
@@ -44,16 +44,26 @@ BufferPool::BufferPool(idx_t maximum_memory)
44
44
  BufferPool::~BufferPool() {
45
45
  }
46
46
 
47
- void BufferPool::AddToEvictionQueue(shared_ptr<BlockHandle> &handle) {
48
- constexpr int INSERT_INTERVAL = 1024;
47
+ bool BufferPool::AddToEvictionQueue(shared_ptr<BlockHandle> &handle) {
48
+
49
+ // The block handle is locked during this operation (Unpin),
50
+ // or the block handle is still a local variable (ConvertToPersistent)
49
51
 
50
52
  D_ASSERT(handle->readers == 0);
51
- handle->eviction_timestamp++;
52
- // After each 1024 insertions, run through the queue and purge.
53
- if ((++queue_insertions % INSERT_INTERVAL) == 0) {
54
- PurgeQueue();
53
+ auto ts = ++handle->eviction_timestamp;
54
+
55
+ BufferEvictionNode evict_node(weak_ptr<BlockHandle>(handle), ts);
56
+ queue->q.enqueue(evict_node);
57
+
58
+ if (ts != 1) {
59
+ // we add a newer version, i.e., we kill exactly one previous version
60
+ IncrementDeadNodes();
55
61
  }
56
- queue->q.enqueue(BufferEvictionNode(weak_ptr<BlockHandle>(handle), handle->eviction_timestamp));
62
+
63
+ if (++evict_queue_insertions % INSERT_INTERVAL == 0) {
64
+ return true;
65
+ }
66
+ return false;
57
67
  }
58
68
 
59
69
  void BufferPool::IncreaseUsedMemory(MemoryTag tag, idx_t size) {
@@ -81,50 +91,137 @@ BufferPool::EvictionResult BufferPool::EvictBlocks(MemoryTag tag, idx_t extra_me
81
91
  unique_ptr<FileBuffer> *buffer) {
82
92
  BufferEvictionNode node;
83
93
  TempBufferPoolReservation r(tag, *this, extra_memory);
94
+
84
95
  while (current_memory > memory_limit) {
85
96
  // get a block to unpin from the queue
86
97
  if (!queue->q.try_dequeue(node)) {
87
- // Failed to reserve. Adjust size of temp reservation to 0.
88
- r.Resize(0);
89
- return {false, std::move(r)};
98
+ // we could not dequeue any eviction node, so we try one more time,
99
+ // but more aggressively
100
+ if (!TryDequeueWithLock(node)) {
101
+ // still no success, we return
102
+ r.Resize(0);
103
+ return {false, std::move(r)};
104
+ }
90
105
  }
106
+
91
107
  // get a reference to the underlying block pointer
92
108
  auto handle = node.TryGetBlockHandle();
93
109
  if (!handle) {
110
+ DecrementDeadNodes();
94
111
  continue;
95
112
  }
113
+
96
114
  // we might be able to free this block: grab the mutex and check if we can free it
97
115
  lock_guard<mutex> lock(handle->lock);
98
116
  if (!node.CanUnload(*handle)) {
99
117
  // something changed in the mean-time, bail out
118
+ DecrementDeadNodes();
100
119
  continue;
101
120
  }
121
+
102
122
  // hooray, we can unload the block
103
123
  if (buffer && handle->buffer->AllocSize() == extra_memory) {
104
- // we can actually re-use the memory directly!
124
+ // we can re-use the memory directly
105
125
  *buffer = handle->UnloadAndTakeBlock();
106
126
  return {true, std::move(r)};
107
- } else {
108
- // release the memory and mark the block as unloaded
109
- handle->Unload();
110
127
  }
128
+
129
+ // release the memory and mark the block as unloaded
130
+ handle->Unload();
111
131
  }
112
132
  return {true, std::move(r)};
113
133
  }
114
134
 
135
+ bool BufferPool::TryDequeueWithLock(BufferEvictionNode &node) {
136
+ lock_guard<mutex> lock(purge_lock);
137
+ return queue->q.try_dequeue(node);
138
+ }
139
+
140
+ void BufferPool::PurgeIteration(const idx_t purge_size) {
141
+ // if this purge is significantly smaller or bigger than the previous purge, then
142
+ // we need to resize the purge_nodes vector. Note that this barely happens, as we
143
+ // purge queue_insertions * PURGE_SIZE_MULTIPLIER nodes
144
+ idx_t previous_purge_size = purge_nodes.size();
145
+ if (purge_size < previous_purge_size / 2 || purge_size > previous_purge_size) {
146
+ purge_nodes.resize(purge_size);
147
+ }
148
+
149
+ // bulk purge
150
+ idx_t actually_dequeued = queue->q.try_dequeue_bulk(purge_nodes.begin(), purge_size);
151
+
152
+ // retrieve all alive nodes that have been wrongly dequeued
153
+ idx_t alive_nodes = 0;
154
+ for (idx_t i = 0; i < actually_dequeued; i++) {
155
+ auto &node = purge_nodes[i];
156
+ auto handle = node.TryGetBlockHandle();
157
+ if (handle) {
158
+ queue->q.enqueue(std::move(node));
159
+ alive_nodes++;
160
+ }
161
+ }
162
+
163
+ total_dead_nodes -= actually_dequeued - alive_nodes;
164
+ }
165
+
115
166
  void BufferPool::PurgeQueue() {
116
- BufferEvictionNode node;
117
- while (true) {
118
- if (!queue->q.try_dequeue(node)) {
167
+
168
+ // only one thread purges the queue, all other threads early-out
169
+ if (!purge_lock.try_lock()) {
170
+ return;
171
+ }
172
+ lock_guard<mutex> lock {purge_lock, std::adopt_lock};
173
+
174
+ // we purge INSERT_INTERVAL * PURGE_SIZE_MULTIPLIER nodes
175
+ idx_t purge_size = INSERT_INTERVAL * PURGE_SIZE_MULTIPLIER;
176
+
177
+ // get an estimate of the queue size as-of now
178
+ idx_t approx_q_size = queue->q.size_approx();
179
+
180
+ // early-out, if the queue is not big enough to justify purging
181
+ // - we want to keep the LRU characteristic alive
182
+ if (approx_q_size < purge_size * EARLY_OUT_MULTIPLIER) {
183
+ return;
184
+ }
185
+
186
+ // There are two types of situations.
187
+
188
+ // For most scenarios, purging INSERT_INTERVAL * PURGE_SIZE_MULTIPLIER nodes is enough.
189
+ // Purging more nodes than we insert also counters oscillation for scenarios where most nodes are dead.
190
+ // If we always purge slightly more, we trigger a purge less often, as we purge below the trigger.
191
+
192
+ // However, if the pressure on the queue becomes too contested, we need to purge more aggressively,
193
+ // i.e., we actively seek a specific number of dead nodes to purge. We use the total number of existing dead nodes.
194
+ // We detect this situation by observing the queue's ratio between alive vs. dead nodes. If the ratio of alive vs.
195
+ // dead nodes grows faster than we can purge, we keep purging until we hit one of the following conditions.
196
+
197
+ // 2.1. We're back at an approximate queue size less than purge_size * EARLY_OUT_MULTIPLIER.
198
+ // 2.2. We're back at a ratio of 1*alive_node:ALIVE_NODE_MULTIPLIER*dead_nodes.
199
+ // 2.3. We've purged the entire queue: max_purges is zero. This is a worst-case scenario,
200
+ // guaranteeing that we always exit the loop.
201
+
202
+ idx_t max_purges = approx_q_size / purge_size;
203
+ while (max_purges != 0) {
204
+
205
+ PurgeIteration(purge_size);
206
+
207
+ // update relevant sizes and potentially early-out
208
+ approx_q_size = queue->q.size_approx();
209
+
210
+ // early-out according to (2.1)
211
+ if (approx_q_size < purge_size * EARLY_OUT_MULTIPLIER) {
119
212
  break;
120
213
  }
121
- auto handle = node.TryGetBlockHandle();
122
- if (!handle) {
123
- continue;
124
- } else {
125
- queue->q.enqueue(std::move(node));
214
+
215
+ idx_t approx_dead_nodes = total_dead_nodes;
216
+ approx_dead_nodes = approx_dead_nodes > approx_q_size ? approx_q_size : approx_dead_nodes;
217
+ idx_t approx_alive_nodes = approx_q_size - approx_dead_nodes;
218
+
219
+ // early-out according to (2.2)
220
+ if (approx_alive_nodes * (ALIVE_NODE_MULTIPLIER - 1) > approx_dead_nodes) {
126
221
  break;
127
222
  }
223
+
224
+ max_purges--;
128
225
  }
129
226
  }
130
227
 
@@ -0,0 +1,6 @@
1
+ // Unity Build generated by CMake
2
+ #include </Users/carlo/duckdb/src/storage/buffer/buffer_handle.cpp>
3
+ #include </Users/carlo/duckdb/src/storage/buffer/block_handle.cpp>
4
+ #include </Users/carlo/duckdb/src/storage/buffer/block_manager.cpp>
5
+ #include </Users/carlo/duckdb/src/storage/buffer/buffer_pool.cpp>
6
+ #include </Users/carlo/duckdb/src/storage/buffer/buffer_pool_reservation.cpp>
@@ -0,0 +1,5 @@
1
+ // Unity Build generated by CMake
2
+ #include </Users/carlo/duckdb/src/storage/checkpoint/row_group_writer.cpp>
3
+ #include </Users/carlo/duckdb/src/storage/checkpoint/table_data_writer.cpp>
4
+ #include </Users/carlo/duckdb/src/storage/checkpoint/table_data_reader.cpp>
5
+ #include </Users/carlo/duckdb/src/storage/checkpoint/write_overflow_strings_to_disk.cpp>
@@ -47,19 +47,19 @@ void WriteOverflowStringsToDisk::WriteString(UncompressedStringSegmentState &sta
47
47
  AllocateNewBlock(state, block_manager.GetFreeBlockId());
48
48
  }
49
49
  result_block = block_id;
50
- result_offset = offset;
50
+ result_offset = UnsafeNumericCast<int32_t>(offset);
51
51
 
52
52
  // write the length field
53
53
  auto data_ptr = handle.Ptr();
54
54
  auto string_length = string.GetSize();
55
- Store<uint32_t>(string_length, data_ptr + offset);
55
+ Store<uint32_t>(UnsafeNumericCast<uint32_t>(string_length), data_ptr + offset);
56
56
  offset += sizeof(uint32_t);
57
57
 
58
58
  // now write the remainder of the string
59
59
  auto strptr = string.GetData();
60
- uint32_t remaining = string_length;
60
+ auto remaining = UnsafeNumericCast<uint32_t>(string_length);
61
61
  while (remaining > 0) {
62
- uint32_t to_write = MinValue<uint32_t>(remaining, STRING_SPACE - offset);
62
+ uint32_t to_write = MinValue<uint32_t>(remaining, UnsafeNumericCast<uint32_t>(STRING_SPACE - offset));
63
63
  if (to_write > 0) {
64
64
  memcpy(data_ptr + offset, strptr, to_write);
65
65
 
@@ -0,0 +1,6 @@
1
+ // Unity Build generated by CMake
2
+ #include </Users/carlo/duckdb/src/storage/compression/chimp/bit_reader.cpp>
3
+ #include </Users/carlo/duckdb/src/storage/compression/chimp/chimp_constants.cpp>
4
+ #include </Users/carlo/duckdb/src/storage/compression/chimp/flag_buffer.cpp>
5
+ #include </Users/carlo/duckdb/src/storage/compression/chimp/leading_zero_buffer.cpp>
6
+ #include </Users/carlo/duckdb/src/storage/compression/chimp/chimp.cpp>
@@ -1,4 +1,5 @@
1
1
  #include "duckdb/common/bitpacking.hpp"
2
+ #include "duckdb/common/numeric_utils.hpp"
2
3
  #include "duckdb/common/operator/comparison_operators.hpp"
3
4
  #include "duckdb/common/string_map_set.hpp"
4
5
  #include "duckdb/common/types/vector_buffer.hpp"
@@ -212,7 +213,7 @@ public:
212
213
 
213
214
  // Update buffers and map
214
215
  index_buffer.push_back(current_dictionary.size);
215
- selection_buffer.push_back(index_buffer.size() - 1);
216
+ selection_buffer.push_back(UnsafeNumericCast<uint32_t>(index_buffer.size() - 1));
216
217
  if (str.IsInlined()) {
217
218
  current_string_map.insert({str, index_buffer.size() - 1});
218
219
  } else {
@@ -285,8 +286,8 @@ public:
285
286
  memcpy(base_ptr + index_buffer_offset, index_buffer.data(), index_buffer_size);
286
287
 
287
288
  // Store sizes and offsets in segment header
288
- Store<uint32_t>(index_buffer_offset, data_ptr_cast(&header_ptr->index_buffer_offset));
289
- Store<uint32_t>(index_buffer.size(), data_ptr_cast(&header_ptr->index_buffer_count));
289
+ Store<uint32_t>(NumericCast<uint32_t>(index_buffer_offset), data_ptr_cast(&header_ptr->index_buffer_offset));
290
+ Store<uint32_t>(NumericCast<uint32_t>(index_buffer.size()), data_ptr_cast(&header_ptr->index_buffer_count));
290
291
  Store<uint32_t>((uint32_t)current_width, data_ptr_cast(&header_ptr->bitpacking_width));
291
292
 
292
293
  D_ASSERT(current_width == BitpackingPrimitives::MinimumBitWidth(index_buffer.size() - 1));
@@ -507,7 +508,7 @@ void DictionaryCompressionStorage::StringScanPartial(ColumnSegment &segment, Col
507
508
  // Lookup dict offset in index buffer
508
509
  auto string_number = scan_state.sel_vec->get_index(i + start_offset);
509
510
  auto dict_offset = index_buffer_ptr[string_number];
510
- uint16_t str_len = GetStringLength(index_buffer_ptr, string_number);
511
+ auto str_len = GetStringLength(index_buffer_ptr, UnsafeNumericCast<sel_t>(string_number));
511
512
  result_data[result_offset + i] = FetchStringFromDict(segment, dict, baseptr, dict_offset, str_len);
512
513
  }
513
514
 
@@ -627,7 +628,7 @@ uint16_t DictionaryCompressionStorage::GetStringLength(uint32_t *index_buffer_pt
627
628
  if (index == 0) {
628
629
  return 0;
629
630
  } else {
630
- return index_buffer_ptr[index] - index_buffer_ptr[index - 1];
631
+ return UnsafeNumericCast<uint16_t>(index_buffer_ptr[index] - index_buffer_ptr[index - 1]);
631
632
  }
632
633
  }
633
634
 
@@ -249,7 +249,7 @@ public:
249
249
  current_dictionary.Verify();
250
250
 
251
251
  // We just push the string length to effectively delta encode the strings
252
- index_buffer.push_back(compressed_string_len);
252
+ index_buffer.push_back(NumericCast<uint32_t>(compressed_string_len));
253
253
 
254
254
  max_compressed_string_length = MaxValue(max_compressed_string_length, compressed_string_len);
255
255
 
@@ -348,7 +348,8 @@ public:
348
348
  memset(base_ptr + symbol_table_offset, 0, fsst_serialized_symbol_table_size);
349
349
  }
350
350
 
351
- Store<uint32_t>(symbol_table_offset, data_ptr_cast(&header_ptr->fsst_symbol_table_offset));
351
+ Store<uint32_t>(NumericCast<uint32_t>(symbol_table_offset),
352
+ data_ptr_cast(&header_ptr->fsst_symbol_table_offset));
352
353
  Store<uint32_t>((uint32_t)current_width, data_ptr_cast(&header_ptr->bitpacking_width));
353
354
 
354
355
  if (total_size >= FSSTStorage::COMPACTION_FLUSH_LIMIT) {
@@ -250,7 +250,7 @@ struct RLEScanState : public SegmentScanState {
250
250
  handle = buffer_manager.Pin(segment.block);
251
251
  entry_pos = 0;
252
252
  position_in_entry = 0;
253
- rle_count_offset = Load<uint64_t>(handle.Ptr() + segment.GetBlockOffset());
253
+ rle_count_offset = UnsafeNumericCast<uint32_t>(Load<uint64_t>(handle.Ptr() + segment.GetBlockOffset()));
254
254
  D_ASSERT(rle_count_offset <= Storage::BLOCK_SIZE);
255
255
  }
256
256
 
@@ -164,7 +164,7 @@ UncompressedStringStorage::StringInitSegment(ColumnSegment &segment, block_id_t
164
164
  auto handle = buffer_manager.Pin(segment.block);
165
165
  StringDictionaryContainer dictionary;
166
166
  dictionary.size = 0;
167
- dictionary.end = segment.SegmentSize();
167
+ dictionary.end = UnsafeNumericCast<uint32_t>(segment.SegmentSize());
168
168
  SetDictionary(segment, handle, dictionary);
169
169
  }
170
170
  auto result = make_uniq<UncompressedStringSegmentState>();
@@ -283,7 +283,7 @@ void UncompressedStringStorage::WriteString(ColumnSegment &segment, string_t str
283
283
 
284
284
  void UncompressedStringStorage::WriteStringMemory(ColumnSegment &segment, string_t string, block_id_t &result_block,
285
285
  int32_t &result_offset) {
286
- uint32_t total_length = string.GetSize() + sizeof(uint32_t);
286
+ auto total_length = UnsafeNumericCast<uint32_t>(string.GetSize() + sizeof(uint32_t));
287
287
  shared_ptr<BlockHandle> block;
288
288
  BufferHandle handle;
289
289
 
@@ -309,11 +309,11 @@ void UncompressedStringStorage::WriteStringMemory(ColumnSegment &segment, string
309
309
  }
310
310
 
311
311
  result_block = state.head->block->BlockId();
312
- result_offset = state.head->offset;
312
+ result_offset = UnsafeNumericCast<int32_t>(state.head->offset);
313
313
 
314
314
  // copy the string and the length there
315
315
  auto ptr = handle.Ptr() + state.head->offset;
316
- Store<uint32_t>(string.GetSize(), ptr);
316
+ Store<uint32_t>(UnsafeNumericCast<uint32_t>(string.GetSize()), ptr);
317
317
  ptr += sizeof(uint32_t);
318
318
  memcpy(ptr, string.GetData(), string.GetSize());
319
319
  state.head->offset += total_length;
@@ -0,0 +1,12 @@
1
+ // Unity Build generated by CMake
2
+ #include </Users/carlo/duckdb/src/storage/compression/numeric_constant.cpp>
3
+ #include </Users/carlo/duckdb/src/storage/compression/fixed_size_uncompressed.cpp>
4
+ #include </Users/carlo/duckdb/src/storage/compression/rle.cpp>
5
+ #include </Users/carlo/duckdb/src/storage/compression/dictionary_compression.cpp>
6
+ #include </Users/carlo/duckdb/src/storage/compression/string_uncompressed.cpp>
7
+ #include </Users/carlo/duckdb/src/storage/compression/uncompressed.cpp>
8
+ #include </Users/carlo/duckdb/src/storage/compression/validity_uncompressed.cpp>
9
+ #include </Users/carlo/duckdb/src/storage/compression/bitpacking.cpp>
10
+ #include </Users/carlo/duckdb/src/storage/compression/bitpacking_hugeint.cpp>
11
+ #include </Users/carlo/duckdb/src/storage/compression/patas.cpp>
12
+ #include </Users/carlo/duckdb/src/storage/compression/fsst.cpp>
@@ -237,7 +237,6 @@ bool DataTable::NextParallelScan(ClientContext &context, ParallelTableScanState
237
237
  if (row_groups->NextParallelScan(context, state.scan_state, scan_state.table_state)) {
238
238
  return true;
239
239
  }
240
- scan_state.table_state.batch_index = state.scan_state.batch_index;
241
240
  auto &local_storage = LocalStorage::Get(context, db);
242
241
  if (local_storage.NextParallelScan(context, *this, state.local_state, scan_state.local_state)) {
243
242
  return true;
@@ -747,12 +746,12 @@ void DataTable::AppendLock(TableAppendState &state) {
747
746
  state.current_row = state.row_start;
748
747
  }
749
748
 
750
- void DataTable::InitializeAppend(DuckTransaction &transaction, TableAppendState &state, idx_t append_count) {
749
+ void DataTable::InitializeAppend(DuckTransaction &transaction, TableAppendState &state) {
751
750
  // obtain the append lock for this table
752
751
  if (!state.append_lock) {
753
752
  throw InternalException("DataTable::AppendLock should be called before DataTable::InitializeAppend");
754
753
  }
755
- row_groups->InitializeAppend(transaction, state, append_count);
754
+ row_groups->InitializeAppend(transaction, state);
756
755
  }
757
756
 
758
757
  void DataTable::Append(DataChunk &chunk, TableAppendState &state) {
@@ -760,6 +759,10 @@ void DataTable::Append(DataChunk &chunk, TableAppendState &state) {
760
759
  row_groups->Append(chunk, state);
761
760
  }
762
761
 
762
+ void DataTable::FinalizeAppend(DuckTransaction &transaction, TableAppendState &state) {
763
+ row_groups->FinalizeAppend(transaction, state);
764
+ }
765
+
763
766
  void DataTable::ScanTableSegment(idx_t row_start, idx_t count, const std::function<void(DataChunk &chunk)> &function) {
764
767
  if (count == 0) {
765
768
  return;