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
@@ -182,13 +182,18 @@ template <bool HAS_RSEL, bool FIRST_HASH>
182
182
  static inline void ArrayLoopHash(Vector &input, Vector &hashes, const SelectionVector *rsel, idx_t count) {
183
183
  auto hdata = FlatVector::GetData<hash_t>(hashes);
184
184
 
185
+ if (input.GetVectorType() != VectorType::CONSTANT_VECTOR || input.GetVectorType() != VectorType::FLAT_VECTOR) {
186
+ input.Flatten(count);
187
+ }
188
+
185
189
  UnifiedVectorFormat idata;
186
190
  input.ToUnifiedFormat(count, idata);
187
191
 
188
192
  // Hash the children into a temporary
189
193
  auto &child = ArrayVector::GetEntry(input);
190
194
  auto array_size = ArrayType::GetSize(input.GetType());
191
- auto child_count = array_size * count;
195
+ auto is_constant = input.GetVectorType() == VectorType::CONSTANT_VECTOR;
196
+ auto child_count = array_size * (is_constant ? 1 : count);
192
197
 
193
198
  Vector child_hashes(LogicalType::HASH, child_count);
194
199
  if (child_count > 0) {
@@ -197,12 +202,18 @@ static inline void ArrayLoopHash(Vector &input, Vector &hashes, const SelectionV
197
202
  }
198
203
  auto chdata = FlatVector::GetData<hash_t>(child_hashes);
199
204
 
200
- // Combine hashes for every array
201
- // TODO: Branch on FIRST_HASH and HAS_RSEL
202
- for (idx_t i = 0; i < count; i++) {
203
- for (idx_t j = i * array_size; j < (i + 1) * array_size; j++) {
204
- hdata[i] = CombineHashScalar(hdata[i], chdata[j]);
205
+ for (idx_t i = 0; i < count; ++i) {
206
+ const auto ridx = HAS_RSEL ? rsel->get_index(i) : i;
207
+ const auto lidx = idata.sel->get_index(ridx);
208
+ const auto offset = lidx * array_size;
209
+ if (idata.validity.RowIsValid(lidx)) {
210
+ for (idx_t j = 0; j < array_size; j++) {
211
+ hdata[ridx] = CombineHashScalar(hdata[ridx], chdata[offset + j]);
212
+ }
213
+ } else if (FIRST_HASH) {
214
+ hdata[ridx] = HashOp::NULL_HASH;
205
215
  }
216
+ // Empty or NULL non-first elements have no effect.
206
217
  }
207
218
  }
208
219
 
@@ -0,0 +1,5 @@
1
+ // Unity Build generated by CMake
2
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/algebraic/avg.cpp>
3
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/algebraic/covar.cpp>
4
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/algebraic/stddev.cpp>
5
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/algebraic/corr.cpp>
@@ -1,6 +1,7 @@
1
1
  #include "duckdb/core_functions/aggregate/distributive_functions.hpp"
2
2
  #include "duckdb/common/exception.hpp"
3
3
  #include "duckdb/common/vector_operations/vector_operations.hpp"
4
+ #include "duckdb/function/cast/cast_function_set.hpp"
4
5
  #include "duckdb/function/function_set.hpp"
5
6
  #include "duckdb/planner/expression/bound_aggregate_expression.hpp"
6
7
  #include "duckdb/planner/expression/bound_comparison_expression.hpp"
@@ -70,7 +71,7 @@ void ArgMinMaxStateBase::AssignValue(string_t &target, string_t new_value) {
70
71
  auto ptr = new char[len];
71
72
  memcpy(ptr, new_value.GetData(), len);
72
73
 
73
- target = string_t(ptr, len);
74
+ target = string_t(ptr, UnsafeNumericCast<uint32_t>(len));
74
75
  }
75
76
  }
76
77
 
@@ -190,7 +191,7 @@ struct VectorArgMinMaxBase : ArgMinMaxBase<COMPARATOR, IGNORE_NULL> {
190
191
  }
191
192
  state.arg_null = arg_null;
192
193
  if (!arg_null) {
193
- sel_t selv = idx;
194
+ sel_t selv = UnsafeNumericCast<sel_t>(idx);
194
195
  SelectionVector sel(&selv);
195
196
  VectorOperations::Copy(arg, *state.arg, sel, 1, 0, 0);
196
197
  }
@@ -284,6 +285,8 @@ AggregateFunction GetVectorArgMinMaxFunctionBy(const LogicalType &by_type, const
284
285
  return GetVectorArgMinMaxFunctionInternal<OP, ARG_TYPE, int32_t>(by_type, type);
285
286
  case PhysicalType::INT64:
286
287
  return GetVectorArgMinMaxFunctionInternal<OP, ARG_TYPE, int64_t>(by_type, type);
288
+ case PhysicalType::INT128:
289
+ return GetVectorArgMinMaxFunctionInternal<OP, ARG_TYPE, hugeint_t>(by_type, type);
287
290
  case PhysicalType::DOUBLE:
288
291
  return GetVectorArgMinMaxFunctionInternal<OP, ARG_TYPE, double>(by_type, type);
289
292
  case PhysicalType::VARCHAR:
@@ -294,9 +297,9 @@ AggregateFunction GetVectorArgMinMaxFunctionBy(const LogicalType &by_type, const
294
297
  }
295
298
 
296
299
  static const vector<LogicalType> ArgMaxByTypes() {
297
- vector<LogicalType> types = {LogicalType::INTEGER, LogicalType::BIGINT, LogicalType::DOUBLE,
298
- LogicalType::VARCHAR, LogicalType::DATE, LogicalType::TIMESTAMP,
299
- LogicalType::TIMESTAMP_TZ, LogicalType::BLOB};
300
+ vector<LogicalType> types = {LogicalType::INTEGER, LogicalType::BIGINT, LogicalType::HUGEINT,
301
+ LogicalType::DOUBLE, LogicalType::VARCHAR, LogicalType::DATE,
302
+ LogicalType::TIMESTAMP, LogicalType::TIMESTAMP_TZ, LogicalType::BLOB};
300
303
  return types;
301
304
  }
302
305
 
@@ -328,12 +331,14 @@ AggregateFunction GetArgMinMaxFunctionBy(const LogicalType &by_type, const Logic
328
331
  return GetArgMinMaxFunctionInternal<OP, ARG_TYPE, int32_t>(by_type, type);
329
332
  case PhysicalType::INT64:
330
333
  return GetArgMinMaxFunctionInternal<OP, ARG_TYPE, int64_t>(by_type, type);
334
+ case PhysicalType::INT128:
335
+ return GetArgMinMaxFunctionInternal<OP, ARG_TYPE, hugeint_t>(by_type, type);
331
336
  case PhysicalType::DOUBLE:
332
337
  return GetArgMinMaxFunctionInternal<OP, ARG_TYPE, double>(by_type, type);
333
338
  case PhysicalType::VARCHAR:
334
339
  return GetArgMinMaxFunctionInternal<OP, ARG_TYPE, string_t>(by_type, type);
335
340
  default:
336
- throw InternalException("Unimplemented arg_min/arg_max aggregate");
341
+ throw InternalException("Unimplemented arg_min/arg_max by aggregate");
337
342
  }
338
343
  }
339
344
 
@@ -365,6 +370,25 @@ static unique_ptr<FunctionData> BindDecimalArgMinMax(ClientContext &context, Agg
365
370
  vector<unique_ptr<Expression>> &arguments) {
366
371
  auto decimal_type = arguments[0]->return_type;
367
372
  auto by_type = arguments[1]->return_type;
373
+
374
+ // To avoid a combinatorial explosion, cast the ordering argument to one from the list
375
+ auto by_types = ArgMaxByTypes();
376
+ idx_t best_target = DConstants::INVALID_INDEX;
377
+ int64_t lowest_cost = NumericLimits<int64_t>::Maximum();
378
+ for (idx_t i = 0; i < by_types.size(); ++i) {
379
+ auto cast_cost = CastFunctionSet::Get(context).ImplicitCastCost(by_type, by_types[i]);
380
+ if (cast_cost < 0) {
381
+ continue;
382
+ }
383
+ if (cast_cost < lowest_cost) {
384
+ best_target = i;
385
+ }
386
+ }
387
+
388
+ if (best_target != DConstants::INVALID_INDEX) {
389
+ by_type = by_types[best_target];
390
+ }
391
+
368
392
  auto name = std::move(function.name);
369
393
  function = GetDecimalArgMinMaxFunction<OP>(by_type, decimal_type);
370
394
  function.name = std::move(name);
@@ -146,7 +146,7 @@ struct BitStringBitwiseOperation : public BitwiseOperation {
146
146
  auto ptr = new char[len];
147
147
  memcpy(ptr, input.GetData(), len);
148
148
 
149
- state.value = string_t(ptr, len);
149
+ state.value = string_t(ptr, UnsafeNumericCast<uint32_t>(len));
150
150
  }
151
151
  }
152
152
 
@@ -64,6 +64,10 @@ struct BitStringAggOperation {
64
64
  }
65
65
  state.min = bind_agg_data.min.GetValue<INPUT_TYPE>();
66
66
  state.max = bind_agg_data.max.GetValue<INPUT_TYPE>();
67
+ if (state.min > state.max) {
68
+ throw InvalidInputException("Invalid explicit bitstring range: Minimum (%s) > maximum (%s)",
69
+ NumericHelper::ToString(state.min), NumericHelper::ToString(state.max));
70
+ }
67
71
  idx_t bit_range =
68
72
  GetRange(bind_agg_data.min.GetValue<INPUT_TYPE>(), bind_agg_data.max.GetValue<INPUT_TYPE>());
69
73
  if (bit_range > MAX_BIT_RANGE) {
@@ -72,7 +76,8 @@ struct BitStringAggOperation {
72
76
  NumericHelper::ToString(state.min), NumericHelper::ToString(state.max));
73
77
  }
74
78
  idx_t len = Bit::ComputeBitstringLen(bit_range);
75
- auto target = len > string_t::INLINE_LENGTH ? string_t(new char[len], len) : string_t(len);
79
+ auto target = len > string_t::INLINE_LENGTH ? string_t(new char[len], UnsafeNumericCast<uint32_t>(len))
80
+ : string_t(UnsafeNumericCast<uint32_t>(len));
76
81
  Bit::SetEmptyBitString(target, bit_range);
77
82
 
78
83
  state.value = target;
@@ -95,7 +100,9 @@ struct BitStringAggOperation {
95
100
 
96
101
  template <class INPUT_TYPE>
97
102
  static idx_t GetRange(INPUT_TYPE min, INPUT_TYPE max) {
98
- D_ASSERT(max >= min);
103
+ if (min > max) {
104
+ throw InvalidInputException("Invalid explicit bitstring range: Minimum (%d) > maximum (%d)", min, max);
105
+ }
99
106
  INPUT_TYPE result;
100
107
  if (!TrySubtractOperator::Operation(max, min, result)) {
101
108
  return NumericLimits<idx_t>::Maximum();
@@ -136,7 +143,7 @@ struct BitStringAggOperation {
136
143
  auto len = input.GetSize();
137
144
  auto ptr = new char[len];
138
145
  memcpy(ptr, input.GetData(), len);
139
- state.value = string_t(ptr, len);
146
+ state.value = string_t(ptr, UnsafeNumericCast<uint32_t>(len));
140
147
  }
141
148
  }
142
149
 
@@ -178,7 +185,7 @@ idx_t BitStringAggOperation::GetRange(hugeint_t min, hugeint_t max) {
178
185
  return NumericLimits<idx_t>::Maximum();
179
186
  }
180
187
  idx_t range;
181
- if (!Hugeint::TryCast(result + 1, range)) {
188
+ if (!Hugeint::TryCast(result + 1, range) || result == NumericLimits<hugeint_t>::Maximum()) {
182
189
  return NumericLimits<idx_t>::Maximum();
183
190
  }
184
191
  return range;
@@ -201,7 +208,7 @@ idx_t BitStringAggOperation::GetRange(uhugeint_t min, uhugeint_t max) {
201
208
  return NumericLimits<idx_t>::Maximum();
202
209
  }
203
210
  idx_t range;
204
- if (!Uhugeint::TryCast(result + 1, range)) {
211
+ if (!Uhugeint::TryCast(result + 1, range) || result == NumericLimits<uhugeint_t>::Maximum()) {
205
212
  return NumericLimits<idx_t>::Maximum();
206
213
  }
207
214
  return range;
@@ -166,7 +166,7 @@ struct StringMinMaxBase : public MinMaxBase {
166
166
  auto ptr = new char[len];
167
167
  memcpy(ptr, input.GetData(), len);
168
168
 
169
- state.value = string_t(ptr, len);
169
+ state.value = string_t(ptr, UnsafeNumericCast<uint32_t>(len));
170
170
  }
171
171
  }
172
172
 
@@ -457,7 +457,7 @@ struct VectorMinMaxBase {
457
457
  state.value = new Vector(input.GetType());
458
458
  state.value->SetVectorType(VectorType::CONSTANT_VECTOR);
459
459
  }
460
- sel_t selv = idx;
460
+ sel_t selv = UnsafeNumericCast<sel_t>(idx);
461
461
  SelectionVector sel(&selv);
462
462
  VectorOperations::Copy(input, *state.value, sel, 1, 0, 0);
463
463
  }
@@ -113,7 +113,8 @@ struct StringAggFunction {
113
113
  // source is not set: skip combining
114
114
  return;
115
115
  }
116
- PerformOperation(target, string_t(source.dataptr, source.size), aggr_input_data.bind_data);
116
+ PerformOperation(target, string_t(source.dataptr, UnsafeNumericCast<uint32_t>(source.size)),
117
+ aggr_input_data.bind_data);
117
118
  }
118
119
  };
119
120
 
@@ -0,0 +1,13 @@
1
+ // Unity Build generated by CMake
2
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/distributive/approx_count.cpp>
3
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/distributive/arg_min_max.cpp>
4
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/distributive/bitagg.cpp>
5
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/distributive/bitstring_agg.cpp>
6
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/distributive/bool.cpp>
7
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/distributive/entropy.cpp>
8
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/distributive/kurtosis.cpp>
9
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/distributive/minmax.cpp>
10
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/distributive/product.cpp>
11
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/distributive/skew.cpp>
12
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/distributive/string_agg.cpp>
13
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/distributive/sum.cpp>
@@ -19,7 +19,8 @@ struct hash<duckdb::interval_t> {
19
19
  inline size_t operator()(const duckdb::interval_t &val) const {
20
20
  int64_t months, days, micros;
21
21
  val.Normalize(months, days, micros);
22
- return hash<int32_t> {}(days) ^ hash<int32_t> {}(months) ^ hash<int64_t> {}(micros);
22
+ return hash<int32_t> {}(duckdb::UnsafeNumericCast<int32_t>(days)) ^
23
+ hash<int32_t> {}(duckdb::UnsafeNumericCast<int32_t>(months)) ^ hash<int64_t> {}(micros);
23
24
  }
24
25
  };
25
26
 
@@ -21,12 +21,6 @@
21
21
 
22
22
  namespace duckdb {
23
23
 
24
- // Hugeint arithmetic
25
- static hugeint_t MultiplyByDouble(const hugeint_t &h, const double &d) {
26
- D_ASSERT(d >= 0 && d <= 1);
27
- return Hugeint::Convert(Hugeint::Cast<double>(h) * d);
28
- }
29
-
30
24
  // Interval arithmetic
31
25
  static interval_t MultiplyByDouble(const interval_t &i, const double &d) { // NOLINT
32
26
  D_ASSERT(d >= 0 && d <= 1);
@@ -189,8 +183,7 @@ timestamp_t CastInterpolation::Interpolate(const timestamp_t &lo, const double d
189
183
 
190
184
  template <>
191
185
  hugeint_t CastInterpolation::Interpolate(const hugeint_t &lo, const double d, const hugeint_t &hi) {
192
- const hugeint_t delta = hi - lo;
193
- return lo + MultiplyByDouble(delta, d);
186
+ return Hugeint::Convert(Interpolate(Hugeint::Cast<double>(lo), d, Hugeint::Cast<double>(hi)));
194
187
  }
195
188
 
196
189
  template <>
@@ -1263,7 +1256,7 @@ struct MadAccessor {
1263
1256
  }
1264
1257
 
1265
1258
  inline RESULT_TYPE operator()(const INPUT_TYPE &input) const {
1266
- const auto delta = input - median;
1259
+ const RESULT_TYPE delta = input - UnsafeNumericCast<RESULT_TYPE>(median);
1267
1260
  return TryAbsOperator::Operation<RESULT_TYPE, RESULT_TYPE>(delta);
1268
1261
  }
1269
1262
  };
@@ -0,0 +1,5 @@
1
+ // Unity Build generated by CMake
2
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/holistic/quantile.cpp>
3
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/holistic/mode.cpp>
4
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp>
5
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp>
@@ -0,0 +1,3 @@
1
+ // Unity Build generated by CMake
2
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/nested/list.cpp>
3
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/nested/histogram.cpp>
@@ -0,0 +1,8 @@
1
+ // Unity Build generated by CMake
2
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp>
3
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/regression/regr_count.cpp>
4
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/regression/regr_slope.cpp>
5
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp>
6
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp>
7
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp>
8
+ #include </Users/carlo/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp>
@@ -375,6 +375,7 @@ static StaticFunctionDefinition internal_functions[] = {
375
375
  DUCKDB_SCALAR_FUNCTION(UnionExtractFun),
376
376
  DUCKDB_SCALAR_FUNCTION(UnionTagFun),
377
377
  DUCKDB_SCALAR_FUNCTION(UnionValueFun),
378
+ DUCKDB_SCALAR_FUNCTION(UnpivotListFun),
378
379
  DUCKDB_SCALAR_FUNCTION(UUIDFun),
379
380
  DUCKDB_AGGREGATE_FUNCTION(VarPopFun),
380
381
  DUCKDB_AGGREGATE_FUNCTION(VarSampFun),
@@ -41,7 +41,7 @@ struct GetBitOperator {
41
41
  throw OutOfRangeException("bit index %s out of valid range (0..%s)", NumericHelper::ToString(n),
42
42
  NumericHelper::ToString(Bit::BitLength(input) - 1));
43
43
  }
44
- return Bit::GetBit(input, n);
44
+ return UnsafeNumericCast<TR>(Bit::GetBit(input, n));
45
45
  }
46
46
  };
47
47
 
@@ -85,7 +85,7 @@ struct BitPositionOperator {
85
85
  if (substring.GetSize() > input.GetSize()) {
86
86
  return 0;
87
87
  }
88
- return Bit::BitPosition(substring, input);
88
+ return UnsafeNumericCast<TR>(Bit::BitPosition(substring, input));
89
89
  }
90
90
  };
91
91
 
@@ -0,0 +1,2 @@
1
+ // Unity Build generated by CMake
2
+ #include </Users/carlo/duckdb/src/core_functions/scalar/bit/bitstring.cpp>
@@ -0,0 +1,3 @@
1
+ // Unity Build generated by CMake
2
+ #include </Users/carlo/duckdb/src/core_functions/scalar/blob/base64.cpp>
3
+ #include </Users/carlo/duckdb/src/core_functions/scalar/blob/encode.cpp>
@@ -202,22 +202,30 @@ int64_t DateDiff::MicrosecondsOperator::Operation(timestamp_t startdate, timesta
202
202
 
203
203
  template <>
204
204
  int64_t DateDiff::MillisecondsOperator::Operation(timestamp_t startdate, timestamp_t enddate) {
205
+ D_ASSERT(Timestamp::IsFinite(startdate));
206
+ D_ASSERT(Timestamp::IsFinite(enddate));
205
207
  return Timestamp::GetEpochMs(enddate) - Timestamp::GetEpochMs(startdate);
206
208
  }
207
209
 
208
210
  template <>
209
211
  int64_t DateDiff::SecondsOperator::Operation(timestamp_t startdate, timestamp_t enddate) {
212
+ D_ASSERT(Timestamp::IsFinite(startdate));
213
+ D_ASSERT(Timestamp::IsFinite(enddate));
210
214
  return Timestamp::GetEpochSeconds(enddate) - Timestamp::GetEpochSeconds(startdate);
211
215
  }
212
216
 
213
217
  template <>
214
218
  int64_t DateDiff::MinutesOperator::Operation(timestamp_t startdate, timestamp_t enddate) {
219
+ D_ASSERT(Timestamp::IsFinite(startdate));
220
+ D_ASSERT(Timestamp::IsFinite(enddate));
215
221
  return Timestamp::GetEpochSeconds(enddate) / Interval::SECS_PER_MINUTE -
216
222
  Timestamp::GetEpochSeconds(startdate) / Interval::SECS_PER_MINUTE;
217
223
  }
218
224
 
219
225
  template <>
220
226
  int64_t DateDiff::HoursOperator::Operation(timestamp_t startdate, timestamp_t enddate) {
227
+ D_ASSERT(Timestamp::IsFinite(startdate));
228
+ D_ASSERT(Timestamp::IsFinite(enddate));
221
229
  return Timestamp::GetEpochSeconds(enddate) / Interval::SECS_PER_HOUR -
222
230
  Timestamp::GetEpochSeconds(startdate) / Interval::SECS_PER_HOUR;
223
231
  }
@@ -395,8 +395,11 @@ struct DatePart {
395
395
  static void Inverse(DataChunk &input, ExpressionState &state, Vector &result) {
396
396
  D_ASSERT(input.ColumnCount() == 1);
397
397
 
398
- UnaryExecutor::Execute<int64_t, timestamp_t>(input.data[0], result, input.size(),
399
- [&](int64_t input) { return Timestamp::FromEpochMs(input); });
398
+ UnaryExecutor::Execute<int64_t, timestamp_t>(input.data[0], result, input.size(), [&](int64_t input) {
399
+ // milisecond amounts provided to epoch_ms should never be considered infinite
400
+ // instead such values will just throw when converted to microseconds
401
+ return Timestamp::FromEpochMsPossiblyInfinite(input);
402
+ });
400
403
  }
401
404
  };
402
405
 
@@ -501,7 +504,7 @@ struct DatePart {
501
504
  auto time = Time::NormalizeTimeTZ(timetz);
502
505
  date_t date(0);
503
506
  time = Interval::Add(time, interval, date);
504
- auto offset = interval.micros / Interval::MICROS_PER_SEC;
507
+ auto offset = UnsafeNumericCast<int32_t>(interval.micros / Interval::MICROS_PER_SEC);
505
508
  return TR(time, offset);
506
509
  }
507
510
 
@@ -999,11 +1002,13 @@ int64_t DatePart::YearWeekOperator::Operation(dtime_tz_t input) {
999
1002
 
1000
1003
  template <>
1001
1004
  int64_t DatePart::EpochNanosecondsOperator::Operation(timestamp_t input) {
1005
+ D_ASSERT(Timestamp::IsFinite(input));
1002
1006
  return Timestamp::GetEpochNanoSeconds(input);
1003
1007
  }
1004
1008
 
1005
1009
  template <>
1006
1010
  int64_t DatePart::EpochNanosecondsOperator::Operation(date_t input) {
1011
+ D_ASSERT(Date::IsFinite(input));
1007
1012
  return Date::EpochNanoseconds(input);
1008
1013
  }
1009
1014
 
@@ -1032,6 +1037,12 @@ int64_t DatePart::EpochMicrosecondsOperator::Operation(interval_t input) {
1032
1037
  return Interval::GetMicro(input);
1033
1038
  }
1034
1039
 
1040
+ template <>
1041
+ int64_t DatePart::EpochMillisOperator::Operation(timestamp_t input) {
1042
+ D_ASSERT(Timestamp::IsFinite(input));
1043
+ return Timestamp::GetEpochMs(input);
1044
+ }
1045
+
1035
1046
  template <>
1036
1047
  int64_t DatePart::EpochMicrosecondsOperator::Operation(dtime_t input) {
1037
1048
  return input.micros;
@@ -1064,6 +1075,7 @@ int64_t DatePart::EpochMillisOperator::Operation(dtime_tz_t input) {
1064
1075
 
1065
1076
  template <>
1066
1077
  int64_t DatePart::MicrosecondsOperator::Operation(timestamp_t input) {
1078
+ D_ASSERT(Timestamp::IsFinite(input));
1067
1079
  auto time = Timestamp::GetTime(input);
1068
1080
  // remove everything but the second & microsecond part
1069
1081
  return time.micros % Interval::MICROS_PER_MINUTE;
@@ -1088,6 +1100,7 @@ int64_t DatePart::MicrosecondsOperator::Operation(dtime_tz_t input) {
1088
1100
 
1089
1101
  template <>
1090
1102
  int64_t DatePart::MillisecondsOperator::Operation(timestamp_t input) {
1103
+ D_ASSERT(Timestamp::IsFinite(input));
1091
1104
  return MicrosecondsOperator::Operation<timestamp_t, int64_t>(input) / Interval::MICROS_PER_MSEC;
1092
1105
  }
1093
1106
 
@@ -1108,6 +1121,7 @@ int64_t DatePart::MillisecondsOperator::Operation(dtime_tz_t input) {
1108
1121
 
1109
1122
  template <>
1110
1123
  int64_t DatePart::SecondsOperator::Operation(timestamp_t input) {
1124
+ D_ASSERT(Timestamp::IsFinite(input));
1111
1125
  return MicrosecondsOperator::Operation<timestamp_t, int64_t>(input) / Interval::MICROS_PER_SEC;
1112
1126
  }
1113
1127
 
@@ -1128,6 +1142,7 @@ int64_t DatePart::SecondsOperator::Operation(dtime_tz_t input) {
1128
1142
 
1129
1143
  template <>
1130
1144
  int64_t DatePart::MinutesOperator::Operation(timestamp_t input) {
1145
+ D_ASSERT(Timestamp::IsFinite(input));
1131
1146
  auto time = Timestamp::GetTime(input);
1132
1147
  // remove the hour part, and truncate to minutes
1133
1148
  return (time.micros % Interval::MICROS_PER_HOUR) / Interval::MICROS_PER_MINUTE;
@@ -1152,6 +1167,7 @@ int64_t DatePart::MinutesOperator::Operation(dtime_tz_t input) {
1152
1167
 
1153
1168
  template <>
1154
1169
  int64_t DatePart::HoursOperator::Operation(timestamp_t input) {
1170
+ D_ASSERT(Timestamp::IsFinite(input));
1155
1171
  return Timestamp::GetTime(input).micros / Interval::MICROS_PER_HOUR;
1156
1172
  }
1157
1173
 
@@ -1172,6 +1188,7 @@ int64_t DatePart::HoursOperator::Operation(dtime_tz_t input) {
1172
1188
 
1173
1189
  template <>
1174
1190
  double DatePart::EpochOperator::Operation(timestamp_t input) {
1191
+ D_ASSERT(Timestamp::IsFinite(input));
1175
1192
  return Timestamp::GetEpochMicroSeconds(input) / double(Interval::MICROS_PER_SEC);
1176
1193
  }
1177
1194
 
@@ -1218,6 +1235,7 @@ unique_ptr<BaseStatistics> DatePart::EpochOperator::PropagateStatistics<dtime_t>
1218
1235
 
1219
1236
  template <>
1220
1237
  int64_t DatePart::EraOperator::Operation(timestamp_t input) {
1238
+ D_ASSERT(Timestamp::IsFinite(input));
1221
1239
  return EraOperator::Operation<date_t, int64_t>(Timestamp::GetDate(input));
1222
1240
  }
1223
1241
 
@@ -1407,6 +1425,7 @@ void DatePart::StructOperator::Operation(bigint_vec &bigint_values, double_vec &
1407
1425
  template <>
1408
1426
  void DatePart::StructOperator::Operation(bigint_vec &bigint_values, double_vec &double_values, const timestamp_t &input,
1409
1427
  const idx_t idx, const part_mask_t mask) {
1428
+ D_ASSERT(Timestamp::IsFinite(input));
1410
1429
  date_t d;
1411
1430
  dtime_t t;
1412
1431
  Timestamp::Convert(input, d, t);
@@ -1,4 +1,5 @@
1
1
  #include "duckdb/core_functions/scalar/date_functions.hpp"
2
+ #include "duckdb/common/operator/cast_operators.hpp"
2
3
  #include "duckdb/common/types/date.hpp"
3
4
  #include "duckdb/common/types/time.hpp"
4
5
  #include "duckdb/common/types/timestamp.hpp"
@@ -13,7 +14,8 @@ namespace duckdb {
13
14
  struct MakeDateOperator {
14
15
  template <typename YYYY, typename MM, typename DD, typename RESULT_TYPE>
15
16
  static RESULT_TYPE Operation(YYYY yyyy, MM mm, DD dd) {
16
- return Date::FromDate(yyyy, mm, dd);
17
+ return Date::FromDate(Cast::Operation<YYYY, int32_t>(yyyy), Cast::Operation<MM, int32_t>(mm),
18
+ Cast::Operation<DD, int32_t>(dd));
17
19
  }
18
20
  };
19
21
 
@@ -28,6 +30,16 @@ static void ExecuteMakeDate(DataChunk &input, ExpressionState &state, Vector &re
28
30
  MakeDateOperator::Operation<T, T, T, date_t>);
29
31
  }
30
32
 
33
+ template <typename T>
34
+ static date_t FromDateCast(T year, T month, T day) {
35
+ date_t result;
36
+ if (!Date::TryFromDate(Cast::Operation<T, int32_t>(year), Cast::Operation<T, int32_t>(month),
37
+ Cast::Operation<T, int32_t>(day), result)) {
38
+ throw ConversionException("Date out of range: %d-%d-%d", year, month, day);
39
+ }
40
+ return result;
41
+ }
42
+
31
43
  template <typename T>
32
44
  static void ExecuteStructMakeDate(DataChunk &input, ExpressionState &state, Vector &result) {
33
45
  // this should be guaranteed by the binder
@@ -40,18 +52,28 @@ static void ExecuteStructMakeDate(DataChunk &input, ExpressionState &state, Vect
40
52
  auto &mm = *children[1];
41
53
  auto &dd = *children[2];
42
54
 
43
- TernaryExecutor::Execute<T, T, T, date_t>(yyyy, mm, dd, result, input.size(), Date::FromDate);
55
+ TernaryExecutor::Execute<T, T, T, date_t>(yyyy, mm, dd, result, input.size(), FromDateCast<T>);
44
56
  }
45
57
 
46
58
  struct MakeTimeOperator {
47
59
  template <typename HH, typename MM, typename SS, typename RESULT_TYPE>
48
60
  static RESULT_TYPE Operation(HH hh, MM mm, SS ss) {
49
- int64_t secs = ss;
50
- int64_t micros = std::round((ss - secs) * Interval::MICROS_PER_SEC);
51
- if (!Time::IsValidTime(hh, mm, secs, micros)) {
52
- throw ConversionException("Time out of range: %d:%d:%d.%d", hh, mm, secs, micros);
61
+
62
+ auto hh_32 = Cast::Operation<HH, int32_t>(hh);
63
+ auto mm_32 = Cast::Operation<MM, int32_t>(mm);
64
+ // Have to check this separately because safe casting of DOUBLE => INT32 can round.
65
+ int32_t ss_32 = 0;
66
+ if (ss < 0 || ss > Interval::SECS_PER_MINUTE) {
67
+ ss_32 = Cast::Operation<SS, int32_t>(ss);
68
+ } else {
69
+ ss_32 = UnsafeNumericCast<int32_t>(ss);
70
+ }
71
+ auto micros = UnsafeNumericCast<int32_t>(std::round((ss - ss_32) * Interval::MICROS_PER_SEC));
72
+
73
+ if (!Time::IsValidTime(hh_32, mm_32, ss_32, micros)) {
74
+ throw ConversionException("Time out of range: %d:%d:%d.%d", hh_32, mm_32, ss_32, micros);
53
75
  }
54
- return Time::FromTime(hh, mm, secs, micros);
76
+ return Time::FromTime(hh_32, mm_32, ss_32, micros);
55
77
  }
56
78
  };
57
79
 
@@ -81,7 +81,9 @@ struct ToWeeksOperator {
81
81
  static inline TR Operation(TA input) {
82
82
  interval_t result;
83
83
  result.months = 0;
84
- result.days = input * 7;
84
+ if (!TryMultiplyOperator::Operation<int32_t, int32_t, int32_t>(input, Interval::DAYS_PER_WEEK, result.days)) {
85
+ throw OutOfRangeException("Interval value %d weeks out of range", input);
86
+ }
85
87
  result.micros = 0;
86
88
  return result;
87
89
  }
@@ -0,0 +1,12 @@
1
+ // Unity Build generated by CMake
2
+ #include </Users/carlo/duckdb/src/core_functions/scalar/date/age.cpp>
3
+ #include </Users/carlo/duckdb/src/core_functions/scalar/date/current.cpp>
4
+ #include </Users/carlo/duckdb/src/core_functions/scalar/date/epoch.cpp>
5
+ #include </Users/carlo/duckdb/src/core_functions/scalar/date/date_diff.cpp>
6
+ #include </Users/carlo/duckdb/src/core_functions/scalar/date/date_part.cpp>
7
+ #include </Users/carlo/duckdb/src/core_functions/scalar/date/date_sub.cpp>
8
+ #include </Users/carlo/duckdb/src/core_functions/scalar/date/date_trunc.cpp>
9
+ #include </Users/carlo/duckdb/src/core_functions/scalar/date/make_date.cpp>
10
+ #include </Users/carlo/duckdb/src/core_functions/scalar/date/strftime.cpp>
11
+ #include </Users/carlo/duckdb/src/core_functions/scalar/date/time_bucket.cpp>
12
+ #include </Users/carlo/duckdb/src/core_functions/scalar/date/to_interval.cpp>
@@ -0,0 +1,2 @@
1
+ // Unity Build generated by CMake
2
+ #include </Users/carlo/duckdb/src/core_functions/scalar/debug/vector_type.cpp>
@@ -0,0 +1,2 @@
1
+ // Unity Build generated by CMake
2
+ #include </Users/carlo/duckdb/src/core_functions/scalar/enum/enum_functions.cpp>
@@ -0,0 +1,9 @@
1
+ // Unity Build generated by CMake
2
+ #include </Users/carlo/duckdb/src/core_functions/scalar/generic/alias.cpp>
3
+ #include </Users/carlo/duckdb/src/core_functions/scalar/generic/current_setting.cpp>
4
+ #include </Users/carlo/duckdb/src/core_functions/scalar/generic/error.cpp>
5
+ #include </Users/carlo/duckdb/src/core_functions/scalar/generic/hash.cpp>
6
+ #include </Users/carlo/duckdb/src/core_functions/scalar/generic/least.cpp>
7
+ #include </Users/carlo/duckdb/src/core_functions/scalar/generic/stats.cpp>
8
+ #include </Users/carlo/duckdb/src/core_functions/scalar/generic/typeof.cpp>
9
+ #include </Users/carlo/duckdb/src/core_functions/scalar/generic/system_functions.cpp>