duckdb 0.8.2-dev33.0 → 0.8.2-dev3334.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 (999) hide show
  1. package/README.md +7 -0
  2. package/binding.gyp +25 -13
  3. package/binding.gyp.in +1 -1
  4. package/configure.py +8 -3
  5. package/duckdb_extension_config.cmake +10 -0
  6. package/package.json +1 -1
  7. package/src/duckdb/extension/icu/icu-dateadd.cpp +2 -2
  8. package/src/duckdb/extension/icu/icu-datefunc.cpp +10 -1
  9. package/src/duckdb/extension/icu/icu-datepart.cpp +162 -41
  10. package/src/duckdb/extension/icu/icu-datesub.cpp +3 -2
  11. package/src/duckdb/extension/icu/icu-datetrunc.cpp +2 -1
  12. package/src/duckdb/extension/icu/icu-list-range.cpp +1 -1
  13. package/src/duckdb/extension/icu/icu-makedate.cpp +19 -6
  14. package/src/duckdb/extension/icu/icu-strptime.cpp +5 -24
  15. package/src/duckdb/extension/icu/icu-table-range.cpp +5 -5
  16. package/src/duckdb/extension/icu/icu-timebucket.cpp +16 -16
  17. package/src/duckdb/extension/icu/icu-timezone.cpp +8 -8
  18. package/src/duckdb/extension/icu/icu_extension.cpp +5 -7
  19. package/src/duckdb/extension/json/buffered_json_reader.cpp +2 -0
  20. package/src/duckdb/extension/json/include/buffered_json_reader.hpp +5 -19
  21. package/src/duckdb/extension/json/include/json_common.hpp +47 -231
  22. package/src/duckdb/extension/json/include/json_deserializer.hpp +1 -1
  23. package/src/duckdb/extension/json/include/json_enums.hpp +60 -0
  24. package/src/duckdb/extension/json/include/json_executors.hpp +49 -13
  25. package/src/duckdb/extension/json/include/json_functions.hpp +2 -1
  26. package/src/duckdb/extension/json/include/json_scan.hpp +14 -10
  27. package/src/duckdb/extension/json/include/json_serializer.hpp +1 -1
  28. package/src/duckdb/extension/json/include/json_transform.hpp +3 -0
  29. package/src/duckdb/extension/json/json_common.cpp +272 -40
  30. package/src/duckdb/extension/json/json_deserializer.cpp +16 -14
  31. package/src/duckdb/extension/json/json_enums.cpp +105 -0
  32. package/src/duckdb/extension/json/json_functions/json_create.cpp +21 -2
  33. package/src/duckdb/extension/json/json_functions/json_structure.cpp +1 -1
  34. package/src/duckdb/extension/json/json_functions/json_transform.cpp +93 -38
  35. package/src/duckdb/extension/json/json_functions/json_type.cpp +1 -1
  36. package/src/duckdb/extension/json/json_functions.cpp +26 -25
  37. package/src/duckdb/extension/json/json_scan.cpp +47 -6
  38. package/src/duckdb/extension/json/json_serializer.cpp +11 -11
  39. package/src/duckdb/extension/json/serialize_json.cpp +92 -0
  40. package/src/duckdb/extension/parquet/column_reader.cpp +37 -25
  41. package/src/duckdb/extension/parquet/column_writer.cpp +77 -61
  42. package/src/duckdb/extension/parquet/include/cast_column_reader.hpp +2 -2
  43. package/src/duckdb/extension/parquet/include/column_reader.hpp +14 -16
  44. package/src/duckdb/extension/parquet/include/column_writer.hpp +9 -7
  45. package/src/duckdb/extension/parquet/include/list_column_reader.hpp +2 -2
  46. package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +3 -3
  47. package/src/duckdb/extension/parquet/include/parquet_decimal_utils.hpp +3 -3
  48. package/src/duckdb/extension/parquet/include/parquet_file_metadata_cache.hpp +2 -2
  49. package/src/duckdb/extension/parquet/include/parquet_reader.hpp +4 -0
  50. package/src/duckdb/extension/parquet/include/parquet_statistics.hpp +2 -2
  51. package/src/duckdb/extension/parquet/include/parquet_support.hpp +9 -11
  52. package/src/duckdb/extension/parquet/include/parquet_timestamp.hpp +1 -0
  53. package/src/duckdb/extension/parquet/include/parquet_writer.hpp +28 -5
  54. package/src/duckdb/extension/parquet/include/string_column_reader.hpp +1 -1
  55. package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +2 -3
  56. package/src/duckdb/extension/parquet/include/zstd_file_system.hpp +2 -2
  57. package/src/duckdb/extension/parquet/parquet_extension.cpp +258 -40
  58. package/src/duckdb/extension/parquet/parquet_reader.cpp +10 -10
  59. package/src/duckdb/extension/parquet/parquet_statistics.cpp +25 -8
  60. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +6 -0
  61. package/src/duckdb/extension/parquet/parquet_writer.cpp +149 -31
  62. package/src/duckdb/extension/parquet/serialize_parquet.cpp +26 -0
  63. package/src/duckdb/extension/parquet/zstd_file_system.cpp +2 -2
  64. package/src/duckdb/src/catalog/catalog.cpp +3 -7
  65. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +8 -11
  66. package/src/duckdb/src/catalog/catalog_entry/index_catalog_entry.cpp +17 -41
  67. package/src/duckdb/src/catalog/catalog_entry/macro_catalog_entry.cpp +2 -10
  68. package/src/duckdb/src/catalog/catalog_entry/schema_catalog_entry.cpp +4 -14
  69. package/src/duckdb/src/catalog/catalog_entry/sequence_catalog_entry.cpp +11 -28
  70. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +11 -42
  71. package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +7 -26
  72. package/src/duckdb/src/catalog/catalog_entry/view_catalog_entry.cpp +11 -27
  73. package/src/duckdb/src/catalog/catalog_entry.cpp +25 -1
  74. package/src/duckdb/src/catalog/catalog_search_path.cpp +5 -4
  75. package/src/duckdb/src/catalog/catalog_set.cpp +0 -63
  76. package/src/duckdb/src/catalog/default/default_functions.cpp +21 -0
  77. package/src/duckdb/src/catalog/dependency_manager.cpp +0 -36
  78. package/src/duckdb/src/common/adbc/adbc.cpp +541 -171
  79. package/src/duckdb/src/common/adbc/driver_manager.cpp +92 -39
  80. package/src/duckdb/src/common/adbc/nanoarrow/allocator.cpp +57 -0
  81. package/src/duckdb/src/common/adbc/nanoarrow/metadata.cpp +121 -0
  82. package/src/duckdb/src/common/adbc/nanoarrow/schema.cpp +474 -0
  83. package/src/duckdb/src/common/adbc/nanoarrow/single_batch_array_stream.cpp +84 -0
  84. package/src/duckdb/src/common/allocator.cpp +14 -2
  85. package/src/duckdb/src/common/arrow/appender/bool_data.cpp +44 -0
  86. package/src/duckdb/src/common/arrow/appender/list_data.cpp +78 -0
  87. package/src/duckdb/src/common/arrow/appender/map_data.cpp +86 -0
  88. package/src/duckdb/src/common/arrow/appender/struct_data.cpp +45 -0
  89. package/src/duckdb/src/common/arrow/appender/union_data.cpp +70 -0
  90. package/src/duckdb/src/common/arrow/arrow_appender.cpp +95 -666
  91. package/src/duckdb/src/common/arrow/arrow_converter.cpp +65 -37
  92. package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +37 -42
  93. package/src/duckdb/src/common/assert.cpp +3 -0
  94. package/src/duckdb/src/common/constants.cpp +2 -1
  95. package/src/duckdb/src/common/enum_util.cpp +4838 -4429
  96. package/src/duckdb/src/common/enums/date_part_specifier.cpp +2 -0
  97. package/src/duckdb/src/common/enums/logical_operator_type.cpp +4 -0
  98. package/src/duckdb/src/common/enums/optimizer_type.cpp +2 -0
  99. package/src/duckdb/src/common/enums/physical_operator_type.cpp +4 -0
  100. package/src/duckdb/src/common/exception.cpp +2 -2
  101. package/src/duckdb/src/common/extra_type_info.cpp +483 -0
  102. package/src/duckdb/src/common/field_writer.cpp +1 -1
  103. package/src/duckdb/src/common/file_system.cpp +25 -6
  104. package/src/duckdb/src/common/filename_pattern.cpp +1 -1
  105. package/src/duckdb/src/common/gzip_file_system.cpp +7 -12
  106. package/src/duckdb/src/common/hive_partitioning.cpp +10 -6
  107. package/src/duckdb/src/common/http_state.cpp +78 -0
  108. package/src/duckdb/src/common/local_file_system.cpp +36 -28
  109. package/src/duckdb/src/common/multi_file_reader.cpp +193 -20
  110. package/src/duckdb/src/common/operator/cast_operators.cpp +92 -1
  111. package/src/duckdb/src/common/operator/string_cast.cpp +45 -8
  112. package/src/duckdb/src/common/radix_partitioning.cpp +26 -8
  113. package/src/duckdb/src/common/re2_regex.cpp +1 -1
  114. package/src/duckdb/src/common/row_operations/row_external.cpp +1 -1
  115. package/src/duckdb/src/common/serializer/binary_deserializer.cpp +8 -3
  116. package/src/duckdb/src/common/serializer/binary_serializer.cpp +14 -9
  117. package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +0 -9
  118. package/src/duckdb/src/common/serializer/format_serializer.cpp +15 -0
  119. package/src/duckdb/src/common/sort/merge_sorter.cpp +9 -16
  120. package/src/duckdb/src/common/sort/partition_state.cpp +70 -50
  121. package/src/duckdb/src/common/sort/sort_state.cpp +1 -1
  122. package/src/duckdb/src/common/sort/sorted_block.cpp +1 -1
  123. package/src/duckdb/src/common/types/batched_data_collection.cpp +7 -2
  124. package/src/duckdb/src/common/types/bit.cpp +51 -0
  125. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +9 -6
  126. package/src/duckdb/src/common/types/column/column_data_collection.cpp +68 -2
  127. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +20 -6
  128. package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
  129. package/src/duckdb/src/common/types/data_chunk.cpp +2 -2
  130. package/src/duckdb/src/common/types/date.cpp +15 -0
  131. package/src/duckdb/src/common/types/hugeint.cpp +40 -0
  132. package/src/duckdb/src/common/types/interval.cpp +3 -0
  133. package/src/duckdb/src/common/types/list_segment.cpp +56 -198
  134. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +3 -9
  135. package/src/duckdb/src/common/types/row/row_data_collection_scanner.cpp +35 -5
  136. package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +2 -0
  137. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +2 -2
  138. package/src/duckdb/src/common/types/string_heap.cpp +4 -0
  139. package/src/duckdb/src/common/types/time.cpp +105 -0
  140. package/src/duckdb/src/common/types/timestamp.cpp +7 -0
  141. package/src/duckdb/src/common/types/uuid.cpp +2 -2
  142. package/src/duckdb/src/common/types/validity_mask.cpp +33 -0
  143. package/src/duckdb/src/common/types/value.cpp +65 -47
  144. package/src/duckdb/src/common/types/vector.cpp +52 -25
  145. package/src/duckdb/src/common/types.cpp +38 -724
  146. package/src/duckdb/src/common/virtual_file_system.cpp +142 -1
  147. package/src/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp +26 -0
  148. package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +5 -7
  149. package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +64 -19
  150. package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +30 -0
  151. package/src/duckdb/src/core_functions/aggregate/nested/histogram.cpp +1 -0
  152. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +83 -59
  153. package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +4 -4
  154. package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +4 -4
  155. package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +5 -4
  156. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +8 -8
  157. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +4 -3
  158. package/src/duckdb/src/core_functions/function_list.cpp +10 -4
  159. package/src/duckdb/src/core_functions/scalar/date/date_diff.cpp +2 -0
  160. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +380 -89
  161. package/src/duckdb/src/core_functions/scalar/date/date_sub.cpp +2 -0
  162. package/src/duckdb/src/core_functions/scalar/date/date_trunc.cpp +4 -0
  163. package/src/duckdb/src/core_functions/scalar/date/epoch.cpp +10 -24
  164. package/src/duckdb/src/core_functions/scalar/date/make_date.cpp +19 -4
  165. package/src/duckdb/src/core_functions/scalar/date/strftime.cpp +10 -0
  166. package/src/duckdb/src/core_functions/scalar/debug/vector_type.cpp +23 -0
  167. package/src/duckdb/src/core_functions/scalar/enum/enum_functions.cpp +16 -12
  168. package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +314 -82
  169. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +4 -2
  170. package/src/duckdb/src/core_functions/scalar/list/list_lambdas.cpp +22 -3
  171. package/src/duckdb/src/core_functions/scalar/map/map_entries.cpp +2 -2
  172. package/src/duckdb/src/core_functions/scalar/string/to_base.cpp +66 -0
  173. package/src/duckdb/src/core_functions/scalar/union/union_tag.cpp +1 -1
  174. package/src/duckdb/src/execution/aggregate_hashtable.cpp +40 -18
  175. package/src/duckdb/src/execution/column_binding_resolver.cpp +10 -7
  176. package/src/duckdb/src/execution/expression_executor/execute_parameter.cpp +2 -2
  177. package/src/duckdb/src/execution/expression_executor.cpp +1 -1
  178. package/src/duckdb/src/execution/index/art/art.cpp +219 -259
  179. package/src/duckdb/src/execution/index/art/art_key.cpp +0 -11
  180. package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +11 -15
  181. package/src/duckdb/src/execution/index/art/iterator.cpp +130 -214
  182. package/src/duckdb/src/execution/index/art/leaf.cpp +300 -266
  183. package/src/duckdb/src/execution/index/art/node.cpp +211 -205
  184. package/src/duckdb/src/execution/index/art/node16.cpp +10 -19
  185. package/src/duckdb/src/execution/index/art/node256.cpp +10 -18
  186. package/src/duckdb/src/execution/index/art/node4.cpp +21 -23
  187. package/src/duckdb/src/execution/index/art/node48.cpp +10 -20
  188. package/src/duckdb/src/execution/index/art/prefix.cpp +308 -338
  189. package/src/duckdb/src/execution/join_hashtable.cpp +4 -4
  190. package/src/duckdb/src/execution/operator/aggregate/aggregate_object.cpp +1 -0
  191. package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +14 -11
  192. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +6 -4
  193. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +8 -3
  194. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +46 -34
  195. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +332 -1067
  196. package/src/duckdb/src/execution/operator/filter/physical_filter.cpp +1 -1
  197. package/src/duckdb/src/execution/operator/helper/physical_batch_collector.cpp +12 -9
  198. package/src/duckdb/src/execution/operator/helper/physical_explain_analyze.cpp +2 -2
  199. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +10 -8
  200. package/src/duckdb/src/execution/operator/helper/physical_materialized_collector.cpp +7 -5
  201. package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +7 -5
  202. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +449 -288
  203. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +2 -2
  204. package/src/duckdb/src/execution/operator/join/physical_comparison_join.cpp +1 -2
  205. package/src/duckdb/src/execution/operator/join/physical_delim_join.cpp +13 -6
  206. package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +28 -15
  207. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +35 -17
  208. package/src/duckdb/src/execution/operator/join/physical_join.cpp +1 -1
  209. package/src/duckdb/src/execution/operator/join/physical_nested_loop_join.cpp +7 -4
  210. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +31 -10
  211. package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +41 -5
  212. package/src/duckdb/src/execution/operator/order/physical_order.cpp +7 -5
  213. package/src/duckdb/src/execution/operator/order/physical_top_n.cpp +7 -5
  214. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +100 -13
  215. package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +1 -1
  216. package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +20 -0
  217. package/src/duckdb/src/execution/operator/persistent/csv_rejects_table.cpp +48 -0
  218. package/src/duckdb/src/execution/operator/persistent/parallel_csv_reader.cpp +2 -3
  219. package/src/duckdb/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +14 -10
  220. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +11 -9
  221. package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +9 -7
  222. package/src/duckdb/src/execution/operator/persistent/physical_fixed_batch_copy.cpp +14 -12
  223. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +11 -11
  224. package/src/duckdb/src/execution/operator/persistent/physical_update.cpp +4 -2
  225. package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -1
  226. package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +24 -27
  227. package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +19 -0
  228. package/src/duckdb/src/execution/operator/scan/physical_table_scan.cpp +7 -12
  229. package/src/duckdb/src/execution/operator/schema/physical_attach.cpp +2 -1
  230. package/src/duckdb/src/execution/operator/schema/physical_create_art_index.cpp +198 -0
  231. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +2 -6
  232. package/src/duckdb/src/execution/operator/set/physical_cte.cpp +160 -0
  233. package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +15 -5
  234. package/src/duckdb/src/execution/partitionable_hashtable.cpp +41 -6
  235. package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +37 -6
  236. package/src/duckdb/src/execution/physical_operator.cpp +20 -16
  237. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +43 -10
  238. package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +57 -35
  239. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +32 -15
  240. package/src/duckdb/src/execution/physical_plan/plan_create_index.cpp +45 -34
  241. package/src/duckdb/src/execution/physical_plan/plan_cte.cpp +33 -0
  242. package/src/duckdb/src/execution/physical_plan/plan_delim_join.cpp +2 -5
  243. package/src/duckdb/src/execution/physical_plan/plan_get.cpp +2 -2
  244. package/src/duckdb/src/execution/physical_plan/plan_recursive_cte.cpp +25 -4
  245. package/src/duckdb/src/execution/physical_plan_generator.cpp +6 -11
  246. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +290 -43
  247. package/src/duckdb/src/execution/window_executor.cpp +1284 -0
  248. package/src/duckdb/src/execution/window_segment_tree.cpp +408 -144
  249. package/src/duckdb/src/function/aggregate/distributive/count.cpp +2 -13
  250. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +6 -12
  251. package/src/duckdb/src/function/cast/bit_cast.cpp +34 -2
  252. package/src/duckdb/src/function/cast/blob_cast.cpp +3 -0
  253. package/src/duckdb/src/function/cast/numeric_casts.cpp +2 -0
  254. package/src/duckdb/src/function/cast/string_cast.cpp +2 -2
  255. package/src/duckdb/src/function/cast/time_casts.cpp +7 -6
  256. package/src/duckdb/src/function/function.cpp +3 -1
  257. package/src/duckdb/src/function/pragma/pragma_queries.cpp +5 -0
  258. package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +212 -0
  259. package/src/duckdb/src/function/scalar/compressed_materialization/compress_string.cpp +249 -0
  260. package/src/duckdb/src/function/scalar/compressed_materialization_functions.cpp +29 -0
  261. package/src/duckdb/src/function/scalar/list/list_resize.cpp +162 -0
  262. package/src/duckdb/src/function/scalar/nested_functions.cpp +1 -0
  263. package/src/duckdb/src/function/scalar/operators/add.cpp +9 -0
  264. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +6 -3
  265. package/src/duckdb/src/function/scalar/string/like.cpp +12 -4
  266. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +39 -5
  267. package/src/duckdb/src/function/scalar_function.cpp +5 -20
  268. package/src/duckdb/src/function/table/arrow/arrow_duck_schema.cpp +57 -0
  269. package/src/duckdb/src/function/table/arrow.cpp +110 -88
  270. package/src/duckdb/src/function/table/arrow_conversion.cpp +86 -73
  271. package/src/duckdb/src/function/table/copy_csv.cpp +8 -1
  272. package/src/duckdb/src/function/table/read_csv.cpp +124 -21
  273. package/src/duckdb/src/function/table/system/test_all_types.cpp +48 -21
  274. package/src/duckdb/src/function/table/system_functions.cpp +1 -0
  275. package/src/duckdb/src/function/table/table_scan.cpp +44 -0
  276. package/src/duckdb/src/function/table/version/pragma_version.cpp +49 -2
  277. package/src/duckdb/src/function/table_function.cpp +4 -3
  278. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/index_catalog_entry.hpp +3 -3
  279. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/macro_catalog_entry.hpp +1 -4
  280. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/schema_catalog_entry.hpp +2 -5
  281. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/sequence_catalog_entry.hpp +1 -6
  282. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_catalog_entry.hpp +2 -13
  283. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/type_catalog_entry.hpp +1 -4
  284. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/view_catalog_entry.hpp +2 -5
  285. package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +14 -0
  286. package/src/duckdb/src/include/duckdb/catalog/catalog_set.hpp +0 -6
  287. package/src/duckdb/src/include/duckdb/common/adbc/adbc.h +1 -0
  288. package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +4 -1
  289. package/src/duckdb/src/include/duckdb/common/adbc/single_batch_array_stream.hpp +16 -0
  290. package/src/duckdb/src/include/duckdb/common/allocator.hpp +2 -0
  291. package/src/duckdb/src/include/duckdb/common/arrow/appender/append_data.hpp +109 -0
  292. package/src/duckdb/src/include/duckdb/common/arrow/appender/bool_data.hpp +15 -0
  293. package/src/duckdb/src/include/duckdb/common/arrow/appender/enum_data.hpp +69 -0
  294. package/src/duckdb/src/include/duckdb/common/arrow/appender/list.hpp +8 -0
  295. package/src/duckdb/src/include/duckdb/common/arrow/appender/list_data.hpp +18 -0
  296. package/src/duckdb/src/include/duckdb/common/arrow/appender/map_data.hpp +18 -0
  297. package/src/duckdb/src/include/duckdb/common/arrow/appender/scalar_data.hpp +88 -0
  298. package/src/duckdb/src/include/duckdb/common/arrow/appender/struct_data.hpp +18 -0
  299. package/src/duckdb/src/include/duckdb/common/arrow/appender/union_data.hpp +21 -0
  300. package/src/duckdb/src/include/duckdb/common/arrow/appender/varchar_data.hpp +105 -0
  301. package/src/duckdb/src/include/duckdb/common/arrow/arrow_appender.hpp +9 -4
  302. package/src/duckdb/src/include/duckdb/common/arrow/arrow_converter.hpp +3 -5
  303. package/src/duckdb/src/include/duckdb/common/arrow/arrow_wrapper.hpp +5 -3
  304. package/src/duckdb/src/include/duckdb/common/arrow/nanoarrow/nanoarrow.h +462 -0
  305. package/src/duckdb/src/include/duckdb/common/arrow/nanoarrow/nanoarrow.hpp +14 -0
  306. package/src/duckdb/src/include/duckdb/common/arrow/result_arrow_wrapper.hpp +4 -0
  307. package/src/duckdb/src/include/duckdb/common/assert.hpp +1 -1
  308. package/src/duckdb/src/include/duckdb/common/bitpacking.hpp +70 -55
  309. package/src/duckdb/src/include/duckdb/common/bswap.hpp +42 -0
  310. package/src/duckdb/src/include/duckdb/common/case_insensitive_map.hpp +1 -0
  311. package/src/duckdb/src/include/duckdb/common/constants.hpp +4 -0
  312. package/src/duckdb/src/include/duckdb/common/dl.hpp +3 -1
  313. package/src/duckdb/src/include/duckdb/common/enum_util.hpp +660 -580
  314. package/src/duckdb/src/include/duckdb/common/enums/cte_materialize.hpp +21 -0
  315. package/src/duckdb/src/include/duckdb/common/enums/date_part_specifier.hpp +9 -1
  316. package/src/duckdb/src/include/duckdb/common/enums/index_type.hpp +4 -3
  317. package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +2 -1
  318. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +2 -0
  319. package/src/duckdb/src/include/duckdb/common/enums/operator_result_type.hpp +5 -1
  320. package/src/duckdb/src/include/duckdb/common/enums/optimizer_type.hpp +2 -0
  321. package/src/duckdb/src/include/duckdb/common/enums/pending_execution_result.hpp +1 -1
  322. package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +2 -0
  323. package/src/duckdb/src/include/duckdb/common/extra_operator_info.hpp +27 -0
  324. package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +215 -0
  325. package/src/duckdb/src/include/duckdb/common/field_writer.hpp +0 -4
  326. package/src/duckdb/src/include/duckdb/common/file_system.hpp +10 -8
  327. package/src/duckdb/src/include/duckdb/common/filename_pattern.hpp +1 -1
  328. package/src/duckdb/src/include/duckdb/common/helper.hpp +8 -3
  329. package/src/duckdb/src/include/duckdb/common/hive_partitioning.hpp +1 -1
  330. package/src/duckdb/src/include/duckdb/common/http_state.hpp +61 -28
  331. package/src/duckdb/src/include/duckdb/common/hugeint.hpp +15 -0
  332. package/src/duckdb/src/include/duckdb/common/index_vector.hpp +12 -0
  333. package/src/duckdb/src/include/duckdb/common/limits.hpp +52 -149
  334. package/src/duckdb/src/include/duckdb/common/multi_file_reader.hpp +11 -5
  335. package/src/duckdb/src/include/duckdb/common/multi_file_reader_options.hpp +12 -42
  336. package/src/duckdb/src/include/duckdb/common/mutex.hpp +3 -0
  337. package/src/duckdb/src/include/duckdb/common/numeric_utils.hpp +48 -0
  338. package/src/duckdb/src/include/duckdb/common/opener_file_system.hpp +6 -2
  339. package/src/duckdb/src/include/duckdb/common/operator/add.hpp +5 -2
  340. package/src/duckdb/src/include/duckdb/common/operator/cast_operators.hpp +65 -4
  341. package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +3 -2
  342. package/src/duckdb/src/include/duckdb/common/operator/numeric_cast.hpp +10 -0
  343. package/src/duckdb/src/include/duckdb/common/operator/string_cast.hpp +1 -1
  344. package/src/duckdb/src/include/duckdb/common/operator/subtract.hpp +3 -2
  345. package/src/duckdb/src/include/duckdb/common/radix.hpp +9 -20
  346. package/src/duckdb/src/include/duckdb/common/radix_partitioning.hpp +6 -21
  347. package/src/duckdb/src/include/duckdb/common/row_operations/row_operations.hpp +3 -3
  348. package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +35 -7
  349. package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +14 -6
  350. package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +0 -4
  351. package/src/duckdb/src/include/duckdb/common/serializer/deserialization_data.hpp +110 -0
  352. package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +94 -16
  353. package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +73 -40
  354. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +26 -4
  355. package/src/duckdb/src/include/duckdb/common/serializer.hpp +0 -7
  356. package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +23 -8
  357. package/src/duckdb/src/include/duckdb/common/stack_checker.hpp +34 -0
  358. package/src/duckdb/src/include/duckdb/common/string_util.hpp +11 -0
  359. package/src/duckdb/src/include/duckdb/common/type_util.hpp +8 -0
  360. package/src/duckdb/src/include/duckdb/common/typedefs.hpp +8 -0
  361. package/src/duckdb/src/include/duckdb/common/types/batched_data_collection.hpp +3 -1
  362. package/src/duckdb/src/include/duckdb/common/types/bit.hpp +81 -0
  363. package/src/duckdb/src/include/duckdb/common/types/column/column_data_allocator.hpp +11 -1
  364. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection.hpp +12 -1
  365. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection_segment.hpp +3 -1
  366. package/src/duckdb/src/include/duckdb/common/types/column/column_data_scan_states.hpp +3 -1
  367. package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +1 -3
  368. package/src/duckdb/src/include/duckdb/common/types/date.hpp +9 -5
  369. package/src/duckdb/src/include/duckdb/common/types/datetime.hpp +46 -3
  370. package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +11 -15
  371. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +5 -2
  372. package/src/duckdb/src/include/duckdb/common/types/row/row_data_collection_scanner.hpp +5 -1
  373. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_collection.hpp +1 -0
  374. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_states.hpp +3 -0
  375. package/src/duckdb/src/include/duckdb/common/types/string_heap.hpp +3 -0
  376. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +9 -0
  377. package/src/duckdb/src/include/duckdb/common/types/time.hpp +5 -0
  378. package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +16 -10
  379. package/src/duckdb/src/include/duckdb/common/types/value.hpp +7 -2
  380. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +7 -0
  381. package/src/duckdb/src/include/duckdb/common/types.hpp +6 -25
  382. package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +7 -2
  383. package/src/duckdb/src/include/duckdb/common/virtual_file_system.hpp +40 -97
  384. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +4 -4
  385. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +3 -1
  386. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic_functions.hpp +3 -1
  387. package/src/duckdb/src/include/duckdb/core_functions/aggregate/distributive_functions.hpp +4 -2
  388. package/src/duckdb/src/include/duckdb/core_functions/aggregate/holistic_functions.hpp +3 -1
  389. package/src/duckdb/src/include/duckdb/core_functions/aggregate/nested_functions.hpp +3 -1
  390. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +1 -0
  391. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +3 -3
  392. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression_functions.hpp +3 -1
  393. package/src/duckdb/src/include/duckdb/core_functions/scalar/bit_functions.hpp +3 -1
  394. package/src/duckdb/src/include/duckdb/core_functions/scalar/blob_functions.hpp +3 -1
  395. package/src/duckdb/src/include/duckdb/core_functions/scalar/date_functions.hpp +40 -11
  396. package/src/duckdb/src/include/duckdb/core_functions/scalar/debug_functions.hpp +27 -0
  397. package/src/duckdb/src/include/duckdb/core_functions/scalar/enum_functions.hpp +3 -1
  398. package/src/duckdb/src/include/duckdb/core_functions/scalar/generic_functions.hpp +3 -1
  399. package/src/duckdb/src/include/duckdb/core_functions/scalar/list_functions.hpp +7 -5
  400. package/src/duckdb/src/include/duckdb/core_functions/scalar/map_functions.hpp +3 -1
  401. package/src/duckdb/src/include/duckdb/core_functions/scalar/math_functions.hpp +6 -4
  402. package/src/duckdb/src/include/duckdb/core_functions/scalar/operators_functions.hpp +4 -2
  403. package/src/duckdb/src/include/duckdb/core_functions/scalar/random_functions.hpp +3 -1
  404. package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +12 -1
  405. package/src/duckdb/src/include/duckdb/core_functions/scalar/struct_functions.hpp +3 -1
  406. package/src/duckdb/src/include/duckdb/core_functions/scalar/union_functions.hpp +3 -1
  407. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +21 -3
  408. package/src/duckdb/src/include/duckdb/execution/executor.hpp +3 -0
  409. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +13 -12
  410. package/src/duckdb/src/include/duckdb/execution/index/art/art_key.hpp +0 -1
  411. package/src/duckdb/src/include/duckdb/execution/index/art/fixed_size_allocator.hpp +22 -24
  412. package/src/duckdb/src/include/duckdb/execution/index/art/iterator.hpp +32 -28
  413. package/src/duckdb/src/include/duckdb/execution/index/art/leaf.hpp +46 -51
  414. package/src/duckdb/src/include/duckdb/execution/index/art/node.hpp +134 -53
  415. package/src/duckdb/src/include/duckdb/execution/index/art/node16.hpp +5 -7
  416. package/src/duckdb/src/include/duckdb/execution/index/art/node256.hpp +5 -7
  417. package/src/duckdb/src/include/duckdb/execution/index/art/node4.hpp +7 -9
  418. package/src/duckdb/src/include/duckdb/execution/index/art/node48.hpp +5 -7
  419. package/src/duckdb/src/include/duckdb/execution/index/art/prefix.hpp +63 -52
  420. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_hash_aggregate.hpp +3 -3
  421. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_perfecthash_aggregate.hpp +1 -1
  422. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_ungrouped_aggregate.hpp +3 -3
  423. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_window.hpp +2 -2
  424. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_batch_collector.hpp +2 -2
  425. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_explain_analyze.hpp +1 -1
  426. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_limit.hpp +1 -1
  427. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_materialized_collector.hpp +1 -1
  428. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_vacuum.hpp +2 -2
  429. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_asof_join.hpp +5 -12
  430. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_blockwise_nl_join.hpp +1 -1
  431. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_delim_join.hpp +2 -2
  432. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_hash_join.hpp +2 -2
  433. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_iejoin.hpp +3 -3
  434. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_nested_loop_join.hpp +2 -2
  435. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_piecewise_merge_join.hpp +3 -3
  436. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_range_join.hpp +12 -1
  437. package/src/duckdb/src/include/duckdb/execution/operator/order/physical_order.hpp +2 -2
  438. package/src/duckdb/src/include/duckdb/execution/operator/order/physical_top_n.hpp +2 -2
  439. package/src/duckdb/src/include/duckdb/execution/operator/persistent/base_csv_reader.hpp +2 -2
  440. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_line_info.hpp +4 -3
  441. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +10 -1
  442. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_rejects_table.hpp +36 -0
  443. package/src/duckdb/src/include/duckdb/execution/operator/persistent/parallel_csv_reader.hpp +1 -1
  444. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_batch_copy_to_file.hpp +2 -2
  445. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_batch_insert.hpp +2 -2
  446. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_copy_to_file.hpp +2 -2
  447. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_fixed_batch_copy.hpp +2 -2
  448. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_insert.hpp +2 -2
  449. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_update.hpp +1 -1
  450. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_column_data_scan.hpp +10 -0
  451. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_table_scan.hpp +5 -5
  452. package/src/duckdb/src/include/duckdb/execution/operator/schema/{physical_create_index.hpp → physical_create_art_index.hpp} +14 -7
  453. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_cte.hpp +62 -0
  454. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_recursive_cte.hpp +8 -2
  455. package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +5 -1
  456. package/src/duckdb/src/include/duckdb/execution/perfect_aggregate_hashtable.hpp +4 -2
  457. package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +6 -5
  458. package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +11 -0
  459. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +6 -2
  460. package/src/duckdb/src/include/duckdb/execution/radix_partitioned_hashtable.hpp +10 -3
  461. package/src/duckdb/src/include/duckdb/execution/window_executor.hpp +313 -0
  462. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +79 -63
  463. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +12 -4
  464. package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +2 -2
  465. package/src/duckdb/src/include/duckdb/function/built_in_functions.hpp +1 -0
  466. package/src/duckdb/src/include/duckdb/function/copy_function.hpp +6 -1
  467. package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +81 -0
  468. package/src/duckdb/src/include/duckdb/function/macro_function.hpp +3 -0
  469. package/src/duckdb/src/include/duckdb/function/scalar/compressed_materialization_functions.hpp +49 -0
  470. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +1 -1
  471. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +5 -0
  472. package/src/duckdb/src/include/duckdb/function/scalar/strftime_format.hpp +8 -0
  473. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +2 -0
  474. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +8 -3
  475. package/src/duckdb/src/include/duckdb/function/scalar_macro_function.hpp +3 -0
  476. package/src/duckdb/src/include/duckdb/function/table/arrow/arrow_duck_schema.hpp +99 -0
  477. package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +6 -36
  478. package/src/duckdb/src/include/duckdb/function/table/read_csv.hpp +7 -0
  479. package/src/duckdb/src/include/duckdb/function/table/system_functions.hpp +5 -1
  480. package/src/duckdb/src/include/duckdb/function/table_function.hpp +8 -0
  481. package/src/duckdb/src/include/duckdb/function/table_macro_function.hpp +3 -0
  482. package/src/duckdb/src/include/duckdb/function/udf_function.hpp +2 -1
  483. package/src/duckdb/src/include/duckdb/main/attached_database.hpp +1 -1
  484. package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +4 -3
  485. package/src/duckdb/src/include/duckdb/main/chunk_scan_state/query_result.hpp +29 -0
  486. package/src/duckdb/src/include/duckdb/main/chunk_scan_state.hpp +43 -0
  487. package/src/duckdb/src/include/duckdb/main/client_config.hpp +5 -2
  488. package/src/duckdb/src/include/duckdb/main/client_context.hpp +16 -14
  489. package/src/duckdb/src/include/duckdb/main/client_properties.hpp +25 -0
  490. package/src/duckdb/src/include/duckdb/main/config.hpp +3 -1
  491. package/src/duckdb/src/include/duckdb/main/connection.hpp +1 -2
  492. package/src/duckdb/src/include/duckdb/main/extension/generated_extension_loader.hpp +22 -0
  493. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +8 -0
  494. package/src/duckdb/src/include/duckdb/main/extension_util.hpp +4 -0
  495. package/src/duckdb/src/include/duckdb/main/pending_query_result.hpp +5 -0
  496. package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +73 -5
  497. package/src/duckdb/src/include/duckdb/main/prepared_statement_data.hpp +6 -6
  498. package/src/duckdb/src/include/duckdb/main/query_result.hpp +2 -27
  499. package/src/duckdb/src/include/duckdb/main/relation/aggregate_relation.hpp +4 -1
  500. package/src/duckdb/src/include/duckdb/main/relation/cross_product_relation.hpp +4 -1
  501. package/src/duckdb/src/include/duckdb/main/relation/join_relation.hpp +5 -2
  502. package/src/duckdb/src/include/duckdb/main/relation.hpp +4 -2
  503. package/src/duckdb/src/include/duckdb/main/settings.hpp +41 -11
  504. package/src/duckdb/src/include/duckdb/optimizer/column_binding_replacer.hpp +47 -0
  505. package/src/duckdb/src/include/duckdb/optimizer/compressed_materialization.hpp +132 -0
  506. package/src/duckdb/src/include/duckdb/optimizer/deliminator.hpp +13 -16
  507. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +7 -0
  508. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +38 -64
  509. package/src/duckdb/src/include/duckdb/optimizer/join_order/cost_model.hpp +37 -0
  510. package/src/duckdb/src/include/duckdb/optimizer/join_order/estimated_properties.hpp +10 -1
  511. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_node.hpp +14 -29
  512. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_order_optimizer.hpp +8 -22
  513. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_relation.hpp +1 -12
  514. package/src/duckdb/src/include/duckdb/optimizer/join_order/plan_enumerator.hpp +89 -0
  515. package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph.hpp +19 -30
  516. package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph_manager.hpp +113 -0
  517. package/src/duckdb/src/include/duckdb/optimizer/join_order/relation_manager.hpp +73 -0
  518. package/src/duckdb/src/include/duckdb/optimizer/join_order/relation_statistics_helper.hpp +73 -0
  519. package/src/duckdb/src/include/duckdb/optimizer/matcher/set_matcher.hpp +13 -0
  520. package/src/duckdb/src/include/duckdb/optimizer/optimizer.hpp +3 -0
  521. package/src/duckdb/src/include/duckdb/optimizer/remove_duplicate_groups.hpp +40 -0
  522. package/src/duckdb/src/include/duckdb/optimizer/statistics_propagator.hpp +11 -3
  523. package/src/duckdb/src/include/duckdb/optimizer/topn_optimizer.hpp +2 -0
  524. package/src/duckdb/src/include/duckdb/parallel/pipeline.hpp +2 -3
  525. package/src/duckdb/src/include/duckdb/parallel/pipeline_executor.hpp +3 -2
  526. package/src/duckdb/src/include/duckdb/parallel/task_scheduler.hpp +9 -1
  527. package/src/duckdb/src/include/duckdb/parser/column_definition.hpp +6 -5
  528. package/src/duckdb/src/include/duckdb/parser/column_list.hpp +4 -0
  529. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +2 -0
  530. package/src/duckdb/src/include/duckdb/parser/constraint.hpp +5 -0
  531. package/src/duckdb/src/include/duckdb/parser/constraints/check_constraint.hpp +3 -0
  532. package/src/duckdb/src/include/duckdb/parser/constraints/foreign_key_constraint.hpp +6 -0
  533. package/src/duckdb/src/include/duckdb/parser/constraints/not_null_constraint.hpp +3 -0
  534. package/src/duckdb/src/include/duckdb/parser/constraints/unique_constraint.hpp +6 -0
  535. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +4 -1
  536. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +1 -1
  537. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +4 -1
  538. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +4 -1
  539. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +4 -1
  540. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +4 -1
  541. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +1 -1
  542. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +4 -1
  543. package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
  544. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +4 -1
  545. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +4 -1
  546. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +21 -4
  547. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +18 -2
  548. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +4 -1
  549. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +1 -1
  550. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +1 -1
  551. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +4 -1
  552. package/src/duckdb/src/include/duckdb/parser/group_by_node.hpp +11 -0
  553. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +12 -1
  554. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +66 -2
  555. package/src/duckdb/src/include/duckdb/parser/parsed_data/attach_info.hpp +8 -1
  556. package/src/duckdb/src/include/duckdb/parser/parsed_data/copy_info.hpp +8 -1
  557. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_index_info.hpp +9 -1
  558. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_info.hpp +9 -2
  559. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_macro_info.hpp +3 -0
  560. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_schema_info.hpp +3 -0
  561. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_sequence_info.hpp +3 -0
  562. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_info.hpp +3 -0
  563. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_type_info.hpp +3 -0
  564. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_view_info.hpp +3 -0
  565. package/src/duckdb/src/include/duckdb/parser/parsed_data/detach_info.hpp +7 -0
  566. package/src/duckdb/src/include/duckdb/parser/parsed_data/drop_info.hpp +7 -0
  567. package/src/duckdb/src/include/duckdb/parser/parsed_data/exported_table_data.hpp +7 -0
  568. package/src/duckdb/src/include/duckdb/parser/parsed_data/load_info.hpp +13 -3
  569. package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +22 -0
  570. package/src/duckdb/src/include/duckdb/parser/parsed_data/pragma_info.hpp +10 -0
  571. package/src/duckdb/src/include/duckdb/parser/parsed_data/show_select_info.hpp +7 -0
  572. package/src/duckdb/src/include/duckdb/parser/parsed_data/transaction_info.hpp +10 -0
  573. package/src/duckdb/src/include/duckdb/parser/parsed_data/vacuum_info.hpp +10 -0
  574. package/src/duckdb/src/include/duckdb/parser/parser.hpp +4 -0
  575. package/src/duckdb/src/include/duckdb/parser/query_node/cte_node.hpp +54 -0
  576. package/src/duckdb/src/include/duckdb/parser/query_node/list.hpp +1 -0
  577. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -1
  578. package/src/duckdb/src/include/duckdb/parser/statement/execute_statement.hpp +1 -1
  579. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +1 -0
  580. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +1 -1
  581. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
  582. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +1 -0
  583. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +23 -26
  584. package/src/duckdb/src/include/duckdb/planner/binder.hpp +12 -5
  585. package/src/duckdb/src/include/duckdb/planner/bound_constraint.hpp +0 -8
  586. package/src/duckdb/src/include/duckdb/planner/bound_parameter_map.hpp +2 -1
  587. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +6 -0
  588. package/src/duckdb/src/include/duckdb/planner/bound_tokens.hpp +1 -0
  589. package/src/duckdb/src/include/duckdb/planner/column_binding.hpp +9 -0
  590. package/src/duckdb/src/include/duckdb/planner/constraints/bound_unique_constraint.hpp +3 -3
  591. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +3 -0
  592. package/src/duckdb/src/include/duckdb/planner/expression/bound_between_expression.hpp +6 -0
  593. package/src/duckdb/src/include/duckdb/planner/expression/bound_case_expression.hpp +6 -0
  594. package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +6 -0
  595. package/src/duckdb/src/include/duckdb/planner/expression/bound_columnref_expression.hpp +3 -0
  596. package/src/duckdb/src/include/duckdb/planner/expression/bound_comparison_expression.hpp +3 -0
  597. package/src/duckdb/src/include/duckdb/planner/expression/bound_conjunction_expression.hpp +3 -0
  598. package/src/duckdb/src/include/duckdb/planner/expression/bound_constant_expression.hpp +3 -0
  599. package/src/duckdb/src/include/duckdb/planner/expression/bound_default_expression.hpp +3 -0
  600. package/src/duckdb/src/include/duckdb/planner/expression/bound_function_expression.hpp +4 -0
  601. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambda_expression.hpp +3 -1
  602. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambdaref_expression.hpp +3 -0
  603. package/src/duckdb/src/include/duckdb/planner/expression/bound_operator_expression.hpp +3 -0
  604. package/src/duckdb/src/include/duckdb/planner/expression/bound_parameter_data.hpp +24 -6
  605. package/src/duckdb/src/include/duckdb/planner/expression/bound_parameter_expression.hpp +9 -2
  606. package/src/duckdb/src/include/duckdb/planner/expression/bound_reference_expression.hpp +3 -0
  607. package/src/duckdb/src/include/duckdb/planner/expression/bound_unnest_expression.hpp +3 -0
  608. package/src/duckdb/src/include/duckdb/planner/expression/bound_window_expression.hpp +3 -0
  609. package/src/duckdb/src/include/duckdb/planner/expression/list.hpp +1 -0
  610. package/src/duckdb/src/include/duckdb/planner/expression.hpp +3 -0
  611. package/src/duckdb/src/include/duckdb/planner/expression_binder/lateral_binder.hpp +0 -2
  612. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +13 -1
  613. package/src/duckdb/src/include/duckdb/planner/filter/conjunction_filter.hpp +4 -0
  614. package/src/duckdb/src/include/duckdb/planner/filter/constant_filter.hpp +2 -0
  615. package/src/duckdb/src/include/duckdb/planner/filter/null_filter.hpp +4 -0
  616. package/src/duckdb/src/include/duckdb/planner/joinside.hpp +3 -0
  617. package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +3 -2
  618. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -2
  619. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +3 -3
  620. package/src/duckdb/src/include/duckdb/planner/operator/logical_aggregate.hpp +3 -0
  621. package/src/duckdb/src/include/duckdb/planner/operator/logical_any_join.hpp +3 -0
  622. package/src/duckdb/src/include/duckdb/planner/operator/logical_column_data_get.hpp +4 -0
  623. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +12 -7
  624. package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_to_file.hpp +2 -0
  625. package/src/duckdb/src/include/duckdb/planner/operator/logical_create.hpp +9 -6
  626. package/src/duckdb/src/include/duckdb/planner/operator/logical_create_index.hpp +12 -23
  627. package/src/duckdb/src/include/duckdb/planner/operator/logical_create_table.hpp +10 -6
  628. package/src/duckdb/src/include/duckdb/planner/operator/logical_cross_product.hpp +3 -0
  629. package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +9 -2
  630. package/src/duckdb/src/include/duckdb/planner/operator/logical_delete.hpp +7 -0
  631. package/src/duckdb/src/include/duckdb/planner/operator/logical_delim_get.hpp +3 -0
  632. package/src/duckdb/src/include/duckdb/planner/operator/logical_dependent_join.hpp +43 -0
  633. package/src/duckdb/src/include/duckdb/planner/operator/logical_distinct.hpp +6 -10
  634. package/src/duckdb/src/include/duckdb/planner/operator/logical_dummy_scan.hpp +2 -0
  635. package/src/duckdb/src/include/duckdb/planner/operator/logical_empty_result.hpp +2 -0
  636. package/src/duckdb/src/include/duckdb/planner/operator/logical_explain.hpp +4 -0
  637. package/src/duckdb/src/include/duckdb/planner/operator/logical_expression_get.hpp +3 -0
  638. package/src/duckdb/src/include/duckdb/planner/operator/logical_extension_operator.hpp +8 -0
  639. package/src/duckdb/src/include/duckdb/planner/operator/logical_filter.hpp +3 -0
  640. package/src/duckdb/src/include/duckdb/planner/operator/logical_get.hpp +11 -1
  641. package/src/duckdb/src/include/duckdb/planner/operator/logical_insert.hpp +6 -0
  642. package/src/duckdb/src/include/duckdb/planner/operator/logical_limit.hpp +3 -0
  643. package/src/duckdb/src/include/duckdb/planner/operator/logical_limit_percent.hpp +3 -0
  644. package/src/duckdb/src/include/duckdb/planner/operator/logical_materialized_cte.hpp +52 -0
  645. package/src/duckdb/src/include/duckdb/planner/operator/logical_order.hpp +7 -35
  646. package/src/duckdb/src/include/duckdb/planner/operator/logical_pivot.hpp +6 -0
  647. package/src/duckdb/src/include/duckdb/planner/operator/logical_positional_join.hpp +3 -0
  648. package/src/duckdb/src/include/duckdb/planner/operator/logical_projection.hpp +3 -0
  649. package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +10 -7
  650. package/src/duckdb/src/include/duckdb/planner/operator/logical_reset.hpp +4 -0
  651. package/src/duckdb/src/include/duckdb/planner/operator/logical_sample.hpp +6 -0
  652. package/src/duckdb/src/include/duckdb/planner/operator/logical_set.hpp +4 -0
  653. package/src/duckdb/src/include/duckdb/planner/operator/logical_set_operation.hpp +4 -0
  654. package/src/duckdb/src/include/duckdb/planner/operator/logical_show.hpp +3 -0
  655. package/src/duckdb/src/include/duckdb/planner/operator/logical_simple.hpp +3 -0
  656. package/src/duckdb/src/include/duckdb/planner/operator/logical_top_n.hpp +4 -0
  657. package/src/duckdb/src/include/duckdb/planner/operator/logical_unnest.hpp +2 -0
  658. package/src/duckdb/src/include/duckdb/planner/operator/logical_update.hpp +6 -0
  659. package/src/duckdb/src/include/duckdb/planner/operator/logical_window.hpp +3 -0
  660. package/src/duckdb/src/include/duckdb/planner/operator_extension.hpp +1 -0
  661. package/src/duckdb/src/include/duckdb/planner/planner.hpp +4 -3
  662. package/src/duckdb/src/include/duckdb/planner/query_node/bound_cte_node.hpp +44 -0
  663. package/src/duckdb/src/include/duckdb/planner/query_node/list.hpp +1 -0
  664. package/src/duckdb/src/include/duckdb/planner/subquery/flatten_dependent_join.hpp +2 -2
  665. package/src/duckdb/src/include/duckdb/planner/subquery/has_correlated_expressions.hpp +4 -1
  666. package/src/duckdb/src/include/duckdb/planner/subquery/recursive_dependent_join_planner.hpp +31 -0
  667. package/src/duckdb/src/include/duckdb/planner/subquery/rewrite_correlated_expressions.hpp +8 -2
  668. package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +7 -1
  669. package/src/duckdb/src/include/duckdb/planner/tableref/bound_cteref.hpp +5 -2
  670. package/src/duckdb/src/include/duckdb/planner/tableref/bound_pivotref.hpp +3 -0
  671. package/src/duckdb/src/include/duckdb/storage/arena_allocator.hpp +2 -1
  672. package/src/duckdb/src/include/duckdb/storage/block.hpp +27 -4
  673. package/src/duckdb/src/include/duckdb/storage/block_manager.hpp +11 -11
  674. package/src/duckdb/src/include/duckdb/storage/checkpoint/row_group_writer.hpp +5 -5
  675. package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_reader.hpp +2 -2
  676. package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -3
  677. package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +19 -16
  678. package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +1 -1
  679. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +2 -2
  680. package/src/duckdb/src/include/duckdb/storage/in_memory_block_manager.hpp +2 -2
  681. package/src/duckdb/src/include/duckdb/storage/index.hpp +2 -2
  682. package/src/duckdb/src/include/duckdb/storage/metadata/metadata_manager.hpp +88 -0
  683. package/src/duckdb/src/include/duckdb/storage/metadata/metadata_reader.hpp +54 -0
  684. package/src/duckdb/src/include/duckdb/storage/metadata/metadata_writer.hpp +45 -0
  685. package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +22 -0
  686. package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +2 -2
  687. package/src/duckdb/src/include/duckdb/storage/single_file_block_manager.hpp +8 -5
  688. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +4 -0
  689. package/src/duckdb/src/include/duckdb/storage/storage_info.hpp +2 -2
  690. package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +2 -2
  691. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +3 -0
  692. package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +2 -2
  693. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +4 -3
  694. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +3 -3
  695. package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +2 -2
  696. package/src/duckdb/src/include/duckdb/storage/table/table_index_list.hpp +1 -1
  697. package/src/duckdb/src/include/duckdb/storage/table_io_manager.hpp +3 -0
  698. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +3 -4
  699. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -3
  700. package/src/duckdb/src/include/duckdb/verification/prepared_statement_verifier.hpp +1 -1
  701. package/src/duckdb/src/include/duckdb.h +86 -1
  702. package/src/duckdb/src/main/appender.cpp +3 -1
  703. package/src/duckdb/src/main/attached_database.cpp +2 -2
  704. package/src/duckdb/src/main/capi/arrow-c.cpp +196 -8
  705. package/src/duckdb/src/main/capi/duckdb-c.cpp +16 -0
  706. package/src/duckdb/src/main/capi/duckdb_value-c.cpp +1 -1
  707. package/src/duckdb/src/main/capi/pending-c.cpp +23 -0
  708. package/src/duckdb/src/main/capi/prepared-c.cpp +106 -28
  709. package/src/duckdb/src/main/capi/result-c.cpp +3 -1
  710. package/src/duckdb/src/main/chunk_scan_state/query_result.cpp +53 -0
  711. package/src/duckdb/src/main/chunk_scan_state.cpp +48 -0
  712. package/src/duckdb/src/main/client_context.cpp +42 -19
  713. package/src/duckdb/src/main/client_verify.cpp +17 -0
  714. package/src/duckdb/src/main/config.cpp +4 -1
  715. package/src/duckdb/src/main/database.cpp +2 -11
  716. package/src/duckdb/src/main/db_instance_cache.cpp +14 -6
  717. package/src/duckdb/src/main/extension/extension_helper.cpp +107 -88
  718. package/src/duckdb/src/main/extension/extension_install.cpp +10 -1
  719. package/src/duckdb/src/main/extension/extension_load.cpp +26 -6
  720. package/src/duckdb/src/main/extension/extension_util.cpp +16 -0
  721. package/src/duckdb/src/main/pending_query_result.cpp +9 -1
  722. package/src/duckdb/src/main/prepared_statement.cpp +38 -11
  723. package/src/duckdb/src/main/prepared_statement_data.cpp +23 -18
  724. package/src/duckdb/src/main/query_result.cpp +0 -21
  725. package/src/duckdb/src/main/relation/aggregate_relation.cpp +20 -10
  726. package/src/duckdb/src/main/relation/cross_product_relation.cpp +4 -3
  727. package/src/duckdb/src/main/relation/join_relation.cpp +6 -6
  728. package/src/duckdb/src/main/relation.cpp +10 -9
  729. package/src/duckdb/src/main/settings/settings.cpp +79 -33
  730. package/src/duckdb/src/optimizer/column_binding_replacer.cpp +43 -0
  731. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +2 -4
  732. package/src/duckdb/src/optimizer/compressed_materialization/compress_aggregate.cpp +140 -0
  733. package/src/duckdb/src/optimizer/compressed_materialization/compress_distinct.cpp +42 -0
  734. package/src/duckdb/src/optimizer/compressed_materialization/compress_order.cpp +65 -0
  735. package/src/duckdb/src/optimizer/compressed_materialization.cpp +477 -0
  736. package/src/duckdb/src/optimizer/deliminator.cpp +180 -323
  737. package/src/duckdb/src/optimizer/filter_pushdown.cpp +23 -6
  738. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +79 -325
  739. package/src/duckdb/src/optimizer/join_order/cost_model.cpp +19 -0
  740. package/src/duckdb/src/optimizer/join_order/estimated_properties.cpp +7 -0
  741. package/src/duckdb/src/optimizer/join_order/join_node.cpp +5 -37
  742. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +48 -1047
  743. package/src/duckdb/src/optimizer/join_order/join_relation_set.cpp +2 -6
  744. package/src/duckdb/src/optimizer/join_order/plan_enumerator.cpp +552 -0
  745. package/src/duckdb/src/optimizer/join_order/query_graph.cpp +52 -41
  746. package/src/duckdb/src/optimizer/join_order/query_graph_manager.cpp +409 -0
  747. package/src/duckdb/src/optimizer/join_order/relation_manager.cpp +356 -0
  748. package/src/duckdb/src/optimizer/join_order/relation_statistics_helper.cpp +351 -0
  749. package/src/duckdb/src/optimizer/optimizer.cpp +49 -14
  750. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +5 -5
  751. package/src/duckdb/src/optimizer/pushdown/pushdown_get.cpp +0 -1
  752. package/src/duckdb/src/optimizer/pushdown/pushdown_projection.cpp +34 -7
  753. package/src/duckdb/src/optimizer/remove_duplicate_groups.cpp +127 -0
  754. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +4 -0
  755. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +154 -15
  756. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +65 -8
  757. package/src/duckdb/src/optimizer/statistics/operator/propagate_order.cpp +1 -1
  758. package/src/duckdb/src/optimizer/statistics_propagator.cpp +7 -5
  759. package/src/duckdb/src/optimizer/topn_optimizer.cpp +27 -10
  760. package/src/duckdb/src/optimizer/unnest_rewriter.cpp +3 -5
  761. package/src/duckdb/src/parallel/executor.cpp +25 -1
  762. package/src/duckdb/src/parallel/pipeline.cpp +0 -17
  763. package/src/duckdb/src/parallel/pipeline_executor.cpp +33 -13
  764. package/src/duckdb/src/parallel/pipeline_finish_event.cpp +55 -1
  765. package/src/duckdb/src/parallel/task_scheduler.cpp +18 -2
  766. package/src/duckdb/src/parser/column_definition.cpp +20 -32
  767. package/src/duckdb/src/parser/column_list.cpp +8 -0
  768. package/src/duckdb/src/parser/constraints/foreign_key_constraint.cpp +3 -0
  769. package/src/duckdb/src/parser/constraints/unique_constraint.cpp +3 -0
  770. package/src/duckdb/src/parser/expression/between_expression.cpp +3 -15
  771. package/src/duckdb/src/parser/expression/case_expression.cpp +0 -25
  772. package/src/duckdb/src/parser/expression/cast_expression.cpp +3 -14
  773. package/src/duckdb/src/parser/expression/collate_expression.cpp +3 -13
  774. package/src/duckdb/src/parser/expression/columnref_expression.cpp +3 -12
  775. package/src/duckdb/src/parser/expression/comparison_expression.cpp +3 -13
  776. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +0 -12
  777. package/src/duckdb/src/parser/expression/constant_expression.cpp +3 -11
  778. package/src/duckdb/src/parser/expression/default_expression.cpp +0 -4
  779. package/src/duckdb/src/parser/expression/function_expression.cpp +3 -32
  780. package/src/duckdb/src/parser/expression/lambda_expression.cpp +4 -14
  781. package/src/duckdb/src/parser/expression/operator_expression.cpp +0 -12
  782. package/src/duckdb/src/parser/expression/parameter_expression.cpp +7 -19
  783. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +4 -11
  784. package/src/duckdb/src/parser/expression/star_expression.cpp +0 -19
  785. package/src/duckdb/src/parser/expression/subquery_expression.cpp +0 -18
  786. package/src/duckdb/src/parser/expression/window_expression.cpp +3 -39
  787. package/src/duckdb/src/parser/parsed_data/alter_info.cpp +5 -2
  788. package/src/duckdb/src/parser/parsed_data/alter_table_info.cpp +38 -0
  789. package/src/duckdb/src/parser/parsed_data/create_index_info.cpp +17 -1
  790. package/src/duckdb/src/parser/parsed_data/create_sequence_info.cpp +2 -0
  791. package/src/duckdb/src/parser/parsed_data/detach_info.cpp +1 -1
  792. package/src/duckdb/src/parser/parsed_data/drop_info.cpp +1 -1
  793. package/src/duckdb/src/parser/parsed_data/sample_options.cpp +0 -18
  794. package/src/duckdb/src/parser/parsed_data/transaction_info.cpp +4 -1
  795. package/src/duckdb/src/parser/parsed_data/vacuum_info.cpp +1 -1
  796. package/src/duckdb/src/parser/parsed_expression.cpp +0 -70
  797. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +7 -0
  798. package/src/duckdb/src/parser/parser.cpp +62 -36
  799. package/src/duckdb/src/parser/query_node/cte_node.cpp +58 -0
  800. package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +0 -19
  801. package/src/duckdb/src/parser/query_node/select_node.cpp +0 -29
  802. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +0 -15
  803. package/src/duckdb/src/parser/query_node.cpp +15 -47
  804. package/src/duckdb/src/parser/result_modifier.cpp +0 -87
  805. package/src/duckdb/src/parser/statement/execute_statement.cpp +2 -2
  806. package/src/duckdb/src/parser/statement/select_statement.cpp +0 -10
  807. package/src/duckdb/src/parser/tableref/basetableref.cpp +0 -19
  808. package/src/duckdb/src/parser/tableref/emptytableref.cpp +0 -4
  809. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +0 -15
  810. package/src/duckdb/src/parser/tableref/joinref.cpp +3 -23
  811. package/src/duckdb/src/parser/tableref/pivotref.cpp +6 -45
  812. package/src/duckdb/src/parser/tableref/subqueryref.cpp +3 -13
  813. package/src/duckdb/src/parser/tableref/table_function.cpp +0 -15
  814. package/src/duckdb/src/parser/tableref.cpp +0 -44
  815. package/src/duckdb/src/parser/transform/constraint/transform_constraint.cpp +55 -38
  816. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +13 -4
  817. package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +55 -3
  818. package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +2 -0
  819. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +3 -0
  820. package/src/duckdb/src/parser/transform/expression/transform_multi_assign_reference.cpp +44 -0
  821. package/src/duckdb/src/parser/transform/expression/transform_param_ref.cpp +45 -26
  822. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +19 -1
  823. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +16 -1
  824. package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +13 -0
  825. package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +32 -17
  826. package/src/duckdb/src/parser/transform/statement/transform_create_type.cpp +1 -1
  827. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +6 -1
  828. package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +6 -1
  829. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -2
  830. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +14 -11
  831. package/src/duckdb/src/parser/transform/statement/transform_prepare.cpp +28 -6
  832. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +11 -2
  833. package/src/duckdb/src/parser/transform/statement/transform_update.cpp +6 -1
  834. package/src/duckdb/src/parser/transformer.cpp +44 -25
  835. package/src/duckdb/src/planner/binder/expression/bind_macro_expression.cpp +5 -3
  836. package/src/duckdb/src/planner/binder/expression/bind_parameter_expression.cpp +10 -10
  837. package/src/duckdb/src/planner/binder/query_node/bind_cte_node.cpp +64 -0
  838. package/src/duckdb/src/planner/binder/query_node/plan_cte_node.cpp +26 -0
  839. package/src/duckdb/src/planner/binder/query_node/plan_recursive_cte_node.cpp +5 -5
  840. package/src/duckdb/src/planner/binder/query_node/plan_setop.cpp +4 -4
  841. package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +36 -33
  842. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +14 -52
  843. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +0 -23
  844. package/src/duckdb/src/planner/binder/statement/bind_execute.cpp +13 -7
  845. package/src/duckdb/src/planner/binder/statement/bind_export.cpp +29 -4
  846. package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +24 -5
  847. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +32 -5
  848. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +116 -50
  849. package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -1
  850. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +67 -31
  851. package/src/duckdb/src/planner/binder/tableref/plan_subqueryref.cpp +3 -3
  852. package/src/duckdb/src/planner/binder.cpp +44 -31
  853. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +24 -1
  854. package/src/duckdb/src/planner/expression/bound_between_expression.cpp +4 -0
  855. package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +13 -8
  856. package/src/duckdb/src/planner/expression/bound_function_expression.cpp +22 -0
  857. package/src/duckdb/src/planner/expression/bound_parameter_expression.cpp +28 -20
  858. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +48 -4
  859. package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +4 -31
  860. package/src/duckdb/src/planner/expression_binder.cpp +23 -0
  861. package/src/duckdb/src/planner/expression_iterator.cpp +6 -0
  862. package/src/duckdb/src/planner/logical_operator.cpp +19 -7
  863. package/src/duckdb/src/planner/logical_operator_visitor.cpp +5 -6
  864. package/src/duckdb/src/planner/operator/logical_comparison_join.cpp +4 -2
  865. package/src/duckdb/src/planner/operator/logical_copy_to_file.cpp +8 -0
  866. package/src/duckdb/src/planner/operator/logical_create.cpp +14 -0
  867. package/src/duckdb/src/planner/operator/logical_create_index.cpp +36 -7
  868. package/src/duckdb/src/planner/operator/logical_create_table.cpp +16 -0
  869. package/src/duckdb/src/planner/operator/logical_cteref.cpp +3 -1
  870. package/src/duckdb/src/planner/operator/logical_delete.cpp +9 -2
  871. package/src/duckdb/src/planner/operator/logical_dependent_join.cpp +26 -0
  872. package/src/duckdb/src/planner/operator/logical_distinct.cpp +13 -0
  873. package/src/duckdb/src/planner/operator/logical_explain.cpp +1 -1
  874. package/src/duckdb/src/planner/operator/logical_extension_operator.cpp +39 -0
  875. package/src/duckdb/src/planner/operator/logical_get.cpp +82 -4
  876. package/src/duckdb/src/planner/operator/logical_insert.cpp +8 -2
  877. package/src/duckdb/src/planner/operator/logical_materialized_cte.cpp +22 -0
  878. package/src/duckdb/src/planner/operator/logical_order.cpp +39 -0
  879. package/src/duckdb/src/planner/operator/logical_pivot.cpp +3 -0
  880. package/src/duckdb/src/planner/operator/logical_recursive_cte.cpp +5 -5
  881. package/src/duckdb/src/planner/operator/logical_sample.cpp +3 -0
  882. package/src/duckdb/src/planner/operator/logical_update.cpp +8 -2
  883. package/src/duckdb/src/planner/parsed_data/bound_create_table_info.cpp +4 -2
  884. package/src/duckdb/src/planner/planner.cpp +18 -7
  885. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +90 -38
  886. package/src/duckdb/src/planner/subquery/has_correlated_expressions.cpp +22 -7
  887. package/src/duckdb/src/planner/subquery/rewrite_correlated_expressions.cpp +65 -7
  888. package/src/duckdb/src/storage/arena_allocator.cpp +13 -2
  889. package/src/duckdb/src/storage/buffer/block_manager.cpp +13 -9
  890. package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +1 -1
  891. package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +3 -4
  892. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +7 -7
  893. package/src/duckdb/src/storage/checkpoint_manager.cpp +74 -69
  894. package/src/duckdb/src/storage/compression/bitpacking.cpp +87 -63
  895. package/src/duckdb/src/storage/compression/bitpacking_hugeint.cpp +295 -0
  896. package/src/duckdb/src/storage/compression/fsst.cpp +1 -1
  897. package/src/duckdb/src/storage/compression/rle.cpp +52 -13
  898. package/src/duckdb/src/storage/data_table.cpp +36 -25
  899. package/src/duckdb/src/storage/index.cpp +4 -26
  900. package/src/duckdb/src/storage/local_storage.cpp +3 -4
  901. package/src/duckdb/src/storage/metadata/metadata_manager.cpp +267 -0
  902. package/src/duckdb/src/storage/metadata/metadata_reader.cpp +80 -0
  903. package/src/duckdb/src/storage/metadata/metadata_writer.cpp +86 -0
  904. package/src/duckdb/src/storage/serialization/serialize_constraint.cpp +98 -0
  905. package/src/duckdb/src/storage/serialization/serialize_create_info.cpp +194 -0
  906. package/src/duckdb/src/storage/serialization/serialize_expression.cpp +283 -0
  907. package/src/duckdb/src/storage/serialization/serialize_logical_operator.cpp +762 -0
  908. package/src/duckdb/src/storage/serialization/serialize_macro_function.cpp +62 -0
  909. package/src/duckdb/src/storage/serialization/serialize_nodes.cpp +432 -0
  910. package/src/duckdb/src/storage/serialization/serialize_parse_info.cpp +419 -0
  911. package/src/duckdb/src/storage/serialization/serialize_parsed_expression.cpp +342 -0
  912. package/src/duckdb/src/storage/serialization/serialize_query_node.cpp +122 -0
  913. package/src/duckdb/src/storage/serialization/serialize_result_modifier.cpp +97 -0
  914. package/src/duckdb/src/storage/serialization/serialize_statement.cpp +22 -0
  915. package/src/duckdb/src/storage/serialization/serialize_table_filter.cpp +97 -0
  916. package/src/duckdb/src/storage/serialization/serialize_tableref.cpp +164 -0
  917. package/src/duckdb/src/storage/serialization/serialize_types.cpp +127 -0
  918. package/src/duckdb/src/storage/single_file_block_manager.cpp +69 -51
  919. package/src/duckdb/src/storage/statistics/string_stats.cpp +21 -2
  920. package/src/duckdb/src/storage/storage_info.cpp +3 -2
  921. package/src/duckdb/src/storage/storage_manager.cpp +11 -5
  922. package/src/duckdb/src/storage/table/chunk_info.cpp +17 -0
  923. package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +3 -3
  924. package/src/duckdb/src/storage/table/list_column_data.cpp +6 -3
  925. package/src/duckdb/src/storage/table/persistent_table_data.cpp +1 -2
  926. package/src/duckdb/src/storage/table/row_group.cpp +34 -19
  927. package/src/duckdb/src/storage/table/row_group_collection.cpp +23 -19
  928. package/src/duckdb/src/storage/table/update_segment.cpp +1 -1
  929. package/src/duckdb/src/storage/table_index_list.cpp +1 -1
  930. package/src/duckdb/src/storage/wal_replay.cpp +24 -24
  931. package/src/duckdb/src/storage/write_ahead_log.cpp +3 -2
  932. package/src/duckdb/src/verification/prepared_statement_verifier.cpp +16 -11
  933. package/src/duckdb/third_party/concurrentqueue/concurrentqueue.h +2 -2
  934. package/src/duckdb/third_party/concurrentqueue/lightweightsemaphore.h +5 -2
  935. package/src/duckdb/third_party/fast_float/fast_float/fast_float.h +2 -0
  936. package/src/duckdb/third_party/httplib/httplib.hpp +10 -1
  937. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +10 -0
  938. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +2 -1
  939. package/src/duckdb/third_party/libpg_query/pg_functions.cpp +13 -0
  940. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +11057 -10328
  941. package/src/duckdb/third_party/libpg_query/src_backend_parser_scansup.cpp +9 -0
  942. package/src/duckdb/third_party/mbedtls/include/mbedtls_wrapper.hpp +10 -0
  943. package/src/duckdb/third_party/mbedtls/mbedtls_wrapper.cpp +31 -1
  944. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +4 -4
  945. package/src/duckdb/ub_src_common.cpp +4 -0
  946. package/src/duckdb/ub_src_common_adbc_nanoarrow.cpp +8 -0
  947. package/src/duckdb/ub_src_common_arrow_appender.cpp +10 -0
  948. package/src/duckdb/ub_src_common_serializer.cpp +2 -0
  949. package/src/duckdb/ub_src_core_functions_scalar_debug.cpp +2 -0
  950. package/src/duckdb/ub_src_core_functions_scalar_string.cpp +2 -0
  951. package/src/duckdb/ub_src_execution.cpp +2 -0
  952. package/src/duckdb/ub_src_execution_index_art.cpp +0 -6
  953. package/src/duckdb/ub_src_execution_operator_persistent.cpp +2 -0
  954. package/src/duckdb/ub_src_execution_operator_schema.cpp +1 -1
  955. package/src/duckdb/ub_src_execution_operator_set.cpp +2 -0
  956. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  957. package/src/duckdb/ub_src_function_scalar.cpp +2 -0
  958. package/src/duckdb/ub_src_function_scalar_compressed_materialization.cpp +4 -0
  959. package/src/duckdb/ub_src_function_scalar_list.cpp +2 -0
  960. package/src/duckdb/ub_src_function_table_arrow.cpp +2 -0
  961. package/src/duckdb/ub_src_main.cpp +2 -0
  962. package/src/duckdb/ub_src_main_chunk_scan_state.cpp +2 -0
  963. package/src/duckdb/ub_src_optimizer.cpp +6 -0
  964. package/src/duckdb/ub_src_optimizer_compressed_materialization.cpp +6 -0
  965. package/src/duckdb/ub_src_optimizer_join_order.cpp +10 -0
  966. package/src/duckdb/ub_src_optimizer_statistics_expression.cpp +0 -2
  967. package/src/duckdb/ub_src_parser.cpp +0 -2
  968. package/src/duckdb/ub_src_parser_query_node.cpp +2 -0
  969. package/src/duckdb/ub_src_parser_transform_expression.cpp +2 -0
  970. package/src/duckdb/ub_src_planner_binder_query_node.cpp +4 -0
  971. package/src/duckdb/ub_src_planner_operator.cpp +3 -3
  972. package/src/duckdb/ub_src_storage.cpp +0 -4
  973. package/src/duckdb/ub_src_storage_compression.cpp +2 -0
  974. package/src/duckdb/ub_src_storage_metadata.cpp +6 -0
  975. package/src/duckdb/ub_src_storage_serialization.cpp +28 -0
  976. package/src/duckdb_node.hpp +1 -0
  977. package/src/statement.cpp +10 -5
  978. package/test/columns.test.ts +25 -3
  979. package/test/extension.test.ts +1 -1
  980. package/test/test_all_types.test.ts +234 -0
  981. package/tsconfig.json +1 -0
  982. package/src/duckdb/src/execution/index/art/leaf_segment.cpp +0 -52
  983. package/src/duckdb/src/execution/index/art/prefix_segment.cpp +0 -42
  984. package/src/duckdb/src/execution/index/art/swizzleable_pointer.cpp +0 -22
  985. package/src/duckdb/src/execution/operator/schema/physical_create_index.cpp +0 -193
  986. package/src/duckdb/src/include/duckdb/common/arrow/arrow_options.hpp +0 -25
  987. package/src/duckdb/src/include/duckdb/execution/index/art/leaf_segment.hpp +0 -38
  988. package/src/duckdb/src/include/duckdb/execution/index/art/prefix_segment.hpp +0 -40
  989. package/src/duckdb/src/include/duckdb/execution/index/art/swizzleable_pointer.hpp +0 -58
  990. package/src/duckdb/src/include/duckdb/planner/operator/logical_asof_join.hpp +0 -27
  991. package/src/duckdb/src/include/duckdb/planner/operator/logical_delim_join.hpp +0 -32
  992. package/src/duckdb/src/include/duckdb/storage/meta_block_reader.hpp +0 -49
  993. package/src/duckdb/src/include/duckdb/storage/meta_block_writer.hpp +0 -50
  994. package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +0 -118
  995. package/src/duckdb/src/parser/common_table_expression_info.cpp +0 -19
  996. package/src/duckdb/src/planner/operator/logical_asof_join.cpp +0 -14
  997. package/src/duckdb/src/planner/operator/logical_delim_join.cpp +0 -27
  998. package/src/duckdb/src/storage/meta_block_reader.cpp +0 -78
  999. package/src/duckdb/src/storage/meta_block_writer.cpp +0 -80
@@ -3,7 +3,7 @@
3
3
 
4
4
  namespace duckdb {
5
5
 
6
- string GetDBAbsolutePath(const string &database_p) {
6
+ string GetDBAbsolutePath(const string &database_p, FileSystem &fs) {
7
7
  auto database = FileSystem::ExpandPath(database_p, nullptr);
8
8
  if (database.empty()) {
9
9
  return ":memory:";
@@ -16,15 +16,17 @@ string GetDBAbsolutePath(const string &database_p) {
16
16
  // this database path is handled by a replacement open and is not a file path
17
17
  return database;
18
18
  }
19
- if (FileSystem::IsPathAbsolute(database)) {
20
- return FileSystem::NormalizeAbsolutePath(database);
19
+ if (fs.IsPathAbsolute(database)) {
20
+ return fs.NormalizeAbsolutePath(database);
21
21
  }
22
- return FileSystem::NormalizeAbsolutePath(FileSystem::JoinPath(FileSystem::GetWorkingDirectory(), database));
22
+ return fs.NormalizeAbsolutePath(fs.JoinPath(FileSystem::GetWorkingDirectory(), database));
23
23
  }
24
24
 
25
25
  shared_ptr<DuckDB> DBInstanceCache::GetInstanceInternal(const string &database, const DBConfig &config) {
26
26
  shared_ptr<DuckDB> db_instance;
27
- auto abs_database_path = GetDBAbsolutePath(database);
27
+
28
+ auto local_fs = FileSystem::CreateLocal();
29
+ auto abs_database_path = GetDBAbsolutePath(database, *local_fs);
28
30
  if (db_instances.find(abs_database_path) != db_instances.end()) {
29
31
  db_instance = db_instances[abs_database_path].lock();
30
32
  if (db_instance) {
@@ -48,7 +50,13 @@ shared_ptr<DuckDB> DBInstanceCache::GetInstance(const string &database, const DB
48
50
 
49
51
  shared_ptr<DuckDB> DBInstanceCache::CreateInstanceInternal(const string &database, DBConfig &config,
50
52
  bool cache_instance) {
51
- auto abs_database_path = GetDBAbsolutePath(database);
53
+ string abs_database_path;
54
+ if (config.file_system) {
55
+ abs_database_path = GetDBAbsolutePath(database, *config.file_system);
56
+ } else {
57
+ auto tmp_fs = FileSystem::CreateLocal();
58
+ abs_database_path = GetDBAbsolutePath(database, *tmp_fs);
59
+ }
52
60
  if (db_instances.find(abs_database_path) != db_instances.end()) {
53
61
  throw duckdb::Exception(ExceptionType::CONNECTION,
54
62
  "Instance with path: " + abs_database_path + " already exists.");
@@ -6,88 +6,85 @@
6
6
  #include "duckdb/main/client_context.hpp"
7
7
  #include "duckdb/main/database.hpp"
8
8
 
9
- #if defined(BUILD_ICU_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
10
- #define ICU_STATICALLY_LOADED true
11
- #include "icu_extension.hpp"
12
- #else
13
- #define ICU_STATICALLY_LOADED false
9
+ // Note that c++ preprocessor doesn't have a nice way to clean this up so we need to set the defines we use to false
10
+ // explicitly when they are undefined
11
+ #ifndef DUCKDB_EXTENSION_ICU_LINKED
12
+ #define DUCKDB_EXTENSION_ICU_LINKED false
14
13
  #endif
15
14
 
16
- #if defined(BUILD_PARQUET_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
17
- #define PARQUET_STATICALLY_LOADED true
18
- #include "parquet_extension.hpp"
19
- #else
20
- #define PARQUET_STATICALLY_LOADED false
15
+ #ifndef DUCKDB_EXTENSION_PARQUET_LINKED
16
+ #define DUCKDB_EXTENSION_PARQUET_LINKED false
21
17
  #endif
22
18
 
23
- #if defined(BUILD_TPCH_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
24
- #define TPCH_STATICALLY_LOADED true
25
- #include "tpch_extension.hpp"
26
- #else
27
- #define TPCH_STATICALLY_LOADED false
19
+ #ifndef DUCKDB_EXTENSION_TPCH_LINKED
20
+ #define DUCKDB_EXTENSION_TPCH_LINKED false
28
21
  #endif
29
22
 
30
- #if defined(BUILD_TPCDS_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
31
- #define TPCDS_STATICALLY_LOADED true
32
- #include "tpcds_extension.hpp"
33
- #else
34
- #define TPCDS_STATICALLY_LOADED false
23
+ #ifndef DUCKDB_EXTENSION_TPCDS_LINKED
24
+ #define DUCKDB_EXTENSION_TPCDS_LINKED false
35
25
  #endif
36
26
 
37
- #if defined(BUILD_FTS_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
38
- #define FTS_STATICALLY_LOADED true
39
- #include "fts_extension.hpp"
40
- #else
41
- #define FTS_STATICALLY_LOADED false
27
+ #ifndef DUCKDB_EXTENSION_FTS_LINKED
28
+ #define DUCKDB_EXTENSION_FTS_LINKED false
42
29
  #endif
43
30
 
44
- #if defined(BUILD_HTTPFS_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
45
- #define HTTPFS_STATICALLY_LOADED true
46
- #include "httpfs_extension.hpp"
47
- #else
48
- #define HTTPFS_STATICALLY_LOADED false
31
+ #ifndef DUCKDB_EXTENSION_HTTPFS_LINKED
32
+ #define DUCKDB_EXTENSION_HTTPFS_LINKED false
49
33
  #endif
50
34
 
51
- #if defined(BUILD_VISUALIZER_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
52
- #include "visualizer_extension.hpp"
35
+ #ifndef DUCKDB_EXTENSION_JSON_LINKED
36
+ #define DUCKDB_EXTENSION_JSON_LINKED false
53
37
  #endif
54
38
 
55
- #if defined(BUILD_JSON_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
56
- #define JSON_STATICALLY_LOADED true
57
- #include "json_extension.hpp"
58
- #else
59
- #define JSON_STATICALLY_LOADED false
39
+ #ifndef DUCKDB_EXTENSION_JEMALLOC_LINKED
40
+ #define DUCKDB_EXTENSION_JEMALLOC_LINKED false
60
41
  #endif
61
42
 
62
- #if defined(BUILD_JEMALLOC_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
63
- #define JEMALLOC_STATICALLY_LOADED true
64
- #include "jemalloc_extension.hpp"
43
+ #ifndef DUCKDB_EXTENSION_AUTOCOMPLETE_LINKED
44
+ #define DUCKDB_EXTENSION_AUTOCOMPLETE_LINKED false
45
+ #endif
46
+
47
+ // Load the generated header file containing our list of extension headers
48
+ #if defined(GENERATED_EXTENSION_HEADERS) && GENERATED_EXTENSION_HEADERS && !defined(DUCKDB_AMALGAMATION)
49
+ #include "duckdb/main/extension/generated_extension_loader.hpp"
65
50
  #else
66
- #define JEMALLOC_STATICALLY_LOADED false
51
+ // TODO: rewrite package_build.py to allow also loading out-of-tree extensions in non-cmake builds, after that
52
+ // these can be removed
53
+ #if DUCKDB_EXTENSION_ICU_LINKED
54
+ #include "icu_extension.hpp"
55
+ #endif
56
+
57
+ #if DUCKDB_EXTENSION_PARQUET_LINKED
58
+ #include "parquet_extension.hpp"
67
59
  #endif
68
60
 
69
- #if defined(BUILD_EXCEL_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
70
- #include "excel_extension.hpp"
61
+ #if DUCKDB_EXTENSION_TPCH_LINKED
62
+ #include "tpch_extension.hpp"
71
63
  #endif
72
64
 
73
- #if defined(BUILD_SQLSMITH_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
74
- #include "sqlsmith_extension.hpp"
65
+ #if DUCKDB_EXTENSION_TPCDS_LINKED
66
+ #include "tpcds_extension.hpp"
75
67
  #endif
76
68
 
77
- #if defined(BUILD_INET_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
78
- #include "inet_extension.hpp"
69
+ #if DUCKDB_EXTENSION_FTS_LINKED
70
+ #include "fts_extension.hpp"
79
71
  #endif
80
72
 
81
- #if defined(BUILD_AUTOCOMPLETE_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
82
- #define AUTOCOMPLETE_STATICALLY_LOADED true
83
- #include "autocomplete_extension.hpp"
84
- #else
85
- #define AUTOCOMPLETE_STATICALLY_LOADED false
73
+ #if DUCKDB_EXTENSION_HTTPFS_LINKED
74
+ #include "httpfs_extension.hpp"
86
75
  #endif
87
76
 
88
- // Load the generated header file containing our list of extension headers
89
- #if defined(OOTE_HEADERS_AVAILABLE) && OOTE_HEADERS_AVAILABLE
90
- #include "extension_oote_loader.hpp"
77
+ #if DUCKDB_EXTENSION_JSON_LINKED
78
+ #include "json_extension.hpp"
79
+ #endif
80
+
81
+ #if DUCKDB_EXTENSION_JEMALLOC_LINKED
82
+ #include "jemalloc_extension.hpp"
83
+ #endif
84
+
85
+ #if DUCKDB_EXTENSION_AUTOCOMPLETE_LINKED
86
+ #include "autocomplete_extension.hpp"
87
+ #endif
91
88
  #endif
92
89
 
93
90
  namespace duckdb {
@@ -96,15 +93,15 @@ namespace duckdb {
96
93
  // Default Extensions
97
94
  //===--------------------------------------------------------------------===//
98
95
  static DefaultExtension internal_extensions[] = {
99
- {"icu", "Adds support for time zones and collations using the ICU library", ICU_STATICALLY_LOADED},
100
- {"parquet", "Adds support for reading and writing parquet files", PARQUET_STATICALLY_LOADED},
101
- {"tpch", "Adds TPC-H data generation and query support", TPCH_STATICALLY_LOADED},
102
- {"tpcds", "Adds TPC-DS data generation and query support", TPCDS_STATICALLY_LOADED},
103
- {"fts", "Adds support for Full-Text Search Indexes", FTS_STATICALLY_LOADED},
104
- {"httpfs", "Adds support for reading and writing files over a HTTP(S) connection", HTTPFS_STATICALLY_LOADED},
105
- {"json", "Adds support for JSON operations", JSON_STATICALLY_LOADED},
106
- {"jemalloc", "Overwrites system allocator with JEMalloc", JEMALLOC_STATICALLY_LOADED},
107
- {"autocomplete", "Add supports for autocomplete in the shell", AUTOCOMPLETE_STATICALLY_LOADED},
96
+ {"icu", "Adds support for time zones and collations using the ICU library", DUCKDB_EXTENSION_ICU_LINKED},
97
+ {"parquet", "Adds support for reading and writing parquet files", DUCKDB_EXTENSION_PARQUET_LINKED},
98
+ {"tpch", "Adds TPC-H data generation and query support", DUCKDB_EXTENSION_TPCH_LINKED},
99
+ {"tpcds", "Adds TPC-DS data generation and query support", DUCKDB_EXTENSION_TPCDS_LINKED},
100
+ {"fts", "Adds support for Full-Text Search Indexes", DUCKDB_EXTENSION_FTS_LINKED},
101
+ {"httpfs", "Adds support for reading and writing files over a HTTP(S) connection", DUCKDB_EXTENSION_HTTPFS_LINKED},
102
+ {"json", "Adds support for JSON operations", DUCKDB_EXTENSION_JSON_LINKED},
103
+ {"jemalloc", "Overwrites system allocator with JEMalloc", DUCKDB_EXTENSION_JEMALLOC_LINKED},
104
+ {"autocomplete", "Add supports for autocomplete in the shell", DUCKDB_EXTENSION_AUTOCOMPLETE_LINKED},
108
105
  {"motherduck", "Enables motherduck integration with the system", false},
109
106
  {"sqlite_scanner", "Adds support for reading SQLite database files", false},
110
107
  {"postgres_scanner", "Adds support for reading from a Postgres database", false},
@@ -143,14 +140,17 @@ bool ExtensionHelper::AllowAutoInstall(const string &extension) {
143
140
  // Load Statically Compiled Extension
144
141
  //===--------------------------------------------------------------------===//
145
142
  void ExtensionHelper::LoadAllExtensions(DuckDB &db) {
143
+ // The in-tree extensions that we check. Non-cmake builds are currently limited to these for static linking
144
+ // TODO: rewrite package_build.py to allow also loading out-of-tree extensions in non-cmake builds, after that
145
+ // these can be removed
146
146
  unordered_set<string> extensions {"parquet", "icu", "tpch", "tpcds", "fts", "httpfs", "visualizer",
147
147
  "json", "excel", "sqlsmith", "inet", "jemalloc", "autocomplete"};
148
148
  for (auto &ext : extensions) {
149
149
  LoadExtensionInternal(db, ext, true);
150
150
  }
151
151
 
152
- #if defined(OOTE_HEADERS_AVAILABLE) && OOTE_HEADERS_AVAILABLE
153
- for (auto &ext : OOT_EXTENSIONS) {
152
+ #if defined(GENERATED_EXTENSION_HEADERS) && GENERATED_EXTENSION_HEADERS
153
+ for (auto &ext : linked_extensions) {
154
154
  LoadExtensionInternal(db, ext, true);
155
155
  }
156
156
  #endif
@@ -178,105 +178,124 @@ ExtensionLoadResult ExtensionHelper::LoadExtensionInternal(DuckDB &db, const std
178
178
  return ExtensionLoadResult::LOADED_EXTENSION;
179
179
  }
180
180
  #endif
181
+
182
+ #ifdef DUCKDB_EXTENSIONS_TEST_WITH_LOADABLE
183
+ // Note: weird comma's are on purpose to do easy string contains on a list of extension names
184
+ if (!initial_load && StringUtil::Contains(DUCKDB_EXTENSIONS_TEST_WITH_LOADABLE, "," + extension + ",")) {
185
+ Connection con(db);
186
+ auto result = con.Query((string) "LOAD '" + DUCKDB_EXTENSIONS_BUILD_PATH + "/" + extension + "/" + extension +
187
+ ".duckdb_extension'");
188
+ if (result->HasError()) {
189
+ result->Print();
190
+ return ExtensionLoadResult::EXTENSION_UNKNOWN;
191
+ }
192
+ return ExtensionLoadResult::LOADED_EXTENSION;
193
+ }
194
+ #endif
195
+
196
+ // This is the main extension loading mechanism that loads the extension that are statically linked.
197
+ #if defined(GENERATED_EXTENSION_HEADERS) && GENERATED_EXTENSION_HEADERS
198
+ if (TryLoadLinkedExtension(db, extension)) {
199
+ return ExtensionLoadResult::LOADED_EXTENSION;
200
+ } else {
201
+ return ExtensionLoadResult::NOT_LOADED;
202
+ }
203
+ #endif
204
+
205
+ // This is the fallback to the "old" extension loading mechanism for non-cmake builds
206
+ // TODO: rewrite package_build.py to allow also loading out-of-tree extensions in non-cmake builds
181
207
  if (extension == "parquet") {
182
- #if PARQUET_STATICALLY_LOADED
208
+ #if DUCKDB_EXTENSION_PARQUET_LINKED
183
209
  db.LoadExtension<ParquetExtension>();
184
210
  #else
185
211
  // parquet extension required but not build: skip this test
186
212
  return ExtensionLoadResult::NOT_LOADED;
187
213
  #endif
188
214
  } else if (extension == "icu") {
189
- #if ICU_STATICALLY_LOADED
215
+ #if DUCKDB_EXTENSION_ICU_LINKED
190
216
  db.LoadExtension<IcuExtension>();
191
217
  #else
192
218
  // icu extension required but not build: skip this test
193
219
  return ExtensionLoadResult::NOT_LOADED;
194
220
  #endif
195
221
  } else if (extension == "tpch") {
196
- #if TPCH_STATICALLY_LOADED
222
+ #if DUCKDB_EXTENSION_TPCH_LINKED
197
223
  db.LoadExtension<TpchExtension>();
198
224
  #else
199
225
  // icu extension required but not build: skip this test
200
226
  return ExtensionLoadResult::NOT_LOADED;
201
227
  #endif
202
228
  } else if (extension == "tpcds") {
203
- #if TPCDS_STATICALLY_LOADED
229
+ #if DUCKDB_EXTENSION_TPCDS_LINKED
204
230
  db.LoadExtension<TpcdsExtension>();
205
231
  #else
206
232
  // icu extension required but not build: skip this test
207
233
  return ExtensionLoadResult::NOT_LOADED;
208
234
  #endif
209
235
  } else if (extension == "fts") {
210
- #if FTS_STATICALLY_LOADED
211
- db.LoadExtension<FtsExtension>();
236
+ #if DUCKDB_EXTENSION_FTS_LINKED
237
+ // db.LoadExtension<FtsExtension>();
212
238
  #else
213
239
  // fts extension required but not build: skip this test
214
240
  return ExtensionLoadResult::NOT_LOADED;
215
241
  #endif
216
242
  } else if (extension == "httpfs") {
217
- #if HTTPFS_STATICALLY_LOADED
243
+ #if DUCKDB_EXTENSION_HTTPFS_LINKED
218
244
  db.LoadExtension<HttpfsExtension>();
219
245
  #else
220
246
  return ExtensionLoadResult::NOT_LOADED;
221
247
  #endif
222
248
  } else if (extension == "visualizer") {
223
- #if defined(BUILD_VISUALIZER_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
249
+ #if DUCKDB_EXTENSION_VISUALIZER_LINKED
224
250
  db.LoadExtension<VisualizerExtension>();
225
251
  #else
226
252
  // visualizer extension required but not build: skip this test
227
253
  return ExtensionLoadResult::NOT_LOADED;
228
254
  #endif
229
255
  } else if (extension == "json") {
230
- #if JSON_STATICALLY_LOADED
256
+ #if DUCKDB_EXTENSION_JSON_LINKED
231
257
  db.LoadExtension<JsonExtension>();
232
258
  #else
233
259
  // json extension required but not build: skip this test
234
260
  return ExtensionLoadResult::NOT_LOADED;
235
261
  #endif
236
262
  } else if (extension == "excel") {
237
- #if defined(BUILD_EXCEL_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
263
+ #if DUCKDB_EXTENSION_EXCEL_LINKED
238
264
  db.LoadExtension<ExcelExtension>();
239
265
  #else
240
266
  // excel extension required but not build: skip this test
241
267
  return ExtensionLoadResult::NOT_LOADED;
242
268
  #endif
243
269
  } else if (extension == "sqlsmith") {
244
- #if defined(BUILD_SQLSMITH_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
270
+ #if DUCKDB_EXTENSION_SQLSMITH_LINKED
245
271
  db.LoadExtension<SqlsmithExtension>();
246
272
  #else
247
273
  // excel extension required but not build: skip this test
248
274
  return ExtensionLoadResult::NOT_LOADED;
249
275
  #endif
250
276
  } else if (extension == "jemalloc") {
251
- #if defined(BUILD_JEMALLOC_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
277
+ #if DUCKDB_EXTENSION_JEMALLOC_LINKED
252
278
  db.LoadExtension<JemallocExtension>();
253
279
  #else
254
280
  // jemalloc extension required but not build: skip this test
255
281
  return ExtensionLoadResult::NOT_LOADED;
256
282
  #endif
257
283
  } else if (extension == "autocomplete") {
258
- #if defined(BUILD_AUTOCOMPLETE_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
284
+ #if DUCKDB_EXTENSION_AUTOCOMPLETE_LINKED
259
285
  db.LoadExtension<AutocompleteExtension>();
260
286
  #else
261
287
  // autocomplete extension required but not build: skip this test
262
288
  return ExtensionLoadResult::NOT_LOADED;
263
289
  #endif
264
290
  } else if (extension == "inet") {
265
- #if defined(BUILD_INET_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
291
+ #if DUCKDB_EXTENSION_INET_LINKED
266
292
  db.LoadExtension<InetExtension>();
267
293
  #else
268
294
  // inet extension required but not build: skip this test
269
295
  return ExtensionLoadResult::NOT_LOADED;
270
296
  #endif
271
- } else {
272
-
273
- #if defined(OOTE_HEADERS_AVAILABLE) && OOTE_HEADERS_AVAILABLE
274
- if (TryLoadLinkedExtension(db, extension)) {
275
- return ExtensionLoadResult::LOADED_EXTENSION;
276
- }
277
- #endif
278
- return ExtensionLoadResult::EXTENSION_UNKNOWN;
279
297
  }
298
+
280
299
  return ExtensionLoadResult::LOADED_EXTENSION;
281
300
  }
282
301
 
@@ -4,8 +4,10 @@
4
4
  #include "duckdb/common/string_util.hpp"
5
5
 
6
6
  #ifndef DISABLE_DUCKDB_REMOTE_INSTALL
7
+ #ifndef DUCKDB_DISABLE_EXTENSION_LOAD
7
8
  #include "httplib.hpp"
8
9
  #endif
10
+ #endif
9
11
  #include "duckdb/common/windows_undefs.hpp"
10
12
 
11
13
  #include <fstream>
@@ -27,6 +29,9 @@ bool ExtensionHelper::IsRelease(const string &version_tag) {
27
29
  }
28
30
 
29
31
  const string ExtensionHelper::GetVersionDirectoryName() {
32
+ #ifdef DUCKDB_WASM_VERSION
33
+ return DUCKDB_QUOTE_DEFINE(DUCKDB_WASM_VERSION);
34
+ #endif
30
35
  if (IsRelease(DuckDB::LibraryVersion())) {
31
36
  return NormalizeVersionTag(DuckDB::LibraryVersion());
32
37
  } else {
@@ -51,7 +56,7 @@ string ExtensionHelper::ExtensionDirectory(DBConfig &config, FileSystem &fs) {
51
56
  // expand ~ in extension directory
52
57
  extension_directory = fs.ExpandPath(extension_directory);
53
58
  if (!fs.DirectoryExists(extension_directory)) {
54
- auto sep = fs.PathSeparator();
59
+ auto sep = fs.PathSeparator(extension_directory);
55
60
  auto splits = StringUtil::Split(extension_directory, sep);
56
61
  D_ASSERT(!splits.empty());
57
62
  string extension_directory_prefix;
@@ -152,6 +157,9 @@ void WriteExtensionFileToDisk(FileSystem &fs, const string &path, void *data, id
152
157
 
153
158
  void ExtensionHelper::InstallExtensionInternal(DBConfig &config, ClientConfig *client_config, FileSystem &fs,
154
159
  const string &local_path, const string &extension, bool force_install) {
160
+ #ifdef DUCKDB_DISABLE_EXTENSION_LOAD
161
+ throw PermissionException("Installing external extensions is disabled through a compile time flag");
162
+ #else
155
163
  if (!config.options.enable_external_access) {
156
164
  throw PermissionException("Installing extensions is disabled through configuration");
157
165
  }
@@ -237,6 +245,7 @@ void ExtensionHelper::InstallExtensionInternal(DBConfig &config, ClientConfig *c
237
245
  WriteExtensionFileToDisk(fs, temp_path, (void *)decompressed_body.data(), decompressed_body.size());
238
246
  fs.MoveFile(temp_path, local_extension_path);
239
247
  #endif
248
+ #endif
240
249
  }
241
250
 
242
251
  } // namespace duckdb
@@ -17,6 +17,7 @@ namespace duckdb {
17
17
  //===--------------------------------------------------------------------===//
18
18
  // Load External Extension
19
19
  //===--------------------------------------------------------------------===//
20
+ #ifndef DUCKDB_DISABLE_EXTENSION_LOAD
20
21
  typedef void (*ext_init_fun_t)(DatabaseInstance &);
21
22
  typedef const char *(*ext_version_fun_t)(void);
22
23
  typedef bool (*ext_is_storage_t)(void);
@@ -36,16 +37,31 @@ static void ComputeSHA256String(const std::string &to_hash, std::string *res) {
36
37
  }
37
38
 
38
39
  static void ComputeSHA256FileSegment(FileHandle *handle, const idx_t start, const idx_t end, std::string *res) {
39
- const idx_t len = end - start;
40
- string file_content;
41
- file_content.resize(len);
42
- handle->Read((void *)file_content.data(), len, start);
40
+ idx_t iter = start;
41
+ const idx_t segment_size = 1024 * 8;
43
42
 
44
- ComputeSHA256String(file_content, res);
43
+ duckdb_mbedtls::MbedTlsWrapper::SHA256State state;
44
+
45
+ std::string to_hash;
46
+ while (iter < end) {
47
+ idx_t len = std::min(end - iter, segment_size);
48
+ to_hash.resize(len);
49
+ handle->Read((void *)to_hash.data(), len, iter);
50
+
51
+ state.AddString(to_hash);
52
+
53
+ iter += segment_size;
54
+ }
55
+
56
+ *res = state.Finalize();
45
57
  }
58
+ #endif
46
59
 
47
60
  bool ExtensionHelper::TryInitialLoad(DBConfig &config, FileSystem &fs, const string &extension,
48
61
  ExtensionInitResult &result, string &error) {
62
+ #ifdef DUCKDB_DISABLE_EXTENSION_LOAD
63
+ throw PermissionException("Loading external extensions is disabled through a compile time flag");
64
+ #else
49
65
  if (!config.options.enable_external_access) {
50
66
  throw PermissionException("Loading external extensions is disabled through configuration");
51
67
  }
@@ -197,6 +213,7 @@ bool ExtensionHelper::TryInitialLoad(DBConfig &config, FileSystem &fs, const str
197
213
  result.filename = filename;
198
214
  result.lib_hdl = lib_hdl;
199
215
  return true;
216
+ #endif
200
217
  }
201
218
 
202
219
  ExtensionInitResult ExtensionHelper::InitialLoad(DBConfig &config, FileSystem &fs, const string &extension) {
@@ -241,7 +258,9 @@ void ExtensionHelper::LoadExternalExtension(DatabaseInstance &db, FileSystem &fs
241
258
  if (db.ExtensionIsLoaded(extension)) {
242
259
  return;
243
260
  }
244
-
261
+ #ifdef DUCKDB_DISABLE_EXTENSION_LOAD
262
+ throw PermissionException("Loading external extensions is disabled through a compile time flag");
263
+ #else
245
264
  auto res = InitialLoad(DBConfig::GetConfig(db), fs, extension);
246
265
  auto init_fun_name = res.basename + "_init";
247
266
 
@@ -256,6 +275,7 @@ void ExtensionHelper::LoadExternalExtension(DatabaseInstance &db, FileSystem &fs
256
275
  }
257
276
 
258
277
  db.SetExtensionLoaded(extension);
278
+ #endif
259
279
  }
260
280
 
261
281
  void ExtensionHelper::LoadExternalExtension(ClientContext &context, const string &extension) {
@@ -1,5 +1,6 @@
1
1
  #include "duckdb/main/extension_util.hpp"
2
2
  #include "duckdb/function/scalar_function.hpp"
3
+ #include "duckdb/parser/parsed_data/create_aggregate_function_info.hpp"
3
4
  #include "duckdb/parser/parsed_data/create_type_info.hpp"
4
5
  #include "duckdb/parser/parsed_data/create_copy_function_info.hpp"
5
6
  #include "duckdb/parser/parsed_data/create_pragma_function_info.hpp"
@@ -26,6 +27,21 @@ void ExtensionUtil::RegisterFunction(DatabaseInstance &db, ScalarFunction functi
26
27
  RegisterFunction(db, std::move(set));
27
28
  }
28
29
 
30
+ void ExtensionUtil::RegisterFunction(DatabaseInstance &db, AggregateFunction function) {
31
+ D_ASSERT(!function.name.empty());
32
+ AggregateFunctionSet set(function.name);
33
+ set.AddFunction(std::move(function));
34
+ RegisterFunction(db, std::move(set));
35
+ }
36
+
37
+ void ExtensionUtil::RegisterFunction(DatabaseInstance &db, AggregateFunctionSet set) {
38
+ D_ASSERT(!set.name.empty());
39
+ CreateAggregateFunctionInfo info(std::move(set));
40
+ auto &system_catalog = Catalog::GetSystemCatalog(db);
41
+ auto data = CatalogTransaction::GetSystemTransaction(db);
42
+ system_catalog.CreateFunction(data, info);
43
+ }
44
+
29
45
  void ExtensionUtil::RegisterFunction(DatabaseInstance &db, TableFunction function) {
30
46
  D_ASSERT(!function.name.empty());
31
47
  TableFunctionSet set(function.name);
@@ -55,7 +55,8 @@ PendingExecutionResult PendingQueryResult::ExecuteTaskInternal(ClientContextLock
55
55
 
56
56
  unique_ptr<QueryResult> PendingQueryResult::ExecuteInternal(ClientContextLock &lock) {
57
57
  CheckExecutableInternal(lock);
58
- while (ExecuteTaskInternal(lock) == PendingExecutionResult::RESULT_NOT_READY) {
58
+ // Busy wait while execution is not finished
59
+ while (!IsFinished(ExecuteTaskInternal(lock))) {
59
60
  }
60
61
  if (HasError()) {
61
62
  return make_uniq<MaterializedQueryResult>(error);
@@ -74,4 +75,11 @@ void PendingQueryResult::Close() {
74
75
  context.reset();
75
76
  }
76
77
 
78
+ bool PendingQueryResult::IsFinished(PendingExecutionResult result) {
79
+ if (result == PendingExecutionResult::RESULT_READY || result == PendingExecutionResult::EXECUTION_ERROR) {
80
+ return true;
81
+ }
82
+ return false;
83
+ }
84
+
77
85
  } // namespace duckdb
@@ -6,9 +6,9 @@
6
6
  namespace duckdb {
7
7
 
8
8
  PreparedStatement::PreparedStatement(shared_ptr<ClientContext> context, shared_ptr<PreparedStatementData> data_p,
9
- string query, idx_t n_param, case_insensitive_map_t<idx_t> named_param_pam_p)
9
+ string query, idx_t n_param, case_insensitive_map_t<idx_t> named_param_map_p)
10
10
  : context(std::move(context)), data(std::move(data_p)), query(std::move(query)), success(true), n_param(n_param),
11
- named_param_map(std::move(named_param_pam_p)) {
11
+ named_param_map(std::move(named_param_map_p)) {
12
12
  D_ASSERT(data || !success);
13
13
  }
14
14
 
@@ -56,19 +56,27 @@ const vector<string> &PreparedStatement::GetNames() {
56
56
  return data->names;
57
57
  }
58
58
 
59
- vector<LogicalType> PreparedStatement::GetExpectedParameterTypes() const {
59
+ case_insensitive_map_t<LogicalType> PreparedStatement::GetExpectedParameterTypes() const {
60
60
  D_ASSERT(data);
61
- vector<LogicalType> expected_types(data->value_map.size());
61
+ case_insensitive_map_t<LogicalType> expected_types(data->value_map.size());
62
62
  for (auto &it : data->value_map) {
63
- D_ASSERT(it.first >= 1);
64
- idx_t param_index = it.first - 1;
65
- D_ASSERT(param_index < expected_types.size());
63
+ auto &identifier = it.first;
64
+ D_ASSERT(data->value_map.count(identifier));
66
65
  D_ASSERT(it.second);
67
- expected_types[param_index] = it.second->value.type();
66
+ expected_types[identifier] = it.second->GetValue().type();
68
67
  }
69
68
  return expected_types;
70
69
  }
71
70
 
71
+ unique_ptr<QueryResult> PreparedStatement::Execute(case_insensitive_map_t<Value> &named_values,
72
+ bool allow_stream_result) {
73
+ auto pending = PendingQuery(named_values, allow_stream_result);
74
+ if (pending->HasError()) {
75
+ return make_uniq<MaterializedQueryResult>(pending->GetErrorObject());
76
+ }
77
+ return pending->Execute();
78
+ }
79
+
72
80
  unique_ptr<QueryResult> PreparedStatement::Execute(vector<Value> &values, bool allow_stream_result) {
73
81
  auto pending = PendingQuery(values, allow_stream_result);
74
82
  if (pending->HasError()) {
@@ -78,14 +86,33 @@ unique_ptr<QueryResult> PreparedStatement::Execute(vector<Value> &values, bool a
78
86
  }
79
87
 
80
88
  unique_ptr<PendingQueryResult> PreparedStatement::PendingQuery(vector<Value> &values, bool allow_stream_result) {
89
+ case_insensitive_map_t<Value> named_values;
90
+ for (idx_t i = 0; i < values.size(); i++) {
91
+ auto &val = values[i];
92
+ named_values[std::to_string(i + 1)] = val;
93
+ }
94
+ return PendingQuery(named_values, allow_stream_result);
95
+ }
96
+
97
+ unique_ptr<PendingQueryResult> PreparedStatement::PendingQuery(case_insensitive_map_t<Value> &named_values,
98
+ bool allow_stream_result) {
81
99
  if (!success) {
82
- throw InvalidInputException("Attempting to execute an unsuccessfully prepared statement!");
100
+ auto exception = InvalidInputException("Attempting to execute an unsuccessfully prepared statement!");
101
+ return make_uniq<PendingQueryResult>(PreservedError(exception));
83
102
  }
84
- D_ASSERT(data);
85
103
  PendingQueryParameters parameters;
86
- parameters.parameters = &values;
104
+ parameters.parameters = &named_values;
105
+
106
+ try {
107
+ VerifyParameters(named_values, named_param_map);
108
+ } catch (const Exception &ex) {
109
+ return make_uniq<PendingQueryResult>(PreservedError(ex));
110
+ }
111
+
112
+ D_ASSERT(data);
87
113
  parameters.allow_stream_result = allow_stream_result && data->properties.allow_stream_result;
88
114
  auto result = context->PendingQuery(query, data, parameters);
115
+ // The result should not contain any reference to the 'vector<Value> parameters.parameters'
89
116
  return result;
90
117
  }
91
118