duckdb 0.10.2 → 0.10.3-dev10.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 (1055) hide show
  1. package/.github/workflows/NodeJS.yml +95 -4
  2. package/binding.gyp +4 -5
  3. package/examples/example.js +10 -0
  4. package/lib/duckdb.js +11 -0
  5. package/package.json +1 -1
  6. package/src/database.cpp +3 -3
  7. package/src/duckdb/extension/icu/icu_extension.cpp +44 -15
  8. package/src/duckdb/extension/icu/include/icu_extension.hpp +1 -0
  9. package/src/duckdb/extension/icu/third_party/icu/i18n/basictz.cpp +5 -5
  10. package/src/duckdb/extension/json/include/json_common.hpp +6 -1
  11. package/src/duckdb/extension/json/include/json_executors.hpp +5 -5
  12. package/src/duckdb/extension/json/include/json_extension.hpp +1 -0
  13. package/src/duckdb/extension/json/include/json_functions.hpp +2 -2
  14. package/src/duckdb/extension/json/include/json_serializer.hpp +2 -2
  15. package/src/duckdb/extension/json/json_common.cpp +69 -43
  16. package/src/duckdb/extension/json/json_extension.cpp +8 -0
  17. package/src/duckdb/extension/json/json_functions/copy_json.cpp +17 -16
  18. package/src/duckdb/extension/json/json_functions/json_create.cpp +3 -1
  19. package/src/duckdb/extension/json/json_functions/json_structure.cpp +18 -13
  20. package/src/duckdb/extension/json/json_functions/json_transform.cpp +4 -0
  21. package/src/duckdb/extension/json/json_functions/json_type.cpp +2 -2
  22. package/src/duckdb/extension/json/json_functions/read_json.cpp +14 -11
  23. package/src/duckdb/extension/json/json_functions/read_json_objects.cpp +11 -8
  24. package/src/duckdb/extension/json/json_functions.cpp +4 -3
  25. package/src/duckdb/extension/json/json_scan.cpp +21 -11
  26. package/src/duckdb/extension/parquet/column_reader.cpp +9 -5
  27. package/src/duckdb/extension/parquet/column_writer.cpp +31 -18
  28. package/src/duckdb/extension/parquet/include/column_writer.hpp +1 -0
  29. package/src/duckdb/extension/parquet/include/null_column_reader.hpp +54 -0
  30. package/src/duckdb/extension/parquet/include/parquet_extension.hpp +1 -0
  31. package/src/duckdb/extension/parquet/include/parquet_reader.hpp +1 -1
  32. package/src/duckdb/extension/parquet/include/parquet_writer.hpp +7 -2
  33. package/src/duckdb/extension/parquet/include/templated_column_reader.hpp +6 -1
  34. package/src/duckdb/extension/parquet/parquet_crypto.cpp +8 -6
  35. package/src/duckdb/extension/parquet/parquet_extension.cpp +271 -126
  36. package/src/duckdb/extension/parquet/parquet_metadata.cpp +39 -37
  37. package/src/duckdb/extension/parquet/parquet_reader.cpp +7 -4
  38. package/src/duckdb/extension/parquet/parquet_statistics.cpp +5 -4
  39. package/src/duckdb/extension/parquet/parquet_writer.cpp +55 -2
  40. package/src/duckdb/extension/parquet/serialize_parquet.cpp +2 -2
  41. package/src/duckdb/src/catalog/catalog.cpp +19 -39
  42. package/src/duckdb/src/catalog/catalog_entry/duck_index_entry.cpp +6 -6
  43. package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +47 -31
  44. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +84 -52
  45. package/src/duckdb/src/catalog/catalog_entry/index_catalog_entry.cpp +4 -2
  46. package/src/duckdb/src/catalog/catalog_entry/macro_catalog_entry.cpp +4 -0
  47. package/src/duckdb/src/catalog/catalog_entry/schema_catalog_entry.cpp +7 -0
  48. package/src/duckdb/src/catalog/catalog_entry/sequence_catalog_entry.cpp +4 -1
  49. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +36 -15
  50. package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +7 -1
  51. package/src/duckdb/src/catalog/catalog_entry/view_catalog_entry.cpp +5 -1
  52. package/src/duckdb/src/catalog/catalog_entry.cpp +7 -0
  53. package/src/duckdb/src/catalog/catalog_entry_retriever.cpp +64 -0
  54. package/src/duckdb/src/catalog/catalog_set.cpp +32 -17
  55. package/src/duckdb/src/catalog/default/default_functions.cpp +2 -1
  56. package/src/duckdb/src/catalog/default/default_views.cpp +1 -1
  57. package/src/duckdb/src/catalog/dependency_manager.cpp +129 -9
  58. package/src/duckdb/src/catalog/duck_catalog.cpp +5 -0
  59. package/src/duckdb/src/common/adbc/nanoarrow/allocator.cpp +2 -2
  60. package/src/duckdb/src/common/adbc/nanoarrow/metadata.cpp +3 -3
  61. package/src/duckdb/src/common/adbc/nanoarrow/schema.cpp +7 -6
  62. package/src/duckdb/src/common/allocator.cpp +6 -2
  63. package/src/duckdb/src/common/arrow/appender/bool_data.cpp +1 -0
  64. package/src/duckdb/src/common/arrow/appender/struct_data.cpp +1 -1
  65. package/src/duckdb/src/common/arrow/appender/union_data.cpp +2 -1
  66. package/src/duckdb/src/common/arrow/arrow_appender.cpp +7 -5
  67. package/src/duckdb/src/common/arrow/arrow_converter.cpp +3 -5
  68. package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +1 -1
  69. package/src/duckdb/src/common/box_renderer.cpp +6 -3
  70. package/src/duckdb/src/common/compressed_file_system.cpp +11 -7
  71. package/src/duckdb/src/common/enum_util.cpp +230 -17
  72. package/src/duckdb/src/common/enums/logical_operator_type.cpp +2 -0
  73. package/src/duckdb/src/common/enums/physical_operator_type.cpp +2 -0
  74. package/src/duckdb/src/common/enums/relation_type.cpp +2 -0
  75. package/src/duckdb/src/common/enums/statement_type.cpp +2 -0
  76. package/src/duckdb/src/common/error_data.cpp +12 -0
  77. package/src/duckdb/src/common/exception_format_value.cpp +1 -0
  78. package/src/duckdb/src/common/extra_type_info.cpp +86 -8
  79. package/src/duckdb/src/common/file_system.cpp +39 -7
  80. package/src/duckdb/src/common/gzip_file_system.cpp +38 -14
  81. package/src/duckdb/src/common/hive_partitioning.cpp +28 -76
  82. package/src/duckdb/src/common/http_state.cpp +4 -4
  83. package/src/duckdb/src/common/local_file_system.cpp +29 -12
  84. package/src/duckdb/src/common/multi_file_list.cpp +285 -0
  85. package/src/duckdb/src/common/multi_file_reader.cpp +112 -80
  86. package/src/duckdb/src/common/operator/cast_operators.cpp +27 -225
  87. package/src/duckdb/src/common/operator/string_cast.cpp +13 -14
  88. package/src/duckdb/src/common/pipe_file_system.cpp +3 -2
  89. package/src/duckdb/src/common/progress_bar/progress_bar.cpp +1 -1
  90. package/src/duckdb/src/common/random_engine.cpp +2 -1
  91. package/src/duckdb/src/common/re2_regex.cpp +6 -4
  92. package/src/duckdb/src/common/row_operations/row_aggregate.cpp +10 -10
  93. package/src/duckdb/src/common/row_operations/row_external.cpp +4 -3
  94. package/src/duckdb/src/common/row_operations/row_heap_gather.cpp +5 -3
  95. package/src/duckdb/src/common/row_operations/row_heap_scatter.cpp +17 -4
  96. package/src/duckdb/src/common/row_operations/row_radix_scatter.cpp +1 -1
  97. package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +4 -4
  98. package/src/duckdb/src/common/serializer/buffered_file_writer.cpp +9 -8
  99. package/src/duckdb/src/common/serializer/memory_stream.cpp +6 -3
  100. package/src/duckdb/src/common/serializer/serializer.cpp +1 -1
  101. package/src/duckdb/src/common/sort/comparators.cpp +1 -1
  102. package/src/duckdb/src/common/sort/merge_sorter.cpp +2 -2
  103. package/src/duckdb/src/common/sort/partition_state.cpp +6 -6
  104. package/src/duckdb/src/common/sort/radix_sort.cpp +1 -1
  105. package/src/duckdb/src/common/sort/sort_state.cpp +3 -3
  106. package/src/duckdb/src/common/sort/sorted_block.cpp +5 -5
  107. package/src/duckdb/src/common/string_util.cpp +69 -162
  108. package/src/duckdb/src/common/types/bit.cpp +1 -1
  109. package/src/duckdb/src/common/types/blob.cpp +3 -3
  110. package/src/duckdb/src/common/types/cast_helpers.cpp +197 -0
  111. package/src/duckdb/src/common/types/column/column_data_collection.cpp +17 -9
  112. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +1 -1
  113. package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +13 -5
  114. package/src/duckdb/src/common/types/conflict_info.cpp +1 -1
  115. package/src/duckdb/src/common/types/conflict_manager.cpp +1 -1
  116. package/src/duckdb/src/common/types/data_chunk.cpp +1 -1
  117. package/src/duckdb/src/common/types/date.cpp +2 -2
  118. package/src/duckdb/src/common/types/decimal.cpp +12 -12
  119. package/src/duckdb/src/common/types/hash.cpp +1 -1
  120. package/src/duckdb/src/common/types/hugeint.cpp +10 -9
  121. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +4 -4
  122. package/src/duckdb/src/common/types/row/row_data_collection_scanner.cpp +6 -5
  123. package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +21 -18
  124. package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +2 -2
  125. package/src/duckdb/src/common/types/row/tuple_data_segment.cpp +7 -0
  126. package/src/duckdb/src/common/types/string_heap.cpp +4 -0
  127. package/src/duckdb/src/common/types/timestamp.cpp +23 -1
  128. package/src/duckdb/src/common/types/uhugeint.cpp +1 -1
  129. package/src/duckdb/src/common/types/uuid.cpp +7 -6
  130. package/src/duckdb/src/common/types/value.cpp +54 -30
  131. package/src/duckdb/src/common/types/vector.cpp +71 -96
  132. package/src/duckdb/src/common/types/vector_buffer.cpp +4 -0
  133. package/src/duckdb/src/common/types/vector_cache.cpp +3 -3
  134. package/src/duckdb/src/common/types.cpp +124 -18
  135. package/src/duckdb/src/common/vector_operations/generators.cpp +4 -16
  136. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +20 -0
  137. package/src/duckdb/src/common/vector_operations/null_operations.cpp +1 -1
  138. package/src/duckdb/src/common/vector_operations/numeric_inplace_operators.cpp +2 -2
  139. package/src/duckdb/src/core_functions/aggregate/distributive/approx_count.cpp +1 -1
  140. package/src/duckdb/src/core_functions/aggregate/distributive/arg_min_max.cpp +13 -6
  141. package/src/duckdb/src/core_functions/aggregate/distributive/bitagg.cpp +8 -5
  142. package/src/duckdb/src/core_functions/aggregate/distributive/bitstring_agg.cpp +2 -2
  143. package/src/duckdb/src/core_functions/aggregate/distributive/sum.cpp +2 -2
  144. package/src/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp +2 -0
  145. package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +2 -2
  146. package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +8 -5
  147. package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +14 -8
  148. package/src/duckdb/src/core_functions/function_list.cpp +2 -1
  149. package/src/duckdb/src/core_functions/lambda_functions.cpp +2 -2
  150. package/src/duckdb/src/core_functions/scalar/array/array_functions.cpp +5 -0
  151. package/src/duckdb/src/core_functions/scalar/bit/bitstring.cpp +4 -4
  152. package/src/duckdb/src/core_functions/scalar/blob/create_sort_key.cpp +3 -2
  153. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +2 -2
  154. package/src/duckdb/src/core_functions/scalar/date/epoch.cpp +17 -0
  155. package/src/duckdb/src/core_functions/scalar/date/strftime.cpp +1 -1
  156. package/src/duckdb/src/core_functions/scalar/date/to_interval.cpp +19 -0
  157. package/src/duckdb/src/core_functions/scalar/debug/vector_type.cpp +6 -5
  158. package/src/duckdb/src/core_functions/scalar/generic/current_setting.cpp +2 -3
  159. package/src/duckdb/src/core_functions/scalar/generic/system_functions.cpp +2 -2
  160. package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +30 -21
  161. package/src/duckdb/src/core_functions/scalar/list/list_reduce.cpp +1 -1
  162. package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +3 -3
  163. package/src/duckdb/src/core_functions/scalar/list/list_value.cpp +1 -1
  164. package/src/duckdb/src/core_functions/scalar/list/range.cpp +2 -2
  165. package/src/duckdb/src/core_functions/scalar/map/map.cpp +44 -14
  166. package/src/duckdb/src/core_functions/scalar/map/map_concat.cpp +17 -4
  167. package/src/duckdb/src/core_functions/scalar/map/map_entries.cpp +30 -13
  168. package/src/duckdb/src/core_functions/scalar/map/map_extract.cpp +25 -12
  169. package/src/duckdb/src/core_functions/scalar/map/map_keys_values.cpp +16 -4
  170. package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +2 -2
  171. package/src/duckdb/src/core_functions/scalar/operators/bitwise.cpp +2 -2
  172. package/src/duckdb/src/core_functions/scalar/random/setseed.cpp +1 -1
  173. package/src/duckdb/src/core_functions/scalar/string/bar.cpp +1 -1
  174. package/src/duckdb/src/core_functions/scalar/string/chr.cpp +2 -2
  175. package/src/duckdb/src/core_functions/scalar/string/hex.cpp +13 -13
  176. package/src/duckdb/src/core_functions/scalar/string/instr.cpp +1 -1
  177. package/src/duckdb/src/core_functions/scalar/string/pad.cpp +8 -8
  178. package/src/duckdb/src/core_functions/scalar/string/repeat.cpp +15 -7
  179. package/src/duckdb/src/core_functions/scalar/string/string_split.cpp +1 -1
  180. package/src/duckdb/src/core_functions/scalar/string/to_base.cpp +1 -1
  181. package/src/duckdb/src/core_functions/scalar/string/translate.cpp +4 -4
  182. package/src/duckdb/src/core_functions/scalar/string/trim.cpp +13 -9
  183. package/src/duckdb/src/core_functions/scalar/string/unicode.cpp +1 -1
  184. package/src/duckdb/src/execution/adaptive_filter.cpp +1 -1
  185. package/src/duckdb/src/execution/aggregate_hashtable.cpp +17 -8
  186. package/src/duckdb/src/execution/index/art/art.cpp +6 -6
  187. package/src/duckdb/src/execution/index/bound_index.cpp +115 -0
  188. package/src/duckdb/src/execution/index/unbound_index.cpp +30 -0
  189. package/src/duckdb/src/execution/join_hashtable.cpp +2 -1
  190. package/src/duckdb/src/execution/operator/aggregate/aggregate_object.cpp +1 -1
  191. package/src/duckdb/src/execution/operator/aggregate/distinct_aggregate_data.cpp +1 -1
  192. package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +3 -3
  193. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +40 -5
  194. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +2 -2
  195. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +16 -3
  196. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer.cpp +4 -4
  197. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.cpp +2 -12
  198. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_file_handle.cpp +2 -1
  199. package/src/duckdb/src/execution/operator/csv_scanner/scanner/base_scanner.cpp +21 -5
  200. package/src/duckdb/src/execution/operator/csv_scanner/scanner/column_count_scanner.cpp +1 -1
  201. package/src/duckdb/src/execution/operator/csv_scanner/scanner/string_value_scanner.cpp +312 -260
  202. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/csv_sniffer.cpp +2 -2
  203. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp +45 -16
  204. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/header_detection.cpp +19 -18
  205. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_detection.cpp +200 -55
  206. package/src/duckdb/src/execution/operator/csv_scanner/table_function/csv_file_scanner.cpp +26 -23
  207. package/src/duckdb/src/execution/operator/csv_scanner/table_function/global_csv_state.cpp +12 -12
  208. package/src/duckdb/src/execution/operator/csv_scanner/util/csv_error.cpp +7 -7
  209. package/src/duckdb/src/execution/operator/csv_scanner/util/csv_reader_options.cpp +31 -22
  210. package/src/duckdb/src/execution/operator/helper/physical_buffered_collector.cpp +1 -1
  211. package/src/duckdb/src/execution/operator/helper/physical_execute.cpp +1 -1
  212. package/src/duckdb/src/execution/operator/helper/physical_load.cpp +24 -2
  213. package/src/duckdb/src/execution/operator/helper/physical_reservoir_sample.cpp +1 -1
  214. package/src/duckdb/src/execution/operator/helper/physical_update_extensions.cpp +57 -0
  215. package/src/duckdb/src/execution/operator/helper/physical_verify_vector.cpp +13 -8
  216. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +2 -2
  217. package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +9 -9
  218. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +4 -4
  219. package/src/duckdb/src/execution/operator/join/physical_left_delim_join.cpp +1 -1
  220. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +2 -2
  221. package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +2 -2
  222. package/src/duckdb/src/execution/operator/order/physical_order.cpp +3 -2
  223. package/src/duckdb/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +4 -4
  224. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +20 -13
  225. package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +70 -60
  226. package/src/duckdb/src/execution/operator/persistent/physical_delete.cpp +18 -7
  227. package/src/duckdb/src/execution/operator/persistent/physical_export.cpp +88 -12
  228. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +47 -27
  229. package/src/duckdb/src/execution/operator/persistent/physical_update.cpp +34 -9
  230. package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +3 -0
  231. package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +2 -3
  232. package/src/duckdb/src/execution/operator/scan/physical_expression_scan.cpp +22 -7
  233. package/src/duckdb/src/execution/operator/schema/physical_attach.cpp +1 -1
  234. package/src/duckdb/src/execution/operator/schema/physical_create_art_index.cpp +9 -9
  235. package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +1 -1
  236. package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +5 -4
  237. package/src/duckdb/src/execution/physical_operator.cpp +2 -2
  238. package/src/duckdb/src/execution/physical_plan/plan_column_data_get.cpp +2 -4
  239. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +1 -1
  240. package/src/duckdb/src/execution/physical_plan/plan_create_table.cpp +2 -2
  241. package/src/duckdb/src/execution/physical_plan/plan_cte.cpp +1 -1
  242. package/src/duckdb/src/execution/physical_plan/plan_delete.cpp +2 -2
  243. package/src/duckdb/src/execution/physical_plan/plan_delim_get.cpp +2 -2
  244. package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +1 -0
  245. package/src/duckdb/src/execution/physical_plan/plan_expression_get.cpp +4 -5
  246. package/src/duckdb/src/execution/physical_plan/plan_insert.cpp +6 -5
  247. package/src/duckdb/src/execution/physical_plan/plan_recursive_cte.cpp +1 -1
  248. package/src/duckdb/src/execution/physical_plan/plan_simple.cpp +4 -0
  249. package/src/duckdb/src/execution/physical_plan/plan_top_n.cpp +2 -2
  250. package/src/duckdb/src/execution/physical_plan/plan_update.cpp +3 -3
  251. package/src/duckdb/src/execution/physical_plan/plan_window.cpp +1 -24
  252. package/src/duckdb/src/execution/physical_plan_generator.cpp +3 -0
  253. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +38 -33
  254. package/src/duckdb/src/execution/reservoir_sample.cpp +42 -31
  255. package/src/duckdb/src/execution/window_executor.cpp +39 -39
  256. package/src/duckdb/src/execution/window_segment_tree.cpp +5 -2
  257. package/src/duckdb/src/function/aggregate/distributive/first.cpp +1 -1
  258. package/src/duckdb/src/function/cast/string_cast.cpp +3 -3
  259. package/src/duckdb/src/function/cast_rules.cpp +1 -0
  260. package/src/duckdb/src/function/function.cpp +2 -2
  261. package/src/duckdb/src/function/function_binder.cpp +9 -4
  262. package/src/duckdb/src/function/pragma/pragma_functions.cpp +2 -1
  263. package/src/duckdb/src/function/pragma/pragma_queries.cpp +4 -3
  264. package/src/duckdb/src/function/scalar/compressed_materialization/compress_string.cpp +1 -1
  265. package/src/duckdb/src/function/scalar/list/list_extract.cpp +3 -2
  266. package/src/duckdb/src/function/scalar/list/list_resize.cpp +1 -1
  267. package/src/duckdb/src/function/scalar/list/list_select.cpp +11 -4
  268. package/src/duckdb/src/function/scalar/list/list_zip.cpp +3 -1
  269. package/src/duckdb/src/function/scalar/operators/add.cpp +19 -9
  270. package/src/duckdb/src/function/scalar/sequence/nextval.cpp +77 -48
  271. package/src/duckdb/src/function/scalar/strftime_format.cpp +61 -39
  272. package/src/duckdb/src/function/scalar/string/caseconvert.cpp +12 -12
  273. package/src/duckdb/src/function/scalar/string/contains.cpp +2 -2
  274. package/src/duckdb/src/function/scalar/string/length.cpp +9 -9
  275. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +2 -2
  276. package/src/duckdb/src/function/scalar/string/strip_accents.cpp +2 -1
  277. package/src/duckdb/src/function/scalar/string/substring.cpp +11 -9
  278. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +2 -2
  279. package/src/duckdb/src/function/scalar_function.cpp +2 -1
  280. package/src/duckdb/src/function/table/arrow.cpp +18 -4
  281. package/src/duckdb/src/function/table/arrow_conversion.cpp +88 -66
  282. package/src/duckdb/src/function/table/copy_csv.cpp +94 -28
  283. package/src/duckdb/src/function/table/glob.cpp +17 -9
  284. package/src/duckdb/src/function/table/read_csv.cpp +37 -14
  285. package/src/duckdb/src/function/table/read_file.cpp +6 -2
  286. package/src/duckdb/src/function/table/repeat.cpp +5 -1
  287. package/src/duckdb/src/function/table/repeat_row.cpp +1 -1
  288. package/src/duckdb/src/function/table/sniff_csv.cpp +9 -3
  289. package/src/duckdb/src/function/table/system/duckdb_columns.cpp +3 -3
  290. package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +31 -16
  291. package/src/duckdb/src/function/table/system/duckdb_databases.cpp +6 -1
  292. package/src/duckdb/src/function/table/system/duckdb_dependencies.cpp +2 -2
  293. package/src/duckdb/src/function/table/system/duckdb_extensions.cpp +48 -6
  294. package/src/duckdb/src/function/table/system/duckdb_functions.cpp +8 -2
  295. package/src/duckdb/src/function/table/system/duckdb_indexes.cpp +9 -4
  296. package/src/duckdb/src/function/table/system/duckdb_memory.cpp +2 -2
  297. package/src/duckdb/src/function/table/system/duckdb_schemas.cpp +7 -2
  298. package/src/duckdb/src/function/table/system/duckdb_sequences.cpp +8 -3
  299. package/src/duckdb/src/function/table/system/duckdb_tables.cpp +18 -10
  300. package/src/duckdb/src/function/table/system/duckdb_temporary_files.cpp +1 -1
  301. package/src/duckdb/src/function/table/system/duckdb_types.cpp +12 -5
  302. package/src/duckdb/src/function/table/system/duckdb_views.cpp +9 -4
  303. package/src/duckdb/src/function/table/system/duckdb_which_secret.cpp +75 -0
  304. package/src/duckdb/src/function/table/system/pragma_database_size.cpp +4 -4
  305. package/src/duckdb/src/function/table/system/pragma_metadata_info.cpp +3 -3
  306. package/src/duckdb/src/function/table/system/pragma_storage_info.cpp +6 -6
  307. package/src/duckdb/src/function/table/system_functions.cpp +1 -0
  308. package/src/duckdb/src/function/table/table_scan.cpp +11 -20
  309. package/src/duckdb/src/function/table/unnest.cpp +1 -1
  310. package/src/duckdb/src/function/table/version/pragma_version.cpp +3 -3
  311. package/src/duckdb/src/function/table_function.cpp +5 -4
  312. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +1 -10
  313. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_index_entry.hpp +1 -1
  314. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_schema_entry.hpp +2 -2
  315. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +6 -8
  316. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/function_entry.hpp +1 -0
  317. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/schema_catalog_entry.hpp +3 -2
  318. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/sequence_catalog_entry.hpp +2 -5
  319. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_catalog_entry.hpp +3 -4
  320. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/type_catalog_entry.hpp +2 -0
  321. package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +4 -0
  322. package/src/duckdb/src/include/duckdb/catalog/catalog_entry_retriever.hpp +72 -0
  323. package/src/duckdb/src/include/duckdb/catalog/catalog_transaction.hpp +3 -0
  324. package/src/duckdb/src/include/duckdb/catalog/dependency.hpp +4 -0
  325. package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +7 -1
  326. package/src/duckdb/src/include/duckdb/catalog/dependency_manager.hpp +2 -2
  327. package/src/duckdb/src/include/duckdb/catalog/standard_entry.hpp +2 -0
  328. package/src/duckdb/src/include/duckdb/common/arrow/appender/append_data.hpp +1 -0
  329. package/src/duckdb/src/include/duckdb/common/arrow/appender/enum_data.hpp +3 -3
  330. package/src/duckdb/src/include/duckdb/common/arrow/appender/map_data.hpp +1 -1
  331. package/src/duckdb/src/include/duckdb/common/arrow/appender/scalar_data.hpp +15 -0
  332. package/src/duckdb/src/include/duckdb/common/arrow/appender/varchar_data.hpp +3 -2
  333. package/src/duckdb/src/include/duckdb/common/bit_utils.hpp +63 -98
  334. package/src/duckdb/src/include/duckdb/common/bitpacking.hpp +4 -4
  335. package/src/duckdb/src/include/duckdb/common/constants.hpp +2 -0
  336. package/src/duckdb/src/include/duckdb/common/enable_shared_from_this.ipp +42 -0
  337. package/src/duckdb/src/include/duckdb/common/enum_util.hpp +43 -3
  338. package/src/duckdb/src/include/duckdb/common/enums/checkpoint_type.hpp +38 -0
  339. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +1 -0
  340. package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +1 -0
  341. package/src/duckdb/src/include/duckdb/common/enums/relation_type.hpp +1 -0
  342. package/src/duckdb/src/include/duckdb/common/enums/scan_options.hpp +3 -1
  343. package/src/duckdb/src/include/duckdb/common/enums/scan_vector_type.hpp +17 -0
  344. package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +1 -0
  345. package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +2 -1
  346. package/src/duckdb/src/include/duckdb/common/enums/undo_flags.hpp +2 -1
  347. package/src/duckdb/src/include/duckdb/common/exception.hpp +0 -1
  348. package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +15 -1
  349. package/src/duckdb/src/include/duckdb/common/file_opener.hpp +4 -0
  350. package/src/duckdb/src/include/duckdb/common/file_system.hpp +3 -0
  351. package/src/duckdb/src/include/duckdb/common/gzip_file_system.hpp +3 -0
  352. package/src/duckdb/src/include/duckdb/common/helper.hpp +22 -1
  353. package/src/duckdb/src/include/duckdb/common/hive_partitioning.hpp +3 -17
  354. package/src/duckdb/src/include/duckdb/common/http_state.hpp +1 -1
  355. package/src/duckdb/src/include/duckdb/common/insertion_order_preserving_map.hpp +129 -0
  356. package/src/duckdb/src/include/duckdb/common/multi_file_list.hpp +151 -0
  357. package/src/duckdb/src/include/duckdb/common/multi_file_reader.hpp +132 -56
  358. package/src/duckdb/src/include/duckdb/common/multi_file_reader_options.hpp +7 -3
  359. package/src/duckdb/src/include/duckdb/common/numeric_utils.hpp +3 -0
  360. package/src/duckdb/src/include/duckdb/common/operator/add.hpp +2 -0
  361. package/src/duckdb/src/include/duckdb/common/operator/decimal_cast_operators.hpp +233 -0
  362. package/src/duckdb/src/include/duckdb/common/operator/integer_cast_operator.hpp +5 -4
  363. package/src/duckdb/src/include/duckdb/common/operator/numeric_cast.hpp +2 -2
  364. package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +5 -0
  365. package/src/duckdb/src/include/duckdb/common/optionally_owned_ptr.hpp +91 -0
  366. package/src/duckdb/src/include/duckdb/common/platform.h +6 -1
  367. package/src/duckdb/src/include/duckdb/common/radix.hpp +12 -4
  368. package/src/duckdb/src/include/duckdb/common/re2_regex.hpp +3 -2
  369. package/src/duckdb/src/include/duckdb/common/row_operations/row_operations.hpp +2 -0
  370. package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +2 -1
  371. package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +8 -6
  372. package/src/duckdb/src/include/duckdb/common/serializer/deserializer.hpp +36 -0
  373. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +65 -0
  374. package/src/duckdb/src/include/duckdb/common/serializer/serializer.hpp +52 -6
  375. package/src/duckdb/src/include/duckdb/common/shared_ptr.hpp +36 -3
  376. package/src/duckdb/src/include/duckdb/common/shared_ptr.ipp +268 -0
  377. package/src/duckdb/src/include/duckdb/common/sort/duckdb_pdqsort.hpp +3 -3
  378. package/src/duckdb/src/include/duckdb/common/string.hpp +3 -2
  379. package/src/duckdb/src/include/duckdb/common/string_util.hpp +11 -7
  380. package/src/duckdb/src/include/duckdb/common/types/bit.hpp +1 -1
  381. package/src/duckdb/src/include/duckdb/common/types/cast_helpers.hpp +43 -215
  382. package/src/duckdb/src/include/duckdb/common/types/datetime.hpp +36 -11
  383. package/src/duckdb/src/include/duckdb/common/types/hash.hpp +1 -1
  384. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_segment.hpp +7 -1
  385. package/src/duckdb/src/include/duckdb/common/types/selection_vector.hpp +1 -1
  386. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +2 -0
  387. package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +2 -0
  388. package/src/duckdb/src/include/duckdb/common/types/validity_mask.hpp +1 -1
  389. package/src/duckdb/src/include/duckdb/common/types/value.hpp +4 -0
  390. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +20 -15
  391. package/src/duckdb/src/include/duckdb/common/types.hpp +14 -2
  392. package/src/duckdb/src/include/duckdb/common/unique_ptr.hpp +7 -6
  393. package/src/duckdb/src/include/duckdb/common/vector.hpp +11 -0
  394. package/src/duckdb/src/include/duckdb/common/vector_size.hpp +1 -1
  395. package/src/duckdb/src/include/duckdb/common/weak_ptr.ipp +117 -0
  396. package/src/duckdb/src/include/duckdb/core_functions/aggregate/sum_helpers.hpp +3 -3
  397. package/src/duckdb/src/include/duckdb/core_functions/scalar/date_functions.hpp +18 -0
  398. package/src/duckdb/src/include/duckdb/execution/adaptive_filter.hpp +1 -0
  399. package/src/duckdb/src/include/duckdb/execution/expression_executor.hpp +1 -1
  400. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +4 -4
  401. package/src/duckdb/src/include/duckdb/execution/index/art/node.hpp +1 -1
  402. package/src/duckdb/src/include/duckdb/execution/index/bound_index.hpp +145 -0
  403. package/src/duckdb/src/include/duckdb/execution/index/index_type.hpp +2 -2
  404. package/src/duckdb/src/include/duckdb/execution/index/unbound_index.hpp +63 -0
  405. package/src/duckdb/src/include/duckdb/execution/merge_sort_tree.hpp +24 -18
  406. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_streaming_window.hpp +2 -0
  407. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_window.hpp +2 -0
  408. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/base_scanner.hpp +10 -3
  409. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/column_count_scanner.hpp +1 -0
  410. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_error.hpp +6 -6
  411. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_reader_options.hpp +7 -6
  412. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_sniffer.hpp +24 -4
  413. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/string_value_scanner.hpp +90 -20
  414. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_update_extensions.hpp +52 -0
  415. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_batch_insert.hpp +3 -1
  416. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_delete.hpp +5 -5
  417. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_export.hpp +1 -0
  418. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_insert.hpp +8 -5
  419. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_update.hpp +4 -1
  420. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_column_data_scan.hpp +4 -5
  421. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_expression_scan.hpp +6 -2
  422. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_cte.hpp +1 -1
  423. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_recursive_cte.hpp +1 -1
  424. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +1 -1
  425. package/src/duckdb/src/include/duckdb/execution/reservoir_sample.hpp +63 -8
  426. package/src/duckdb/src/include/duckdb/function/function.hpp +0 -5
  427. package/src/duckdb/src/include/duckdb/function/function_binder.hpp +6 -3
  428. package/src/duckdb/src/include/duckdb/function/replacement_scan.hpp +25 -2
  429. package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +1 -1
  430. package/src/duckdb/src/include/duckdb/function/scalar/sequence_functions.hpp +3 -4
  431. package/src/duckdb/src/include/duckdb/function/scalar/strftime_format.hpp +5 -0
  432. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +1 -1
  433. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +13 -0
  434. package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +7 -3
  435. package/src/duckdb/src/include/duckdb/function/table/read_csv.hpp +3 -0
  436. package/src/duckdb/src/include/duckdb/function/table/system_functions.hpp +4 -0
  437. package/src/duckdb/src/include/duckdb/function/table_function.hpp +15 -2
  438. package/src/duckdb/src/include/duckdb/logging/http_logger.hpp +81 -0
  439. package/src/duckdb/src/include/duckdb/main/appender.hpp +1 -3
  440. package/src/duckdb/src/include/duckdb/main/attached_database.hpp +1 -1
  441. package/src/duckdb/src/include/duckdb/main/buffered_data/buffered_data.hpp +1 -0
  442. package/src/duckdb/src/include/duckdb/main/capi/cast/generic.hpp +2 -2
  443. package/src/duckdb/src/include/duckdb/main/client_config.hpp +8 -0
  444. package/src/duckdb/src/include/duckdb/main/client_context.hpp +1 -19
  445. package/src/duckdb/src/include/duckdb/main/client_context_state.hpp +11 -1
  446. package/src/duckdb/src/include/duckdb/main/client_context_wrapper.hpp +27 -0
  447. package/src/duckdb/src/include/duckdb/main/client_data.hpp +4 -0
  448. package/src/duckdb/src/include/duckdb/main/config.hpp +36 -3
  449. package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +7 -17
  450. package/src/duckdb/src/include/duckdb/main/database.hpp +25 -20
  451. package/src/duckdb/src/include/duckdb/main/extension.hpp +25 -0
  452. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +155 -10
  453. package/src/duckdb/src/include/duckdb/main/extension_helper.hpp +79 -12
  454. package/src/duckdb/src/include/duckdb/main/extension_install_info.hpp +89 -0
  455. package/src/duckdb/src/include/duckdb/main/extension_util.hpp +3 -1
  456. package/src/duckdb/src/include/duckdb/main/external_dependencies.hpp +46 -4
  457. package/src/duckdb/src/include/duckdb/main/materialized_query_result.hpp +3 -0
  458. package/src/duckdb/src/include/duckdb/main/relation/materialized_relation.hpp +35 -0
  459. package/src/duckdb/src/include/duckdb/main/relation/query_relation.hpp +1 -1
  460. package/src/duckdb/src/include/duckdb/main/relation/table_function_relation.hpp +2 -2
  461. package/src/duckdb/src/include/duckdb/main/relation/table_relation.hpp +1 -1
  462. package/src/duckdb/src/include/duckdb/main/relation/value_relation.hpp +3 -3
  463. package/src/duckdb/src/include/duckdb/main/relation/view_relation.hpp +1 -1
  464. package/src/duckdb/src/include/duckdb/main/relation.hpp +5 -6
  465. package/src/duckdb/src/include/duckdb/main/settings.hpp +47 -0
  466. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +4 -4
  467. package/src/duckdb/src/include/duckdb/optimizer/join_order/cost_model.hpp +1 -1
  468. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_node.hpp +8 -15
  469. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_order_optimizer.hpp +0 -51
  470. package/src/duckdb/src/include/duckdb/optimizer/join_order/plan_enumerator.hpp +10 -17
  471. package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph_manager.hpp +5 -7
  472. package/src/duckdb/src/include/duckdb/optimizer/matcher/set_matcher.hpp +2 -1
  473. package/src/duckdb/src/include/duckdb/optimizer/optimizer_extension.hpp +10 -2
  474. package/src/duckdb/src/include/duckdb/optimizer/rule/list.hpp +1 -0
  475. package/src/duckdb/src/include/duckdb/optimizer/rule/timestamp_comparison.hpp +30 -0
  476. package/src/duckdb/src/include/duckdb/parallel/event.hpp +1 -1
  477. package/src/duckdb/src/include/duckdb/parallel/interrupt.hpp +1 -0
  478. package/src/duckdb/src/include/duckdb/parallel/meta_pipeline.hpp +1 -1
  479. package/src/duckdb/src/include/duckdb/parallel/pipeline.hpp +1 -1
  480. package/src/duckdb/src/include/duckdb/parallel/task.hpp +1 -1
  481. package/src/duckdb/src/include/duckdb/parser/base_expression.hpp +1 -1
  482. package/src/duckdb/src/include/duckdb/parser/column_definition.hpp +2 -0
  483. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +1 -0
  484. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_scalar_function_info.hpp +1 -0
  485. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +1 -0
  486. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +12 -0
  487. package/src/duckdb/src/include/duckdb/parser/parsed_data/attach_info.hpp +1 -0
  488. package/src/duckdb/src/include/duckdb/parser/parsed_data/comment_on_column_info.hpp +3 -1
  489. package/src/duckdb/src/include/duckdb/parser/parsed_data/copy_info.hpp +10 -12
  490. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_info.hpp +6 -2
  491. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_schema_info.hpp +3 -30
  492. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_sequence_info.hpp +2 -0
  493. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_type_info.hpp +12 -1
  494. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_view_info.hpp +1 -0
  495. package/src/duckdb/src/include/duckdb/parser/parsed_data/detach_info.hpp +1 -0
  496. package/src/duckdb/src/include/duckdb/parser/parsed_data/drop_info.hpp +1 -0
  497. package/src/duckdb/src/include/duckdb/parser/parsed_data/exported_table_data.hpp +5 -2
  498. package/src/duckdb/src/include/duckdb/parser/parsed_data/load_info.hpp +4 -7
  499. package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +7 -1
  500. package/src/duckdb/src/include/duckdb/parser/parsed_data/pragma_info.hpp +2 -11
  501. package/src/duckdb/src/include/duckdb/parser/parsed_data/transaction_info.hpp +2 -0
  502. package/src/duckdb/src/include/duckdb/parser/parsed_data/update_extensions_info.hpp +36 -0
  503. package/src/duckdb/src/include/duckdb/parser/parsed_data/vacuum_info.hpp +1 -0
  504. package/src/duckdb/src/include/duckdb/parser/parser_extension.hpp +1 -0
  505. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -2
  506. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +1 -4
  507. package/src/duckdb/src/include/duckdb/parser/statement/alter_statement.hpp +1 -0
  508. package/src/duckdb/src/include/duckdb/parser/statement/attach_statement.hpp +1 -0
  509. package/src/duckdb/src/include/duckdb/parser/statement/call_statement.hpp +1 -0
  510. package/src/duckdb/src/include/duckdb/parser/statement/copy_database_statement.hpp +1 -2
  511. package/src/duckdb/src/include/duckdb/parser/statement/copy_statement.hpp +1 -3
  512. package/src/duckdb/src/include/duckdb/parser/statement/detach_statement.hpp +1 -0
  513. package/src/duckdb/src/include/duckdb/parser/statement/drop_statement.hpp +1 -0
  514. package/src/duckdb/src/include/duckdb/parser/statement/execute_statement.hpp +1 -0
  515. package/src/duckdb/src/include/duckdb/parser/statement/explain_statement.hpp +1 -0
  516. package/src/duckdb/src/include/duckdb/parser/statement/export_statement.hpp +1 -0
  517. package/src/duckdb/src/include/duckdb/parser/statement/extension_statement.hpp +1 -0
  518. package/src/duckdb/src/include/duckdb/parser/statement/insert_statement.hpp +1 -0
  519. package/src/duckdb/src/include/duckdb/parser/statement/list.hpp +1 -0
  520. package/src/duckdb/src/include/duckdb/parser/statement/load_statement.hpp +1 -0
  521. package/src/duckdb/src/include/duckdb/parser/statement/logical_plan_statement.hpp +3 -0
  522. package/src/duckdb/src/include/duckdb/parser/statement/multi_statement.hpp +1 -0
  523. package/src/duckdb/src/include/duckdb/parser/statement/pragma_statement.hpp +1 -0
  524. package/src/duckdb/src/include/duckdb/parser/statement/prepare_statement.hpp +1 -0
  525. package/src/duckdb/src/include/duckdb/parser/statement/relation_statement.hpp +1 -0
  526. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +1 -0
  527. package/src/duckdb/src/include/duckdb/parser/statement/set_statement.hpp +6 -4
  528. package/src/duckdb/src/include/duckdb/parser/statement/transaction_statement.hpp +1 -0
  529. package/src/duckdb/src/include/duckdb/parser/statement/update_extensions_statement.hpp +36 -0
  530. package/src/duckdb/src/include/duckdb/parser/statement/vacuum_statement.hpp +1 -0
  531. package/src/duckdb/src/include/duckdb/parser/tableref/column_data_ref.hpp +46 -0
  532. package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
  533. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +0 -4
  534. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -0
  535. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -0
  536. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +5 -0
  537. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +4 -4
  538. package/src/duckdb/src/include/duckdb/planner/binder.hpp +42 -16
  539. package/src/duckdb/src/include/duckdb/planner/bound_tokens.hpp +1 -0
  540. package/src/duckdb/src/include/duckdb/planner/expression_binder/alter_binder.hpp +7 -6
  541. package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -1
  542. package/src/duckdb/src/include/duckdb/planner/expression_binder/index_binder.hpp +5 -1
  543. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +5 -0
  544. package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +0 -1
  545. package/src/duckdb/src/include/duckdb/planner/operator/logical_column_data_get.hpp +6 -2
  546. package/src/duckdb/src/include/duckdb/planner/operator/logical_delete.hpp +2 -0
  547. package/src/duckdb/src/include/duckdb/planner/operator/logical_export.hpp +7 -0
  548. package/src/duckdb/src/include/duckdb/planner/operator/logical_insert.hpp +2 -0
  549. package/src/duckdb/src/include/duckdb/planner/operator/logical_top_n.hpp +3 -3
  550. package/src/duckdb/src/include/duckdb/planner/operator/logical_update.hpp +2 -0
  551. package/src/duckdb/src/include/duckdb/planner/parsed_data/bound_create_table_info.hpp +0 -4
  552. package/src/duckdb/src/include/duckdb/planner/table_binding.hpp +4 -4
  553. package/src/duckdb/src/include/duckdb/planner/tableref/bound_column_data_ref.hpp +30 -0
  554. package/src/duckdb/src/include/duckdb/planner/tableref/list.hpp +1 -0
  555. package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +6 -3
  556. package/src/duckdb/src/include/duckdb/storage/buffer/buffer_pool.hpp +16 -7
  557. package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +15 -3
  558. package/src/duckdb/src/include/duckdb/storage/checkpoint/row_group_writer.hpp +10 -7
  559. package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +2 -0
  560. package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +24 -15
  561. package/src/duckdb/src/include/duckdb/storage/compression/alp/algorithm/alp.hpp +8 -7
  562. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_compress.hpp +2 -2
  563. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_constants.hpp +5 -4
  564. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_fetch.hpp +1 -1
  565. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_utils.hpp +3 -3
  566. package/src/duckdb/src/include/duckdb/storage/compression/alprd/algorithm/alprd.hpp +2 -1
  567. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_analyze.hpp +5 -3
  568. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_compress.hpp +2 -2
  569. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_fetch.hpp +1 -1
  570. package/src/duckdb/src/include/duckdb/storage/compression/chimp/algorithm/bit_reader.hpp +1 -1
  571. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
  572. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
  573. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +55 -16
  574. package/src/duckdb/src/include/duckdb/storage/index.hpp +33 -97
  575. package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +3 -3
  576. package/src/duckdb/src/include/duckdb/storage/optimistic_data_writer.hpp +1 -1
  577. package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +3 -3
  578. package/src/duckdb/src/include/duckdb/storage/standard_buffer_manager.hpp +22 -9
  579. package/src/duckdb/src/include/duckdb/storage/storage_info.hpp +6 -3
  580. package/src/duckdb/src/include/duckdb/storage/storage_lock.hpp +17 -13
  581. package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +27 -8
  582. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +3 -2
  583. package/src/duckdb/src/include/duckdb/storage/table/append_state.hpp +12 -0
  584. package/src/duckdb/src/include/duckdb/storage/table/array_column_data.hpp +5 -4
  585. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +29 -10
  586. package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +2 -1
  587. package/src/duckdb/src/include/duckdb/storage/table/data_table_info.hpp +32 -6
  588. package/src/duckdb/src/include/duckdb/storage/table/delete_state.hpp +23 -0
  589. package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +5 -4
  590. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +14 -3
  591. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +3 -2
  592. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +4 -0
  593. package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +5 -5
  594. package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +6 -6
  595. package/src/duckdb/src/include/duckdb/storage/table/struct_column_data.hpp +5 -4
  596. package/src/duckdb/src/include/duckdb/storage/table/table_index_list.hpp +25 -1
  597. package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -2
  598. package/src/duckdb/src/include/duckdb/storage/table/update_state.hpp +20 -0
  599. package/src/duckdb/src/include/duckdb/storage/table/validity_column_data.hpp +1 -0
  600. package/src/duckdb/src/include/duckdb/storage/temporary_file_manager.hpp +20 -4
  601. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +10 -5
  602. package/src/duckdb/src/include/duckdb/transaction/duck_transaction.hpp +19 -4
  603. package/src/duckdb/src/include/duckdb/transaction/duck_transaction_manager.hpp +30 -7
  604. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +8 -5
  605. package/src/duckdb/src/include/duckdb/transaction/meta_transaction.hpp +1 -0
  606. package/src/duckdb/src/include/duckdb/transaction/transaction.hpp +8 -0
  607. package/src/duckdb/src/include/duckdb/transaction/undo_buffer.hpp +9 -1
  608. package/src/duckdb/src/include/duckdb.h +15 -11
  609. package/src/duckdb/src/main/appender.cpp +3 -1
  610. package/src/duckdb/src/main/attached_database.cpp +5 -3
  611. package/src/duckdb/src/main/capi/appender-c.cpp +4 -3
  612. package/src/duckdb/src/main/capi/arrow-c.cpp +4 -4
  613. package/src/duckdb/src/main/capi/helper-c.cpp +3 -3
  614. package/src/duckdb/src/main/capi/replacement_scan-c.cpp +6 -5
  615. package/src/duckdb/src/main/capi/result-c.cpp +19 -5
  616. package/src/duckdb/src/main/capi/table_function-c.cpp +1 -1
  617. package/src/duckdb/src/main/client_context.cpp +32 -23
  618. package/src/duckdb/src/main/client_context_file_opener.cpp +31 -0
  619. package/src/duckdb/src/main/client_context_wrapper.cpp +22 -0
  620. package/src/duckdb/src/main/client_data.cpp +5 -3
  621. package/src/duckdb/src/main/config.cpp +71 -2
  622. package/src/duckdb/src/main/connection.cpp +11 -10
  623. package/src/duckdb/src/main/connection_manager.cpp +9 -23
  624. package/src/duckdb/src/main/database.cpp +26 -30
  625. package/src/duckdb/src/main/db_instance_cache.cpp +1 -1
  626. package/src/duckdb/src/main/extension/extension_helper.cpp +396 -17
  627. package/src/duckdb/src/main/extension/extension_install.cpp +297 -89
  628. package/src/duckdb/src/main/extension/extension_load.cpp +137 -135
  629. package/src/duckdb/src/main/extension/extension_util.cpp +8 -2
  630. package/src/duckdb/src/main/extension.cpp +56 -0
  631. package/src/duckdb/src/main/extension_install_info.cpp +116 -0
  632. package/src/duckdb/src/main/materialized_query_result.cpp +11 -0
  633. package/src/duckdb/src/main/query_profiler.cpp +1 -1
  634. package/src/duckdb/src/main/relation/create_view_relation.cpp +6 -0
  635. package/src/duckdb/src/main/relation/materialized_relation.cpp +58 -0
  636. package/src/duckdb/src/main/relation/query_relation.cpp +20 -1
  637. package/src/duckdb/src/main/relation/read_csv_relation.cpp +5 -3
  638. package/src/duckdb/src/main/relation/table_relation.cpp +4 -4
  639. package/src/duckdb/src/main/relation/value_relation.cpp +2 -2
  640. package/src/duckdb/src/main/relation/view_relation.cpp +1 -1
  641. package/src/duckdb/src/main/relation/write_csv_relation.cpp +1 -1
  642. package/src/duckdb/src/main/relation/write_parquet_relation.cpp +1 -1
  643. package/src/duckdb/src/main/relation.cpp +36 -32
  644. package/src/duckdb/src/main/secret/secret.cpp +1 -1
  645. package/src/duckdb/src/main/settings/settings.cpp +137 -11
  646. package/src/duckdb/src/optimizer/common_aggregate_optimizer.cpp +1 -1
  647. package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -3
  648. package/src/duckdb/src/optimizer/filter_pushdown.cpp +3 -2
  649. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +3 -3
  650. package/src/duckdb/src/optimizer/join_order/cost_model.cpp +1 -1
  651. package/src/duckdb/src/optimizer/join_order/join_node.cpp +4 -27
  652. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +5 -8
  653. package/src/duckdb/src/optimizer/join_order/plan_enumerator.cpp +32 -107
  654. package/src/duckdb/src/optimizer/join_order/query_graph_manager.cpp +68 -61
  655. package/src/duckdb/src/optimizer/join_order/relation_manager.cpp +4 -2
  656. package/src/duckdb/src/optimizer/join_order/relation_statistics_helper.cpp +3 -3
  657. package/src/duckdb/src/optimizer/optimizer.cpp +3 -1
  658. package/src/duckdb/src/optimizer/pushdown/pushdown_aggregate.cpp +2 -2
  659. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +1 -1
  660. package/src/duckdb/src/optimizer/pushdown/pushdown_left_join.cpp +2 -2
  661. package/src/duckdb/src/optimizer/pushdown/pushdown_mark_join.cpp +6 -6
  662. package/src/duckdb/src/optimizer/pushdown/pushdown_projection.cpp +1 -1
  663. package/src/duckdb/src/optimizer/pushdown/pushdown_semi_anti_join.cpp +1 -1
  664. package/src/duckdb/src/optimizer/pushdown/pushdown_set_operation.cpp +1 -1
  665. package/src/duckdb/src/optimizer/pushdown/pushdown_single_join.cpp +2 -2
  666. package/src/duckdb/src/optimizer/remove_duplicate_groups.cpp +1 -1
  667. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +1 -1
  668. package/src/duckdb/src/optimizer/rule/arithmetic_simplification.cpp +1 -1
  669. package/src/duckdb/src/optimizer/rule/case_simplification.cpp +2 -2
  670. package/src/duckdb/src/optimizer/rule/conjunction_simplification.cpp +2 -1
  671. package/src/duckdb/src/optimizer/rule/constant_folding.cpp +1 -0
  672. package/src/duckdb/src/optimizer/rule/distributivity.cpp +1 -1
  673. package/src/duckdb/src/optimizer/rule/empty_needle_removal.cpp +1 -0
  674. package/src/duckdb/src/optimizer/rule/enum_comparison.cpp +1 -0
  675. package/src/duckdb/src/optimizer/rule/in_clause_simplification_rule.cpp +1 -0
  676. package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +1 -2
  677. package/src/duckdb/src/optimizer/rule/timestamp_comparison.cpp +107 -0
  678. package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +1 -1
  679. package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +4 -4
  680. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +3 -3
  681. package/src/duckdb/src/optimizer/statistics/operator/propagate_get.cpp +1 -1
  682. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +6 -3
  683. package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +2 -1
  684. package/src/duckdb/src/optimizer/topn_optimizer.cpp +2 -2
  685. package/src/duckdb/src/parallel/executor.cpp +12 -9
  686. package/src/duckdb/src/parallel/meta_pipeline.cpp +2 -2
  687. package/src/duckdb/src/parallel/pipeline.cpp +2 -2
  688. package/src/duckdb/src/parallel/task_scheduler.cpp +9 -3
  689. package/src/duckdb/src/parser/column_definition.cpp +1 -0
  690. package/src/duckdb/src/parser/constraints/foreign_key_constraint.cpp +9 -7
  691. package/src/duckdb/src/parser/expression/star_expression.cpp +2 -2
  692. package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +4 -0
  693. package/src/duckdb/src/parser/parsed_data/alter_table_function_info.cpp +4 -0
  694. package/src/duckdb/src/parser/parsed_data/alter_table_info.cpp +183 -0
  695. package/src/duckdb/src/parser/parsed_data/attach_info.cpp +23 -0
  696. package/src/duckdb/src/parser/parsed_data/comment_on_column_info.cpp +15 -2
  697. package/src/duckdb/src/parser/parsed_data/copy_info.cpp +100 -0
  698. package/src/duckdb/src/parser/parsed_data/create_index_info.cpp +16 -2
  699. package/src/duckdb/src/parser/parsed_data/create_info.cpp +2 -0
  700. package/src/duckdb/src/parser/parsed_data/create_schema_info.cpp +40 -0
  701. package/src/duckdb/src/parser/parsed_data/create_sequence_info.cpp +22 -0
  702. package/src/duckdb/src/parser/parsed_data/create_table_info.cpp +12 -4
  703. package/src/duckdb/src/parser/parsed_data/create_type_info.cpp +37 -14
  704. package/src/duckdb/src/parser/parsed_data/create_view_info.cpp +4 -4
  705. package/src/duckdb/src/parser/parsed_data/detach_info.cpp +12 -0
  706. package/src/duckdb/src/parser/parsed_data/drop_info.cpp +21 -0
  707. package/src/duckdb/src/parser/parsed_data/load_info.cpp +46 -0
  708. package/src/duckdb/src/parser/parsed_data/parse_info.cpp +50 -0
  709. package/src/duckdb/src/parser/parsed_data/pragma_info.cpp +33 -0
  710. package/src/duckdb/src/parser/parsed_data/transaction_info.cpp +22 -0
  711. package/src/duckdb/src/parser/parsed_data/vacuum_info.cpp +20 -0
  712. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +1 -0
  713. package/src/duckdb/src/parser/parser.cpp +5 -4
  714. package/src/duckdb/src/parser/query_node.cpp +6 -2
  715. package/src/duckdb/src/parser/statement/alter_statement.cpp +4 -0
  716. package/src/duckdb/src/parser/statement/attach_statement.cpp +4 -0
  717. package/src/duckdb/src/parser/statement/call_statement.cpp +8 -0
  718. package/src/duckdb/src/parser/statement/copy_statement.cpp +1 -91
  719. package/src/duckdb/src/parser/statement/detach_statement.cpp +4 -0
  720. package/src/duckdb/src/parser/statement/drop_statement.cpp +4 -0
  721. package/src/duckdb/src/parser/statement/execute_statement.cpp +15 -0
  722. package/src/duckdb/src/parser/statement/explain_statement.cpp +19 -0
  723. package/src/duckdb/src/parser/statement/export_statement.cpp +18 -0
  724. package/src/duckdb/src/parser/statement/extension_statement.cpp +4 -0
  725. package/src/duckdb/src/parser/statement/load_statement.cpp +4 -0
  726. package/src/duckdb/src/parser/statement/multi_statement.cpp +8 -0
  727. package/src/duckdb/src/parser/statement/pragma_statement.cpp +4 -0
  728. package/src/duckdb/src/parser/statement/prepare_statement.cpp +13 -0
  729. package/src/duckdb/src/parser/statement/relation_statement.cpp +4 -0
  730. package/src/duckdb/src/parser/statement/set_statement.cpp +33 -4
  731. package/src/duckdb/src/parser/statement/transaction_statement.cpp +4 -0
  732. package/src/duckdb/src/parser/statement/update_extensions_statement.cpp +34 -0
  733. package/src/duckdb/src/parser/statement/vacuum_statement.cpp +4 -0
  734. package/src/duckdb/src/parser/tableref/column_data_ref.cpp +81 -0
  735. package/src/duckdb/src/parser/tableref.cpp +1 -0
  736. package/src/duckdb/src/parser/transform/expression/transform_boolean_test.cpp +2 -2
  737. package/src/duckdb/src/parser/transform/expression/transform_cast.cpp +1 -1
  738. package/src/duckdb/src/parser/transform/expression/transform_interval.cpp +6 -1
  739. package/src/duckdb/src/parser/transform/expression/transform_param_ref.cpp +1 -1
  740. package/src/duckdb/src/parser/transform/expression/transform_positional_reference.cpp +1 -1
  741. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +16 -0
  742. package/src/duckdb/src/parser/transform/helpers/nodetype_to_string.cpp +2 -0
  743. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +97 -63
  744. package/src/duckdb/src/parser/transform/statement/transform_checkpoint.cpp +2 -0
  745. package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +1 -1
  746. package/src/duckdb/src/parser/transform/statement/transform_load.cpp +4 -2
  747. package/src/duckdb/src/parser/transform/statement/transform_update.cpp +19 -0
  748. package/src/duckdb/src/parser/transformer.cpp +5 -2
  749. package/src/duckdb/src/planner/bind_context.cpp +2 -2
  750. package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +35 -8
  751. package/src/duckdb/src/planner/binder/expression/bind_cast_expression.cpp +1 -1
  752. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +13 -7
  753. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +1 -1
  754. package/src/duckdb/src/planner/binder/query_node/plan_setop.cpp +35 -2
  755. package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +0 -2
  756. package/src/duckdb/src/planner/binder/statement/bind_attach.cpp +2 -0
  757. package/src/duckdb/src/planner/binder/statement/bind_call.cpp +2 -0
  758. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +7 -3
  759. package/src/duckdb/src/planner/binder/statement/bind_copy_database.cpp +21 -68
  760. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +141 -28
  761. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +115 -57
  762. package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +4 -0
  763. package/src/duckdb/src/planner/binder/statement/bind_detach.cpp +2 -0
  764. package/src/duckdb/src/planner/binder/statement/bind_drop.cpp +2 -0
  765. package/src/duckdb/src/planner/binder/statement/bind_execute.cpp +4 -2
  766. package/src/duckdb/src/planner/binder/statement/bind_explain.cpp +2 -0
  767. package/src/duckdb/src/planner/binder/statement/bind_export.cpp +15 -4
  768. package/src/duckdb/src/planner/binder/statement/bind_extension.cpp +1 -0
  769. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +5 -1
  770. package/src/duckdb/src/planner/binder/statement/bind_load.cpp +13 -0
  771. package/src/duckdb/src/planner/binder/statement/bind_logical_plan.cpp +2 -0
  772. package/src/duckdb/src/planner/binder/statement/bind_pragma.cpp +2 -0
  773. package/src/duckdb/src/planner/binder/statement/bind_prepare.cpp +1 -0
  774. package/src/duckdb/src/planner/binder/statement/bind_select.cpp +1 -0
  775. package/src/duckdb/src/planner/binder/statement/bind_set.cpp +4 -0
  776. package/src/duckdb/src/planner/binder/statement/bind_simple.cpp +6 -4
  777. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +5 -1
  778. package/src/duckdb/src/planner/binder/statement/bind_update_extensions.cpp +28 -0
  779. package/src/duckdb/src/planner/binder/statement/bind_vacuum.cpp +2 -0
  780. package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +32 -29
  781. package/src/duckdb/src/planner/binder/tableref/bind_column_data_ref.cpp +16 -0
  782. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +7 -4
  783. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +32 -22
  784. package/src/duckdb/src/planner/binder/tableref/plan_column_data_ref.cpp +15 -0
  785. package/src/duckdb/src/planner/binder.cpp +50 -30
  786. package/src/duckdb/src/planner/bound_parameter_map.cpp +1 -1
  787. package/src/duckdb/src/planner/bound_result_modifier.cpp +1 -1
  788. package/src/duckdb/src/planner/expression/bound_expression.cpp +3 -2
  789. package/src/duckdb/src/planner/expression_binder/alter_binder.cpp +24 -7
  790. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +27 -2
  791. package/src/duckdb/src/planner/expression_binder/having_binder.cpp +34 -19
  792. package/src/duckdb/src/planner/expression_binder/index_binder.cpp +33 -0
  793. package/src/duckdb/src/planner/expression_binder/order_binder.cpp +10 -1
  794. package/src/duckdb/src/planner/expression_binder.cpp +4 -0
  795. package/src/duckdb/src/planner/expression_iterator.cpp +3 -1
  796. package/src/duckdb/src/planner/filter/constant_filter.cpp +1 -1
  797. package/src/duckdb/src/planner/operator/logical_column_data_get.cpp +16 -2
  798. package/src/duckdb/src/planner/operator/logical_delete.cpp +2 -0
  799. package/src/duckdb/src/planner/operator/logical_get.cpp +4 -1
  800. package/src/duckdb/src/planner/operator/logical_insert.cpp +2 -0
  801. package/src/duckdb/src/planner/operator/logical_top_n.cpp +1 -1
  802. package/src/duckdb/src/planner/operator/logical_update.cpp +2 -0
  803. package/src/duckdb/src/planner/planner.cpp +35 -9
  804. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +34 -9
  805. package/src/duckdb/src/planner/table_binding.cpp +1 -1
  806. package/src/duckdb/src/storage/arena_allocator.cpp +5 -3
  807. package/src/duckdb/src/storage/buffer/block_handle.cpp +3 -3
  808. package/src/duckdb/src/storage/buffer/block_manager.cpp +1 -1
  809. package/src/duckdb/src/storage/buffer/buffer_pool.cpp +83 -22
  810. package/src/duckdb/src/storage/buffer/buffer_pool_reservation.cpp +2 -2
  811. package/src/duckdb/src/storage/buffer_manager.cpp +6 -2
  812. package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +9 -0
  813. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +7 -2
  814. package/src/duckdb/src/storage/checkpoint_manager.cpp +68 -104
  815. package/src/duckdb/src/storage/compression/bitpacking.cpp +19 -13
  816. package/src/duckdb/src/storage/compression/dictionary_compression.cpp +9 -7
  817. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +1 -1
  818. package/src/duckdb/src/storage/compression/fsst.cpp +11 -7
  819. package/src/duckdb/src/storage/compression/rle.cpp +1 -1
  820. package/src/duckdb/src/storage/compression/string_uncompressed.cpp +5 -4
  821. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +1 -1
  822. package/src/duckdb/src/storage/data_table.cpp +254 -101
  823. package/src/duckdb/src/storage/index.cpp +2 -106
  824. package/src/duckdb/src/storage/local_storage.cpp +38 -50
  825. package/src/duckdb/src/storage/metadata/metadata_manager.cpp +2 -2
  826. package/src/duckdb/src/storage/metadata/metadata_writer.cpp +1 -1
  827. package/src/duckdb/src/storage/optimistic_data_writer.cpp +9 -11
  828. package/src/duckdb/src/storage/partial_block_manager.cpp +6 -6
  829. package/src/duckdb/src/storage/serialization/serialize_create_info.cpp +8 -0
  830. package/src/duckdb/src/storage/serialization/serialize_dependency.cpp +49 -0
  831. package/src/duckdb/src/storage/serialization/serialize_extension_install_info.cpp +28 -0
  832. package/src/duckdb/src/storage/serialization/serialize_logical_operator.cpp +5 -2
  833. package/src/duckdb/src/storage/serialization/serialize_nodes.cpp +78 -2
  834. package/src/duckdb/src/storage/serialization/serialize_parse_info.cpp +21 -0
  835. package/src/duckdb/src/storage/serialization/serialize_tableref.cpp +16 -0
  836. package/src/duckdb/src/storage/serialization/serialize_types.cpp +6 -1
  837. package/src/duckdb/src/storage/single_file_block_manager.cpp +22 -19
  838. package/src/duckdb/src/storage/standard_buffer_manager.cpp +68 -40
  839. package/src/duckdb/src/storage/statistics/column_statistics.cpp +3 -3
  840. package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +1 -1
  841. package/src/duckdb/src/storage/storage_info.cpp +67 -23
  842. package/src/duckdb/src/storage/storage_lock.cpp +77 -17
  843. package/src/duckdb/src/storage/storage_manager.cpp +56 -43
  844. package/src/duckdb/src/storage/table/array_column_data.cpp +13 -12
  845. package/src/duckdb/src/storage/table/column_data.cpp +80 -37
  846. package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +1 -1
  847. package/src/duckdb/src/storage/table/column_segment.cpp +6 -5
  848. package/src/duckdb/src/storage/table/list_column_data.cpp +15 -14
  849. package/src/duckdb/src/storage/table/row_group.cpp +38 -23
  850. package/src/duckdb/src/storage/table/row_group_collection.cpp +52 -38
  851. package/src/duckdb/src/storage/table/row_version_manager.cpp +2 -2
  852. package/src/duckdb/src/storage/table/standard_column_data.cpp +28 -16
  853. package/src/duckdb/src/storage/table/struct_column_data.cpp +23 -16
  854. package/src/duckdb/src/storage/table/table_statistics.cpp +27 -8
  855. package/src/duckdb/src/storage/table/update_segment.cpp +6 -6
  856. package/src/duckdb/src/storage/table/validity_column_data.cpp +5 -0
  857. package/src/duckdb/src/storage/table_index_list.cpp +69 -42
  858. package/src/duckdb/src/storage/temporary_file_manager.cpp +111 -17
  859. package/src/duckdb/src/storage/temporary_memory_manager.cpp +4 -4
  860. package/src/duckdb/src/storage/wal_replay.cpp +27 -22
  861. package/src/duckdb/src/storage/write_ahead_log.cpp +42 -22
  862. package/src/duckdb/src/transaction/cleanup_state.cpp +4 -7
  863. package/src/duckdb/src/transaction/commit_state.cpp +17 -8
  864. package/src/duckdb/src/transaction/duck_transaction.cpp +60 -15
  865. package/src/duckdb/src/transaction/duck_transaction_manager.cpp +154 -121
  866. package/src/duckdb/src/transaction/meta_transaction.cpp +19 -1
  867. package/src/duckdb/src/transaction/rollback_state.cpp +2 -0
  868. package/src/duckdb/src/transaction/transaction.cpp +7 -7
  869. package/src/duckdb/src/transaction/undo_buffer.cpp +37 -17
  870. package/src/duckdb/third_party/concurrentqueue/concurrentqueue.h +5 -5
  871. package/src/duckdb/third_party/fsst/fsst.h +1 -1
  872. package/src/duckdb/third_party/jaro_winkler/details/common.hpp +9 -9
  873. package/src/duckdb/third_party/jaro_winkler/details/intrinsics.hpp +1 -1
  874. package/src/duckdb/third_party/jaro_winkler/details/jaro_impl.hpp +18 -18
  875. package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +1 -0
  876. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +12 -0
  877. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +555 -1032
  878. package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +3 -0
  879. package/src/duckdb/third_party/libpg_query/include/utils/datetime.hpp +1 -0
  880. package/src/duckdb/third_party/libpg_query/pg_functions.cpp +13 -6
  881. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +23925 -23444
  882. package/src/duckdb/third_party/mbedtls/library/constant_time.cpp +1 -1
  883. package/src/duckdb/third_party/parquet/parquet_types.cpp +3 -0
  884. package/src/duckdb/third_party/parquet/parquet_types.h +2 -1
  885. package/src/duckdb/third_party/re2/re2/compile.cc +2 -2
  886. package/src/duckdb/third_party/re2/re2/dfa.cc +3 -8
  887. package/src/duckdb/third_party/re2/re2/onepass.cc +4 -3
  888. package/src/duckdb/third_party/re2/re2/prog.cc +10 -10
  889. package/src/duckdb/third_party/re2/re2/prog.h +8 -8
  890. package/src/duckdb/third_party/tdigest/t_digest.hpp +6 -6
  891. package/src/duckdb/third_party/utf8proc/include/utf8proc.hpp +1 -1
  892. package/src/duckdb/third_party/yyjson/include/yyjson.hpp +7930 -0
  893. package/src/duckdb/third_party/yyjson/yyjson.cpp +9490 -0
  894. package/src/duckdb/ub_src_catalog.cpp +2 -0
  895. package/src/duckdb/ub_src_common.cpp +2 -0
  896. package/src/duckdb/ub_src_execution_index.cpp +3 -1
  897. package/src/duckdb/ub_src_execution_operator_helper.cpp +2 -0
  898. package/src/duckdb/ub_src_function_table_system.cpp +2 -0
  899. package/src/duckdb/ub_src_main.cpp +4 -0
  900. package/src/duckdb/ub_src_main_relation.cpp +2 -0
  901. package/src/duckdb/ub_src_optimizer.cpp +8 -8
  902. package/src/duckdb/ub_src_optimizer_join_order.cpp +0 -2
  903. package/src/duckdb/ub_src_optimizer_rule.cpp +4 -2
  904. package/src/duckdb/ub_src_parser_parsed_data.cpp +10 -0
  905. package/src/duckdb/ub_src_parser_statement.cpp +2 -0
  906. package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
  907. package/src/duckdb/ub_src_planner_binder_statement.cpp +2 -0
  908. package/src/duckdb/ub_src_planner_binder_tableref.cpp +4 -0
  909. package/src/duckdb/ub_src_storage_serialization.cpp +4 -0
  910. package/test/query_result.test.ts +9 -0
  911. package/test/replacement_scan.test.ts +2 -0
  912. package/src/duckdb/src/catalog/catalog_entry/ub_duckdb_catalog_entries.cpp +0 -16
  913. package/src/duckdb/src/catalog/default/ub_duckdb_catalog_default_entries.cpp +0 -5
  914. package/src/duckdb/src/catalog/ub_duckdb_catalog.cpp +0 -10
  915. package/src/duckdb/src/common/adbc/nanoarrow/ub_duckdb_adbc_nanoarrow.cpp +0 -5
  916. package/src/duckdb/src/common/adbc/ub_duckdb_adbc.cpp +0 -3
  917. package/src/duckdb/src/common/arrow/appender/ub_duckdb_common_arrow_appender.cpp +0 -6
  918. package/src/duckdb/src/common/arrow/ub_duckdb_common_arrow.cpp +0 -4
  919. package/src/duckdb/src/common/crypto/ub_duckdb_common_crypto.cpp +0 -2
  920. package/src/duckdb/src/common/enums/ub_duckdb_common_enums.cpp +0 -12
  921. package/src/duckdb/src/common/operator/ub_duckdb_common_operators.cpp +0 -4
  922. package/src/duckdb/src/common/progress_bar/ub_duckdb_progress_bar.cpp +0 -3
  923. package/src/duckdb/src/common/row_operations/ub_duckdb_row_operations.cpp +0 -9
  924. package/src/duckdb/src/common/serializer/ub_duckdb_common_serializer.cpp +0 -7
  925. package/src/duckdb/src/common/sort/ub_duckdb_sort.cpp +0 -7
  926. package/src/duckdb/src/common/types/column/ub_duckdb_common_types_column.cpp +0 -6
  927. package/src/duckdb/src/common/types/row/ub_duckdb_common_types_row.cpp +0 -11
  928. package/src/duckdb/src/common/types/ub_duckdb_common_types.cpp +0 -28
  929. package/src/duckdb/src/common/ub_duckdb_common.cpp +0 -34
  930. package/src/duckdb/src/common/value_operations/ub_duckdb_value_operations.cpp +0 -2
  931. package/src/duckdb/src/core_functions/aggregate/algebraic/ub_duckdb_aggr_algebraic.cpp +0 -5
  932. package/src/duckdb/src/core_functions/aggregate/distributive/ub_duckdb_aggr_distributive.cpp +0 -13
  933. package/src/duckdb/src/core_functions/aggregate/holistic/ub_duckdb_aggr_holistic.cpp +0 -5
  934. package/src/duckdb/src/core_functions/aggregate/nested/ub_duckdb_aggr_nested.cpp +0 -3
  935. package/src/duckdb/src/core_functions/aggregate/regression/ub_duckdb_aggr_regr.cpp +0 -8
  936. package/src/duckdb/src/core_functions/scalar/bit/ub_duckdb_func_bit.cpp +0 -2
  937. package/src/duckdb/src/core_functions/scalar/blob/ub_duckdb_func_blob.cpp +0 -3
  938. package/src/duckdb/src/core_functions/scalar/date/ub_duckdb_func_date.cpp +0 -12
  939. package/src/duckdb/src/core_functions/scalar/debug/ub_duckdb_func_debug.cpp +0 -2
  940. package/src/duckdb/src/core_functions/scalar/enum/ub_duckdb_func_enum.cpp +0 -2
  941. package/src/duckdb/src/core_functions/scalar/generic/ub_duckdb_func_generic.cpp +0 -9
  942. package/src/duckdb/src/core_functions/scalar/list/ub_duckdb_func_list.cpp +0 -11
  943. package/src/duckdb/src/core_functions/scalar/map/ub_duckdb_func_map_nested.cpp +0 -8
  944. package/src/duckdb/src/core_functions/scalar/math/ub_duckdb_func_math.cpp +0 -1
  945. package/src/duckdb/src/core_functions/scalar/operators/ub_duckdb_func_ops.cpp +0 -1
  946. package/src/duckdb/src/core_functions/scalar/random/ub_duckdb_func_random.cpp +0 -3
  947. package/src/duckdb/src/core_functions/scalar/string/ub_duckdb_func_string.cpp +0 -26
  948. package/src/duckdb/src/core_functions/scalar/struct/ub_duckdb_func_struct.cpp +0 -3
  949. package/src/duckdb/src/core_functions/scalar/union/ub_duckdb_func_union.cpp +0 -4
  950. package/src/duckdb/src/core_functions/ub_duckdb_core_functions.cpp +0 -3
  951. package/src/duckdb/src/execution/expression_executor/ub_duckdb_expression_executor.cpp +0 -11
  952. package/src/duckdb/src/execution/index/art/ub_duckdb_art_index_execution.cpp +0 -12
  953. package/src/duckdb/src/execution/index/art/ub_duckdb_execution_index_art.cpp +0 -11
  954. package/src/duckdb/src/execution/index/ub_duckdb_execution_index.cpp +0 -3
  955. package/src/duckdb/src/execution/nested_loop_join/ub_duckdb_nested_loop_join.cpp +0 -3
  956. package/src/duckdb/src/execution/operator/aggregate/ub_duckdb_operator_aggregate.cpp +0 -9
  957. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/ub_duckdb_operator_csv_sniffer.cpp +0 -7
  958. package/src/duckdb/src/execution/operator/csv_scanner/ub_duckdb_operator_csv_scanner.cpp +0 -10
  959. package/src/duckdb/src/execution/operator/filter/ub_duckdb_operator_filter.cpp +0 -2
  960. package/src/duckdb/src/execution/operator/helper/ub_duckdb_operator_helper.cpp +0 -18
  961. package/src/duckdb/src/execution/operator/join/ub_duckdb_operator_join.cpp +0 -16
  962. package/src/duckdb/src/execution/operator/order/ub_duckdb_operator_order.cpp +0 -3
  963. package/src/duckdb/src/execution/operator/persistent/ub_duckdb_operator_persistent.cpp +0 -10
  964. package/src/duckdb/src/execution/operator/projection/ub_duckdb_operator_projection.cpp +0 -5
  965. package/src/duckdb/src/execution/operator/scan/ub_duckdb_operator_scan.cpp +0 -7
  966. package/src/duckdb/src/execution/operator/schema/ub_duckdb_operator_schema.cpp +0 -12
  967. package/src/duckdb/src/execution/operator/set/ub_duckdb_operator_set.cpp +0 -4
  968. package/src/duckdb/src/execution/physical_plan/ub_duckdb_physical_plan.cpp +0 -44
  969. package/src/duckdb/src/execution/ub_duckdb_execution.cpp +0 -15
  970. package/src/duckdb/src/function/aggregate/algebraic/ub_duckdb_aggr_algebraic.cpp +0 -5
  971. package/src/duckdb/src/function/aggregate/distributive/ub_duckdb_aggr_distr.cpp +0 -3
  972. package/src/duckdb/src/function/aggregate/holistic/ub_duckdb_aggr_holistic.cpp +0 -5
  973. package/src/duckdb/src/function/aggregate/nested/ub_duckdb_aggr_nested.cpp +0 -3
  974. package/src/duckdb/src/function/aggregate/regression/ub_duckdb_aggr_regr.cpp +0 -8
  975. package/src/duckdb/src/function/aggregate/ub_duckdb_func_aggr.cpp +0 -3
  976. package/src/duckdb/src/function/cast/ub_duckdb_func_cast.cpp +0 -17
  977. package/src/duckdb/src/function/cast/union/ub_duckdb_union_cast.cpp +0 -2
  978. package/src/duckdb/src/function/pragma/ub_duckdb_func_pragma.cpp +0 -3
  979. package/src/duckdb/src/function/scalar/bit/ub_duckdb_func_bit.cpp +0 -2
  980. package/src/duckdb/src/function/scalar/blob/ub_duckdb_func_blob.cpp +0 -3
  981. package/src/duckdb/src/function/scalar/compressed_materialization/ub_duckdb_func_compressed_materialization.cpp +0 -3
  982. package/src/duckdb/src/function/scalar/date/ub_duckdb_func_date.cpp +0 -12
  983. package/src/duckdb/src/function/scalar/enum/ub_duckdb_func_enum.cpp +0 -2
  984. package/src/duckdb/src/function/scalar/generic/ub_duckdb_func_generic.cpp +0 -8
  985. package/src/duckdb/src/function/scalar/generic/ub_duckdb_func_generic_main.cpp +0 -2
  986. package/src/duckdb/src/function/scalar/list/ub_duckdb_func_list.cpp +0 -11
  987. package/src/duckdb/src/function/scalar/list/ub_duckdb_func_list_nested.cpp +0 -5
  988. package/src/duckdb/src/function/scalar/map/ub_duckdb_func_map_nested.cpp +0 -7
  989. package/src/duckdb/src/function/scalar/math/ub_duckdb_func_math.cpp +0 -4
  990. package/src/duckdb/src/function/scalar/operators/ub_duckdb_func_ops.cpp +0 -6
  991. package/src/duckdb/src/function/scalar/operators/ub_duckdb_func_ops_main.cpp +0 -5
  992. package/src/duckdb/src/function/scalar/sequence/ub_duckdb_func_seq.cpp +0 -2
  993. package/src/duckdb/src/function/scalar/string/regexp/ub_duckdb_func_string_regexp.cpp +0 -3
  994. package/src/duckdb/src/function/scalar/string/ub_duckdb_func_string.cpp +0 -31
  995. package/src/duckdb/src/function/scalar/string/ub_duckdb_func_string_main.cpp +0 -12
  996. package/src/duckdb/src/function/scalar/struct/ub_duckdb_func_struct.cpp +0 -4
  997. package/src/duckdb/src/function/scalar/struct/ub_duckdb_func_struct_main.cpp +0 -2
  998. package/src/duckdb/src/function/scalar/system/ub_duckdb_func_system.cpp +0 -2
  999. package/src/duckdb/src/function/scalar/ub_duckdb_func_scalar.cpp +0 -9
  1000. package/src/duckdb/src/function/scalar/union/ub_duckdb_func_union.cpp +0 -4
  1001. package/src/duckdb/src/function/table/arrow/ub_duckdb_arrow_conversion.cpp +0 -2
  1002. package/src/duckdb/src/function/table/system/ub_duckdb_table_func_system.cpp +0 -23
  1003. package/src/duckdb/src/function/table/ub_duckdb_func_table.cpp +0 -16
  1004. package/src/duckdb/src/function/table/version/ub_duckdb_func_table_version.cpp +0 -2
  1005. package/src/duckdb/src/function/ub_duckdb_function.cpp +0 -14
  1006. package/src/duckdb/src/main/capi/cast/ub_duckdb_main_capi_cast.cpp +0 -3
  1007. package/src/duckdb/src/main/capi/ub_duckdb_main_capi.cpp +0 -19
  1008. package/src/duckdb/src/main/chunk_scan_state/ub_duckdb_main_chunk_scan_state.cpp +0 -2
  1009. package/src/duckdb/src/main/extension/ub_duckdb_main_extension.cpp +0 -6
  1010. package/src/duckdb/src/main/relation/ub_duckdb_main_relation.cpp +0 -26
  1011. package/src/duckdb/src/main/settings/ub_duckdb_main_settings.cpp +0 -2
  1012. package/src/duckdb/src/main/ub_duckdb_main.cpp +0 -25
  1013. package/src/duckdb/src/optimizer/compressed_materialization/ub_duckdb_optimizer_compressed_materialization.cpp +0 -4
  1014. package/src/duckdb/src/optimizer/join_order/ub_duckdb_optimizer_join_order.cpp +0 -12
  1015. package/src/duckdb/src/optimizer/matcher/ub_duckdb_optimizer_matcher.cpp +0 -2
  1016. package/src/duckdb/src/optimizer/pullup/ub_duckdb_optimizer_pullup.cpp +0 -6
  1017. package/src/duckdb/src/optimizer/pushdown/ub_duckdb_optimizer_pushdown.cpp +0 -12
  1018. package/src/duckdb/src/optimizer/rule/ub_duckdb_optimizer_rules.cpp +0 -16
  1019. package/src/duckdb/src/optimizer/statistics/expression/ub_duckdb_optimizer_statistics_expr.cpp +0 -11
  1020. package/src/duckdb/src/optimizer/statistics/operator/ub_duckdb_optimizer_statistics_op.cpp +0 -11
  1021. package/src/duckdb/src/optimizer/ub_duckdb_optimizer.cpp +0 -20
  1022. package/src/duckdb/src/parallel/ub_duckdb_parallel.cpp +0 -15
  1023. package/src/duckdb/src/parser/constraints/ub_duckdb_constraints.cpp +0 -5
  1024. package/src/duckdb/src/parser/expression/ub_duckdb_expression.cpp +0 -18
  1025. package/src/duckdb/src/parser/parsed_data/ub_duckdb_parsed_data.cpp +0 -24
  1026. package/src/duckdb/src/parser/query_node/ub_duckdb_query_node.cpp +0 -5
  1027. package/src/duckdb/src/parser/statement/ub_duckdb_statement.cpp +0 -25
  1028. package/src/duckdb/src/parser/tableref/ub_duckdb_parser_tableref.cpp +0 -8
  1029. package/src/duckdb/src/parser/transform/constraint/ub_duckdb_transformer_constraint.cpp +0 -2
  1030. package/src/duckdb/src/parser/transform/expression/ub_duckdb_transformer_expression.cpp +0 -20
  1031. package/src/duckdb/src/parser/transform/helpers/ub_duckdb_transformer_helpers.cpp +0 -8
  1032. package/src/duckdb/src/parser/transform/statement/ub_duckdb_transformer_statement.cpp +0 -37
  1033. package/src/duckdb/src/parser/transform/tableref/ub_duckdb_transformer_tableref.cpp +0 -8
  1034. package/src/duckdb/src/parser/ub_duckdb_parser.cpp +0 -15
  1035. package/src/duckdb/src/planner/binder/expression/ub_duckdb_bind_expression.cpp +0 -20
  1036. package/src/duckdb/src/planner/binder/query_node/ub_duckdb_bind_query_node.cpp +0 -12
  1037. package/src/duckdb/src/planner/binder/statement/ub_duckdb_bind_statement.cpp +0 -26
  1038. package/src/duckdb/src/planner/binder/tableref/ub_duckdb_bind_tableref.cpp +0 -17
  1039. package/src/duckdb/src/planner/expression/ub_duckdb_planner_expression.cpp +0 -19
  1040. package/src/duckdb/src/planner/expression_binder/ub_duckdb_expression_binders.cpp +0 -20
  1041. package/src/duckdb/src/planner/filter/ub_duckdb_planner_filter.cpp +0 -4
  1042. package/src/duckdb/src/planner/operator/ub_duckdb_planner_operator.cpp +0 -43
  1043. package/src/duckdb/src/planner/parsed_data/ub_duckdb_planner_parsed_data.cpp +0 -2
  1044. package/src/duckdb/src/planner/subquery/ub_duckdb_planner_subquery.cpp +0 -4
  1045. package/src/duckdb/src/planner/ub_duckdb_planner.cpp +0 -15
  1046. package/src/duckdb/src/storage/buffer/ub_duckdb_storage_buffer.cpp +0 -6
  1047. package/src/duckdb/src/storage/checkpoint/ub_duckdb_storage_checkpoint.cpp +0 -5
  1048. package/src/duckdb/src/storage/compression/chimp/ub_duckdb_storage_compression_chimp.cpp +0 -6
  1049. package/src/duckdb/src/storage/compression/ub_duckdb_storage_compression.cpp +0 -12
  1050. package/src/duckdb/src/storage/metadata/ub_duckdb_storage_metadata.cpp +0 -4
  1051. package/src/duckdb/src/storage/serialization/ub_duckdb_storage_serialization.cpp +0 -16
  1052. package/src/duckdb/src/storage/statistics/ub_duckdb_storage_statistics.cpp +0 -10
  1053. package/src/duckdb/src/storage/table/ub_duckdb_storage_table.cpp +0 -17
  1054. package/src/duckdb/src/storage/ub_duckdb_storage.cpp +0 -20
  1055. package/src/duckdb/src/transaction/ub_duckdb_transaction.cpp +0 -11
@@ -11,6 +11,7 @@
11
11
  #include "duckdb/common/common.hpp"
12
12
  #include "duckdb/common/enums/file_glob_options.hpp"
13
13
  #include "duckdb/common/multi_file_reader_options.hpp"
14
+ #include "duckdb/common/multi_file_list.hpp"
14
15
  #include "duckdb/common/optional_ptr.hpp"
15
16
  #include "duckdb/common/types/value.hpp"
16
17
  #include "duckdb/common/union_by_name.hpp"
@@ -47,6 +48,33 @@ struct MultiFileReaderBindData {
47
48
  DUCKDB_API static MultiFileReaderBindData Deserialize(Deserializer &deserializer);
48
49
  };
49
50
 
51
+ //! Global state for MultiFileReads
52
+ struct MultiFileReaderGlobalState {
53
+ MultiFileReaderGlobalState(vector<LogicalType> extra_columns_p, optional_ptr<const MultiFileList> file_list_p)
54
+ : extra_columns(std::move(extra_columns_p)), file_list(file_list_p) {};
55
+
56
+ //! extra columns that will be produced during scanning
57
+ const vector<LogicalType> extra_columns;
58
+ // the file list driving the current scan
59
+ const optional_ptr<const MultiFileList> file_list;
60
+
61
+ //! Indicates that the MultiFileReader has added columns to be scanned that are not in the projection
62
+ bool RequiresExtraColumns() {
63
+ return !extra_columns.empty();
64
+ }
65
+
66
+ template <class TARGET>
67
+ TARGET &Cast() {
68
+ DynamicCastCheck<TARGET>(this);
69
+ return reinterpret_cast<TARGET &>(*this);
70
+ }
71
+ template <class TARGET>
72
+ const TARGET &Cast() const {
73
+ DynamicCastCheck<TARGET>(this);
74
+ return reinterpret_cast<const TARGET &>(*this);
75
+ }
76
+ };
77
+
50
78
  struct MultiFileFilterEntry {
51
79
  idx_t index = DConstants::INVALID_INDEX;
52
80
  bool is_constant = false;
@@ -55,7 +83,6 @@ struct MultiFileFilterEntry {
55
83
  struct MultiFileConstantEntry {
56
84
  MultiFileConstantEntry(idx_t column_id, Value value_p) : column_id(column_id), value(std::move(value_p)) {
57
85
  }
58
-
59
86
  //! The column id to apply the constant value to
60
87
  idx_t column_id;
61
88
  //! The constant value
@@ -80,63 +107,105 @@ struct MultiFileReaderData {
80
107
  //! Map of column_id -> cast, used when reading multiple files when files have diverging types
81
108
  //! for the same column
82
109
  unordered_map<column_t, LogicalType> cast_map;
110
+ //! (Optionally) The MultiFileReader-generated metadata corresponding to the currently read file
111
+ optional_idx file_list_idx;
83
112
  };
84
113
 
114
+ //! The MultiFileReader class provides a set of helper methods to handle scanning from multiple files
85
115
  struct MultiFileReader {
116
+ virtual ~MultiFileReader();
117
+
118
+ //! Create a MultiFileReader for a specific TableFunction, using its function name for errors
119
+ DUCKDB_API static unique_ptr<MultiFileReader> Create(const TableFunction &table_function);
120
+ //! Create a default MultiFileReader, function_name is used for errors
121
+ DUCKDB_API static unique_ptr<MultiFileReader> CreateDefault(const string &function_name = "");
122
+
86
123
  //! Add the parameters for multi-file readers (e.g. union_by_name, filename) to a table function
87
124
  DUCKDB_API static void AddParameters(TableFunction &table_function);
88
- //! Performs any globbing for the multi-file reader and returns a list of files to be read
89
- DUCKDB_API static vector<string> GetFileList(ClientContext &context, const Value &input, const string &name,
90
- FileGlobOptions options = FileGlobOptions::DISALLOW_EMPTY);
125
+ //! Creates a table function set from a single reader function (including e.g. list parameters, etc)
126
+ DUCKDB_API static TableFunctionSet CreateFunctionSet(TableFunction table_function);
127
+
128
+ //! Parse a Value containing 1 or more paths into a vector of paths. Note: no expansion is performed here
129
+ DUCKDB_API virtual vector<string> ParsePaths(const Value &input);
130
+ //! Create a MultiFileList from a vector of paths. Any globs will be expanded using the default filesystem
131
+ DUCKDB_API virtual unique_ptr<MultiFileList>
132
+ CreateFileList(ClientContext &context, const vector<string> &paths,
133
+ FileGlobOptions options = FileGlobOptions::DISALLOW_EMPTY);
134
+ //! Shorthand for ParsePaths + CreateFileList
135
+ DUCKDB_API unique_ptr<MultiFileList> CreateFileList(ClientContext &context, const Value &input,
136
+ FileGlobOptions options = FileGlobOptions::DISALLOW_EMPTY);
137
+
91
138
  //! Parse the named parameters of a multi-file reader
92
- DUCKDB_API static bool ParseOption(const string &key, const Value &val, MultiFileReaderOptions &options,
93
- ClientContext &context);
94
- //! Perform complex filter pushdown into the multi-file reader, potentially filtering out files that should be read
95
- //! If "true" the first file has been eliminated
96
- DUCKDB_API static bool ComplexFilterPushdown(ClientContext &context, vector<string> &files,
97
- const MultiFileReaderOptions &options, LogicalGet &get,
98
- vector<unique_ptr<Expression>> &filters);
139
+ DUCKDB_API virtual bool ParseOption(const string &key, const Value &val, MultiFileReaderOptions &options,
140
+ ClientContext &context);
141
+ //! Perform filter pushdown into the MultiFileList. Returns a new MultiFileList if filters were pushed down
142
+ DUCKDB_API virtual unique_ptr<MultiFileList> ComplexFilterPushdown(ClientContext &context, MultiFileList &files,
143
+ const MultiFileReaderOptions &options,
144
+ LogicalGet &get,
145
+ vector<unique_ptr<Expression>> &filters);
146
+ //! Try to use the MultiFileReader for binding. Returns true if a bind could be made, returns false if the
147
+ //! MultiFileReader can not perform the bind and binding should be performed on 1 or more files in the MultiFileList
148
+ //! directly.
149
+ DUCKDB_API virtual bool Bind(MultiFileReaderOptions &options, MultiFileList &files,
150
+ vector<LogicalType> &return_types, vector<string> &names,
151
+ MultiFileReaderBindData &bind_data);
99
152
  //! Bind the options of the multi-file reader, potentially emitting any extra columns that are required
100
- DUCKDB_API static MultiFileReaderBindData BindOptions(MultiFileReaderOptions &options, const vector<string> &files,
101
- vector<LogicalType> &return_types, vector<string> &names);
153
+ DUCKDB_API virtual void BindOptions(MultiFileReaderOptions &options, MultiFileList &files,
154
+ vector<LogicalType> &return_types, vector<string> &names,
155
+ MultiFileReaderBindData &bind_data);
156
+
157
+ //! Initialize global state used by the MultiFileReader
158
+ DUCKDB_API virtual unique_ptr<MultiFileReaderGlobalState>
159
+ InitializeGlobalState(ClientContext &context, const MultiFileReaderOptions &file_options,
160
+ const MultiFileReaderBindData &bind_data, const MultiFileList &file_list,
161
+ const vector<LogicalType> &global_types, const vector<string> &global_names,
162
+ const vector<column_t> &global_column_ids);
163
+
102
164
  //! Finalize the bind phase of the multi-file reader after we know (1) the required (output) columns, and (2) the
103
165
  //! pushed down table filters
104
- DUCKDB_API static void FinalizeBind(const MultiFileReaderOptions &file_options,
105
- const MultiFileReaderBindData &options, const string &filename,
106
- const vector<string> &local_names, const vector<LogicalType> &global_types,
107
- const vector<string> &global_names, const vector<column_t> &global_column_ids,
108
- MultiFileReaderData &reader_data, ClientContext &context);
109
- //! Create all required mappings from the global types/names to the file-local types/names
110
- DUCKDB_API static void CreateMapping(const string &file_name, const vector<LogicalType> &local_types,
166
+ DUCKDB_API virtual void FinalizeBind(const MultiFileReaderOptions &file_options,
167
+ const MultiFileReaderBindData &options, const string &filename,
111
168
  const vector<string> &local_names, const vector<LogicalType> &global_types,
112
169
  const vector<string> &global_names, const vector<column_t> &global_column_ids,
113
- optional_ptr<TableFilterSet> filters, MultiFileReaderData &reader_data,
114
- const string &initial_file);
170
+ MultiFileReaderData &reader_data, ClientContext &context,
171
+ optional_ptr<MultiFileReaderGlobalState> global_state);
172
+
173
+ //! Create all required mappings from the global types/names to the file-local types/names
174
+ DUCKDB_API virtual void CreateMapping(const string &file_name, const vector<LogicalType> &local_types,
175
+ const vector<string> &local_names, const vector<LogicalType> &global_types,
176
+ const vector<string> &global_names, const vector<column_t> &global_column_ids,
177
+ optional_ptr<TableFilterSet> filters, MultiFileReaderData &reader_data,
178
+ const string &initial_file, const MultiFileReaderBindData &options,
179
+ optional_ptr<MultiFileReaderGlobalState> global_state);
115
180
  //! Populated the filter_map
116
- DUCKDB_API static void CreateFilterMap(const vector<LogicalType> &global_types,
117
- optional_ptr<TableFilterSet> filters, MultiFileReaderData &reader_data);
181
+ DUCKDB_API virtual void CreateFilterMap(const vector<LogicalType> &global_types,
182
+ optional_ptr<TableFilterSet> filters, MultiFileReaderData &reader_data,
183
+ optional_ptr<MultiFileReaderGlobalState> global_state);
184
+
118
185
  //! Finalize the reading of a chunk - applying any constants that are required
119
- DUCKDB_API static void FinalizeChunk(const MultiFileReaderBindData &bind_data,
120
- const MultiFileReaderData &reader_data, DataChunk &chunk);
121
- //! Creates a table function set from a single reader function (including e.g. list parameters, etc)
122
- DUCKDB_API static TableFunctionSet CreateFunctionSet(TableFunction table_function);
186
+ DUCKDB_API virtual void FinalizeChunk(ClientContext &context, const MultiFileReaderBindData &bind_data,
187
+ const MultiFileReaderData &reader_data, DataChunk &chunk,
188
+ optional_ptr<MultiFileReaderGlobalState> global_state);
123
189
 
124
190
  template <class READER_CLASS, class RESULT_CLASS, class OPTIONS_CLASS>
125
- static MultiFileReaderBindData BindUnionReader(ClientContext &context, vector<LogicalType> &return_types,
126
- vector<string> &names, RESULT_CLASS &result,
127
- OPTIONS_CLASS &options) {
191
+ MultiFileReaderBindData BindUnionReader(ClientContext &context, vector<LogicalType> &return_types,
192
+ vector<string> &names, MultiFileList &files, RESULT_CLASS &result,
193
+ OPTIONS_CLASS &options) {
128
194
  D_ASSERT(options.file_options.union_by_name);
129
195
  vector<string> union_col_names;
130
196
  vector<LogicalType> union_col_types;
197
+
131
198
  // obtain the set of union column names + types by unifying the types of all of the files
132
199
  // note that this requires opening readers for each file and reading the metadata of each file
133
- auto union_readers =
134
- UnionByName::UnionCols<READER_CLASS>(context, result.files, union_col_types, union_col_names, options);
200
+ // note also that it requires fully expanding the MultiFileList
201
+ auto materialized_file_list = files.GetAllFiles();
202
+ auto union_readers = UnionByName::UnionCols<READER_CLASS>(context, materialized_file_list, union_col_types,
203
+ union_col_names, options);
135
204
 
136
205
  std::move(union_readers.begin(), union_readers.end(), std::back_inserter(result.union_readers));
137
206
  // perform the binding on the obtained set of names + types
138
- auto bind_data =
139
- MultiFileReader::BindOptions(options.file_options, result.files, union_col_types, union_col_names);
207
+ MultiFileReaderBindData bind_data;
208
+ BindOptions(options.file_options, files, union_col_types, union_col_names, bind_data);
140
209
  names = union_col_names;
141
210
  return_types = union_col_types;
142
211
  result.Initialize(result.union_readers[0]);
@@ -145,37 +214,40 @@ struct MultiFileReader {
145
214
  }
146
215
 
147
216
  template <class READER_CLASS, class RESULT_CLASS, class OPTIONS_CLASS>
148
- static MultiFileReaderBindData BindReader(ClientContext &context, vector<LogicalType> &return_types,
149
- vector<string> &names, RESULT_CLASS &result, OPTIONS_CLASS &options) {
217
+ MultiFileReaderBindData BindReader(ClientContext &context, vector<LogicalType> &return_types, vector<string> &names,
218
+ MultiFileList &files, RESULT_CLASS &result, OPTIONS_CLASS &options) {
150
219
  if (options.file_options.union_by_name) {
151
- return BindUnionReader<READER_CLASS>(context, return_types, names, result, options);
220
+ return BindUnionReader<READER_CLASS>(context, return_types, names, files, result, options);
152
221
  } else {
153
222
  shared_ptr<READER_CLASS> reader;
154
- reader = make_shared<READER_CLASS>(context, result.files[0], options);
223
+ reader = make_shared_ptr<READER_CLASS>(context, files.GetFirstFile(), options);
155
224
  return_types = reader->return_types;
156
225
  names = reader->names;
157
226
  result.Initialize(std::move(reader));
158
- return MultiFileReader::BindOptions(options.file_options, result.files, return_types, names);
227
+ MultiFileReaderBindData bind_data;
228
+ BindOptions(options.file_options, files, return_types, names, bind_data);
229
+ return bind_data;
159
230
  }
160
231
  }
161
232
 
162
233
  template <class READER_CLASS>
163
- static void InitializeReader(READER_CLASS &reader, const MultiFileReaderOptions &options,
164
- const MultiFileReaderBindData &bind_data, const vector<LogicalType> &global_types,
165
- const vector<string> &global_names, const vector<column_t> &global_column_ids,
166
- optional_ptr<TableFilterSet> table_filters, const string &initial_file,
167
- ClientContext &context) {
234
+ void InitializeReader(READER_CLASS &reader, const MultiFileReaderOptions &options,
235
+ const MultiFileReaderBindData &bind_data, const vector<LogicalType> &global_types,
236
+ const vector<string> &global_names, const vector<column_t> &global_column_ids,
237
+ optional_ptr<TableFilterSet> table_filters, const string &initial_file,
238
+ ClientContext &context, optional_ptr<MultiFileReaderGlobalState> global_state) {
168
239
  FinalizeBind(options, bind_data, reader.GetFileName(), reader.GetNames(), global_types, global_names,
169
- global_column_ids, reader.reader_data, context);
240
+ global_column_ids, reader.reader_data, context, global_state);
170
241
  CreateMapping(reader.GetFileName(), reader.GetTypes(), reader.GetNames(), global_types, global_names,
171
- global_column_ids, table_filters, reader.reader_data, initial_file);
242
+ global_column_ids, table_filters, reader.reader_data, initial_file, bind_data, global_state);
172
243
  reader.reader_data.filters = table_filters;
173
244
  }
174
245
 
175
246
  template <class BIND_DATA>
176
- static void PruneReaders(BIND_DATA &data) {
247
+ static void PruneReaders(BIND_DATA &data, MultiFileList &file_list) {
177
248
  unordered_set<string> file_set;
178
- for (auto &file : data.files) {
249
+
250
+ for (const auto &file : file_list.Files()) {
179
251
  file_set.insert(file);
180
252
  }
181
253
 
@@ -188,25 +260,29 @@ struct MultiFileReader {
188
260
  }
189
261
  for (idx_t r = 0; r < data.union_readers.size(); r++) {
190
262
  if (!data.union_readers[r]) {
191
- data.union_readers.erase(data.union_readers.begin() + r);
263
+ data.union_readers.erase_at(r);
192
264
  r--;
193
265
  continue;
194
266
  }
195
267
  // check if the union reader should still be read or not
196
268
  auto entry = file_set.find(data.union_readers[r]->GetFileName());
197
269
  if (entry == file_set.end()) {
198
- data.union_readers.erase(data.union_readers.begin() + r);
270
+ data.union_readers.erase_at(r);
199
271
  r--;
200
272
  continue;
201
273
  }
202
274
  }
203
275
  }
204
276
 
205
- private:
206
- static void CreateNameMapping(const string &file_name, const vector<LogicalType> &local_types,
207
- const vector<string> &local_names, const vector<LogicalType> &global_types,
208
- const vector<string> &global_names, const vector<column_t> &global_column_ids,
209
- MultiFileReaderData &reader_data, const string &initial_file);
277
+ protected:
278
+ virtual void CreateNameMapping(const string &file_name, const vector<LogicalType> &local_types,
279
+ const vector<string> &local_names, const vector<LogicalType> &global_types,
280
+ const vector<string> &global_names, const vector<column_t> &global_column_ids,
281
+ MultiFileReaderData &reader_data, const string &initial_file,
282
+ optional_ptr<MultiFileReaderGlobalState> global_state);
283
+
284
+ //! Used in errors to report which function is using this MultiFileReader
285
+ string function_name;
210
286
  };
211
287
 
212
288
  } // namespace duckdb
@@ -15,6 +15,7 @@
15
15
 
16
16
  namespace duckdb {
17
17
  struct BindInfo;
18
+ class MultiFileList;
18
19
 
19
20
  struct MultiFileReaderOptions {
20
21
  bool filename = false;
@@ -24,12 +25,15 @@ struct MultiFileReaderOptions {
24
25
  bool hive_types_autocast = true;
25
26
  case_insensitive_map_t<LogicalType> hive_types_schema;
26
27
 
28
+ // These are used to pass options through custom multifilereaders
29
+ case_insensitive_map_t<Value> custom_options;
30
+
27
31
  DUCKDB_API void Serialize(Serializer &serializer) const;
28
32
  DUCKDB_API static MultiFileReaderOptions Deserialize(Deserializer &source);
29
33
  DUCKDB_API void AddBatchInfo(BindInfo &bind_info) const;
30
- DUCKDB_API void AutoDetectHivePartitioning(const vector<string> &files, ClientContext &context);
31
- DUCKDB_API static bool AutoDetectHivePartitioningInternal(const vector<string> &files, ClientContext &context);
32
- DUCKDB_API void AutoDetectHiveTypesInternal(const vector<string> &file, ClientContext &context);
34
+ DUCKDB_API void AutoDetectHivePartitioning(MultiFileList &files, ClientContext &context);
35
+ DUCKDB_API static bool AutoDetectHivePartitioningInternal(MultiFileList &files, ClientContext &context);
36
+ DUCKDB_API void AutoDetectHiveTypesInternal(MultiFileList &files, ClientContext &context);
33
37
  DUCKDB_API void VerifyHiveTypesArePartitions(const std::map<string, string> &partitions) const;
34
38
  DUCKDB_API LogicalType GetHiveLogicalType(const string &hive_partition_column) const;
35
39
  DUCKDB_API Value GetHivePartitionValue(const string &base, const string &entry, ClientContext &context) const;
@@ -68,6 +68,9 @@ static void ThrowNumericCastError(FROM in, TO minval, TO maxval) {
68
68
 
69
69
  template <class TO, class FROM>
70
70
  TO NumericCast(FROM val) {
71
+ if (std::is_same<TO, FROM>::value) {
72
+ return static_cast<TO>(val);
73
+ }
71
74
  // some dance around signed-unsigned integer comparison below
72
75
  auto minval = NumericLimits<TO>::Minimum();
73
76
  auto maxval = NumericLimits<TO>::Maximum();
@@ -64,6 +64,8 @@ template <>
64
64
  bool TryAddOperator::Operation(uint32_t left, uint32_t right, uint32_t &result);
65
65
  template <>
66
66
  bool TryAddOperator::Operation(uint64_t left, uint64_t right, uint64_t &result);
67
+ template <>
68
+ bool TryAddOperator::Operation(date_t left, int32_t right, date_t &result);
67
69
 
68
70
  template <>
69
71
  bool TryAddOperator::Operation(int8_t left, int8_t right, int8_t &result);
@@ -9,6 +9,8 @@
9
9
  #pragma once
10
10
 
11
11
  #include "duckdb/common/operator/cast_operators.hpp"
12
+ #include "duckdb/common/types/decimal.hpp"
13
+ #include "duckdb/common/operator/integer_cast_operator.hpp"
12
14
 
13
15
  namespace duckdb {
14
16
 
@@ -457,4 +459,235 @@ string_t StringCastFromDecimal::Operation(int64_t input, uint8_t width, uint8_t
457
459
  template <>
458
460
  string_t StringCastFromDecimal::Operation(hugeint_t input, uint8_t width, uint8_t scale, Vector &result);
459
461
 
462
+ //===--------------------------------------------------------------------===//
463
+ // Cast VARCHAR <-> Decimal
464
+ //===--------------------------------------------------------------------===//
465
+ enum class ExponentType : uint8_t { NONE, POSITIVE, NEGATIVE };
466
+
467
+ template <class T>
468
+ struct DecimalCastData {
469
+ using StoreType = T;
470
+ StoreType result;
471
+ uint8_t width;
472
+ uint8_t scale;
473
+ uint8_t digit_count;
474
+ uint8_t decimal_count;
475
+ //! Whether we have determined if the result should be rounded
476
+ bool round_set;
477
+ //! If the result should be rounded
478
+ bool should_round;
479
+ //! Only set when ALLOW_EXPONENT is enabled
480
+ uint8_t excessive_decimals;
481
+ ExponentType exponent_type;
482
+ };
483
+
484
+ struct DecimalCastOperation {
485
+ template <class T, bool NEGATIVE>
486
+ static bool HandleDigit(T &state, uint8_t digit) {
487
+ if (state.result == 0 && digit == 0) {
488
+ // leading zero's don't count towards the digit count
489
+ return true;
490
+ }
491
+ if (state.digit_count == state.width - state.scale) {
492
+ // width of decimal type is exceeded!
493
+ return false;
494
+ }
495
+ state.digit_count++;
496
+ if (NEGATIVE) {
497
+ if (state.result < (NumericLimits<typename T::StoreType>::Minimum() / 10)) {
498
+ return false;
499
+ }
500
+ state.result = state.result * 10 - digit;
501
+ } else {
502
+ if (state.result > (NumericLimits<typename T::StoreType>::Maximum() / 10)) {
503
+ return false;
504
+ }
505
+ state.result = state.result * 10 + digit;
506
+ }
507
+ return true;
508
+ }
509
+
510
+ template <class T, bool NEGATIVE>
511
+ static bool HandleHexDigit(T &state, uint8_t digit) {
512
+ return false;
513
+ }
514
+
515
+ template <class T, bool NEGATIVE>
516
+ static bool HandleBinaryDigit(T &state, uint8_t digit) {
517
+ return false;
518
+ }
519
+
520
+ template <class T, bool NEGATIVE>
521
+ static void RoundUpResult(T &state) {
522
+ if (NEGATIVE) {
523
+ state.result -= 1;
524
+ } else {
525
+ state.result += 1;
526
+ }
527
+ }
528
+
529
+ template <class T, bool NEGATIVE>
530
+ static bool HandleExponent(T &state, int32_t exponent) {
531
+ auto decimal_excess = (state.decimal_count > state.scale) ? state.decimal_count - state.scale : 0;
532
+ if (exponent > 0) {
533
+ state.exponent_type = ExponentType::POSITIVE;
534
+ // Positive exponents need up to 'exponent' amount of digits
535
+ // Everything beyond that amount needs to be truncated
536
+ if (decimal_excess > exponent) {
537
+ // We've allowed too many decimals
538
+ state.excessive_decimals = UnsafeNumericCast<uint8_t>(decimal_excess - exponent);
539
+ exponent = 0;
540
+ } else {
541
+ exponent -= decimal_excess;
542
+ }
543
+ D_ASSERT(exponent >= 0);
544
+ } else if (exponent < 0) {
545
+ state.exponent_type = ExponentType::NEGATIVE;
546
+ }
547
+ if (!Finalize<T, NEGATIVE>(state)) {
548
+ return false;
549
+ }
550
+ if (exponent < 0) {
551
+ bool round_up = false;
552
+ for (idx_t i = 0; i < idx_t(-int64_t(exponent)); i++) {
553
+ auto mod = state.result % 10;
554
+ round_up = NEGATIVE ? mod <= -5 : mod >= 5;
555
+ state.result /= 10;
556
+ if (state.result == 0) {
557
+ break;
558
+ }
559
+ }
560
+ if (round_up) {
561
+ RoundUpResult<T, NEGATIVE>(state);
562
+ }
563
+ return true;
564
+ } else {
565
+ // positive exponent: append 0's
566
+ for (idx_t i = 0; i < idx_t(exponent); i++) {
567
+ if (!HandleDigit<T, NEGATIVE>(state, 0)) {
568
+ return false;
569
+ }
570
+ }
571
+ return true;
572
+ }
573
+ }
574
+
575
+ template <class T, bool NEGATIVE, bool ALLOW_EXPONENT>
576
+ static bool HandleDecimal(T &state, uint8_t digit) {
577
+ if (state.decimal_count == state.scale && !state.round_set) {
578
+ // Determine whether the last registered decimal should be rounded or not
579
+ state.round_set = true;
580
+ state.should_round = digit >= 5;
581
+ }
582
+ if (!ALLOW_EXPONENT && state.decimal_count == state.scale) {
583
+ // we exceeded the amount of supported decimals
584
+ // however, we don't throw an error here
585
+ // we just truncate the decimal
586
+ return true;
587
+ }
588
+ //! If we expect an exponent, we need to preserve the decimals
589
+ //! But we don't want to overflow, so we prevent overflowing the result with this check
590
+ if (state.digit_count + state.decimal_count >= DecimalWidth<decltype(state.result)>::max) {
591
+ return true;
592
+ }
593
+ state.decimal_count++;
594
+ if (NEGATIVE) {
595
+ state.result = state.result * 10 - digit;
596
+ } else {
597
+ state.result = state.result * 10 + digit;
598
+ }
599
+ return true;
600
+ }
601
+
602
+ template <class T, bool NEGATIVE>
603
+ static bool TruncateExcessiveDecimals(T &state) {
604
+ D_ASSERT(state.excessive_decimals);
605
+ bool round_up = false;
606
+ for (idx_t i = 0; i < state.excessive_decimals; i++) {
607
+ auto mod = state.result % 10;
608
+ round_up = NEGATIVE ? mod <= -5 : mod >= 5;
609
+ state.result /= static_cast<typename T::StoreType>(10.0);
610
+ }
611
+ //! Only round up when exponents are involved
612
+ if (state.exponent_type == ExponentType::POSITIVE && round_up) {
613
+ RoundUpResult<T, NEGATIVE>(state);
614
+ }
615
+ D_ASSERT(state.decimal_count > state.scale);
616
+ state.decimal_count = state.scale;
617
+ return true;
618
+ }
619
+
620
+ template <class T, bool NEGATIVE>
621
+ static bool Finalize(T &state) {
622
+ if (state.exponent_type != ExponentType::POSITIVE && state.decimal_count > state.scale) {
623
+ //! Did not encounter an exponent, but ALLOW_EXPONENT was on
624
+ state.excessive_decimals = state.decimal_count - state.scale;
625
+ }
626
+ if (state.excessive_decimals && !TruncateExcessiveDecimals<T, NEGATIVE>(state)) {
627
+ return false;
628
+ }
629
+ if (state.exponent_type == ExponentType::NONE && state.round_set && state.should_round) {
630
+ RoundUpResult<T, NEGATIVE>(state);
631
+ }
632
+ // if we have not gotten exactly "scale" decimals, we need to multiply the result
633
+ // e.g. if we have a string "1.0" that is cast to a DECIMAL(9,3), the value needs to be 1000
634
+ // but we have only gotten the value "10" so far, so we multiply by 1000
635
+ for (uint8_t i = state.decimal_count; i < state.scale; i++) {
636
+ state.result *= 10;
637
+ }
638
+ return true;
639
+ }
640
+ };
641
+
642
+ template <class T, char decimal_separator = '.'>
643
+ bool TryDecimalStringCast(string_t input, T &result, CastParameters &parameters, uint8_t width, uint8_t scale) {
644
+ return TryDecimalStringCast<T, decimal_separator>(input.GetData(), input.GetSize(), result, parameters, width,
645
+ scale);
646
+ }
647
+
648
+ template <class T, char decimal_separator = '.'>
649
+ bool TryDecimalStringCast(const char *string_ptr, idx_t string_size, T &result, CastParameters &parameters,
650
+ uint8_t width, uint8_t scale) {
651
+ DecimalCastData<T> state;
652
+ state.result = 0;
653
+ state.width = width;
654
+ state.scale = scale;
655
+ state.digit_count = 0;
656
+ state.decimal_count = 0;
657
+ state.excessive_decimals = 0;
658
+ state.exponent_type = ExponentType::NONE;
659
+ state.round_set = false;
660
+ state.should_round = false;
661
+ if (!TryIntegerCast<DecimalCastData<T>, true, true, DecimalCastOperation, false, decimal_separator>(
662
+ string_ptr, string_size, state, false)) {
663
+ string_t value(string_ptr, (uint32_t)string_size);
664
+ string error = StringUtil::Format("Could not convert string \"%s\" to DECIMAL(%d,%d)", value.GetString(),
665
+ (int)width, (int)scale);
666
+ HandleCastError::AssignError(error, parameters);
667
+ return false;
668
+ }
669
+ result = state.result;
670
+ return true;
671
+ }
672
+
673
+ template <class T, char decimal_separator = '.'>
674
+ bool TryDecimalStringCast(const char *string_ptr, idx_t string_size, T &result, uint8_t width, uint8_t scale) {
675
+ DecimalCastData<T> state;
676
+ state.result = 0;
677
+ state.width = width;
678
+ state.scale = scale;
679
+ state.digit_count = 0;
680
+ state.decimal_count = 0;
681
+ state.excessive_decimals = 0;
682
+ state.exponent_type = ExponentType::NONE;
683
+ state.round_set = false;
684
+ state.should_round = false;
685
+ if (!TryIntegerCast<DecimalCastData<T>, true, true, DecimalCastOperation, false, decimal_separator>(
686
+ string_ptr, string_size, state, false)) {
687
+ return false;
688
+ }
689
+ result = state.result;
690
+ return true;
691
+ }
692
+
460
693
  } // namespace duckdb
@@ -234,7 +234,8 @@ static bool IntegerCastLoop(const char *buf, idx_t len, T &result, bool strict)
234
234
  if (!StringUtil::CharacterIsDigit(buf[pos])) {
235
235
  break;
236
236
  }
237
- if (!OP::template HandleDecimal<T, NEGATIVE, ALLOW_EXPONENT>(result, buf[pos] - '0')) {
237
+ if (!OP::template HandleDecimal<T, NEGATIVE, ALLOW_EXPONENT>(
238
+ result, UnsafeNumericCast<uint8_t>(buf[pos] - '0'))) {
238
239
  return false;
239
240
  }
240
241
  pos++;
@@ -296,7 +297,7 @@ static bool IntegerCastLoop(const char *buf, idx_t len, T &result, bool strict)
296
297
  }
297
298
  return false;
298
299
  }
299
- uint8_t digit = buf[pos++] - '0';
300
+ auto digit = UnsafeNumericCast<uint8_t>(buf[pos++] - '0');
300
301
  if (!OP::template HandleDigit<T, NEGATIVE>(result, digit)) {
301
302
  return false;
302
303
  }
@@ -330,9 +331,9 @@ static bool IntegerHexCastLoop(const char *buf, idx_t len, T &result, bool stric
330
331
  }
331
332
  uint8_t digit;
332
333
  if (current_char >= 'a') {
333
- digit = current_char - 'a' + 10;
334
+ digit = UnsafeNumericCast<uint8_t>(current_char - 'a' + 10);
334
335
  } else {
335
- digit = current_char - '0';
336
+ digit = UnsafeNumericCast<uint8_t>(current_char - '0');
336
337
  }
337
338
  pos++;
338
339
 
@@ -75,7 +75,7 @@ bool TryCastWithOverflowCheckFloat(SRC value, T &result, SRC min, SRC max) {
75
75
  return false;
76
76
  }
77
77
  // PG FLOAT => INT casts use statistical rounding.
78
- result = std::nearbyint(value);
78
+ result = static_cast<T>(std::nearbyint(value));
79
79
  return true;
80
80
  }
81
81
 
@@ -182,7 +182,7 @@ bool TryCastWithOverflowCheck(double input, float &result) {
182
182
  return true;
183
183
  }
184
184
  auto res = float(input);
185
- if (!Value::FloatIsFinite(input)) {
185
+ if (!Value::FloatIsFinite(res)) {
186
186
  return false;
187
187
  }
188
188
  result = res;
@@ -10,6 +10,7 @@
10
10
 
11
11
  #include "duckdb/common/exception.hpp"
12
12
  #include "duckdb/common/unique_ptr.hpp"
13
+ #include "duckdb/common/shared_ptr.hpp"
13
14
 
14
15
  namespace duckdb {
15
16
 
@@ -20,8 +21,12 @@ public:
20
21
  }
21
22
  optional_ptr(T *ptr_p) : ptr(ptr_p) { // NOLINT: allow implicit creation from pointer
22
23
  }
24
+ optional_ptr(T &ref) : ptr(&ref) { // NOLINT: allow implicit creation from reference
25
+ }
23
26
  optional_ptr(const unique_ptr<T> &ptr_p) : ptr(ptr_p.get()) { // NOLINT: allow implicit creation from unique pointer
24
27
  }
28
+ optional_ptr(const shared_ptr<T> &ptr_p) : ptr(ptr_p.get()) { // NOLINT: allow implicit creation from shared pointer
29
+ }
25
30
 
26
31
  void CheckValid() const {
27
32
  if (!ptr) {