duckdb 0.8.2-dev161.0 → 0.8.2-dev1764.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 (504) hide show
  1. package/binding.gyp +15 -12
  2. package/binding.gyp.in +1 -1
  3. package/configure.py +1 -1
  4. package/duckdb_extension_config.cmake +10 -0
  5. package/package.json +1 -1
  6. package/src/duckdb/extension/icu/icu-dateadd.cpp +2 -2
  7. package/src/duckdb/extension/icu/icu-datefunc.cpp +1 -1
  8. package/src/duckdb/extension/icu/icu-datepart.cpp +2 -2
  9. package/src/duckdb/extension/icu/icu-datesub.cpp +2 -2
  10. package/src/duckdb/extension/icu/icu-datetrunc.cpp +1 -1
  11. package/src/duckdb/extension/icu/icu-list-range.cpp +1 -1
  12. package/src/duckdb/extension/icu/icu-makedate.cpp +7 -0
  13. package/src/duckdb/extension/icu/icu-strptime.cpp +4 -4
  14. package/src/duckdb/extension/icu/icu-table-range.cpp +5 -5
  15. package/src/duckdb/extension/icu/icu-timebucket.cpp +16 -16
  16. package/src/duckdb/extension/icu/icu-timezone.cpp +8 -8
  17. package/src/duckdb/extension/icu/icu_extension.cpp +3 -3
  18. package/src/duckdb/extension/json/include/json_common.hpp +47 -231
  19. package/src/duckdb/extension/json/include/json_executors.hpp +49 -13
  20. package/src/duckdb/extension/json/include/json_functions.hpp +2 -1
  21. package/src/duckdb/extension/json/json_common.cpp +272 -40
  22. package/src/duckdb/extension/json/json_functions/json_create.cpp +21 -2
  23. package/src/duckdb/extension/json/json_functions/json_structure.cpp +1 -1
  24. package/src/duckdb/extension/json/json_functions/json_transform.cpp +91 -38
  25. package/src/duckdb/extension/json/json_functions/json_type.cpp +1 -1
  26. package/src/duckdb/extension/json/json_functions.cpp +24 -24
  27. package/src/duckdb/extension/json/json_scan.cpp +3 -6
  28. package/src/duckdb/extension/parquet/column_reader.cpp +19 -21
  29. package/src/duckdb/extension/parquet/column_writer.cpp +77 -61
  30. package/src/duckdb/extension/parquet/include/cast_column_reader.hpp +2 -2
  31. package/src/duckdb/extension/parquet/include/column_reader.hpp +14 -16
  32. package/src/duckdb/extension/parquet/include/column_writer.hpp +9 -7
  33. package/src/duckdb/extension/parquet/include/list_column_reader.hpp +2 -2
  34. package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +3 -3
  35. package/src/duckdb/extension/parquet/include/parquet_decimal_utils.hpp +3 -3
  36. package/src/duckdb/extension/parquet/include/parquet_file_metadata_cache.hpp +2 -2
  37. package/src/duckdb/extension/parquet/include/parquet_statistics.hpp +2 -2
  38. package/src/duckdb/extension/parquet/include/parquet_support.hpp +9 -11
  39. package/src/duckdb/extension/parquet/include/parquet_writer.hpp +24 -5
  40. package/src/duckdb/extension/parquet/include/string_column_reader.hpp +1 -1
  41. package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +2 -3
  42. package/src/duckdb/extension/parquet/include/zstd_file_system.hpp +2 -2
  43. package/src/duckdb/extension/parquet/parquet_extension.cpp +194 -20
  44. package/src/duckdb/extension/parquet/parquet_reader.cpp +6 -6
  45. package/src/duckdb/extension/parquet/parquet_statistics.cpp +7 -6
  46. package/src/duckdb/extension/parquet/parquet_writer.cpp +79 -16
  47. package/src/duckdb/extension/parquet/zstd_file_system.cpp +2 -2
  48. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +1 -1
  49. package/src/duckdb/src/catalog/catalog_search_path.cpp +5 -4
  50. package/src/duckdb/src/catalog/default/default_functions.cpp +16 -0
  51. package/src/duckdb/src/common/adbc/adbc.cpp +75 -10
  52. package/src/duckdb/src/common/adbc/driver_manager.cpp +6 -11
  53. package/src/duckdb/src/common/allocator.cpp +14 -2
  54. package/src/duckdb/src/common/arrow/arrow_appender.cpp +79 -12
  55. package/src/duckdb/src/common/arrow/arrow_converter.cpp +44 -19
  56. package/src/duckdb/src/common/assert.cpp +3 -0
  57. package/src/duckdb/src/common/enum_util.cpp +4619 -4446
  58. package/src/duckdb/src/common/enums/logical_operator_type.cpp +4 -0
  59. package/src/duckdb/src/common/enums/optimizer_type.cpp +2 -0
  60. package/src/duckdb/src/common/enums/physical_operator_type.cpp +4 -0
  61. package/src/duckdb/src/common/exception.cpp +2 -2
  62. package/src/duckdb/src/common/extra_type_info.cpp +506 -0
  63. package/src/duckdb/src/common/file_system.cpp +19 -0
  64. package/src/duckdb/src/common/hive_partitioning.cpp +10 -6
  65. package/src/duckdb/src/common/local_file_system.cpp +14 -14
  66. package/src/duckdb/src/common/multi_file_reader.cpp +184 -20
  67. package/src/duckdb/src/common/operator/cast_operators.cpp +35 -1
  68. package/src/duckdb/src/common/radix_partitioning.cpp +26 -8
  69. package/src/duckdb/src/common/re2_regex.cpp +1 -1
  70. package/src/duckdb/src/common/row_operations/row_external.cpp +1 -1
  71. package/src/duckdb/src/common/sort/merge_sorter.cpp +9 -16
  72. package/src/duckdb/src/common/sort/partition_state.cpp +70 -50
  73. package/src/duckdb/src/common/types/batched_data_collection.cpp +7 -2
  74. package/src/duckdb/src/common/types/bit.cpp +51 -0
  75. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +9 -6
  76. package/src/duckdb/src/common/types/column/column_data_collection.cpp +17 -2
  77. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +15 -6
  78. package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
  79. package/src/duckdb/src/common/types/data_chunk.cpp +2 -2
  80. package/src/duckdb/src/common/types/date.cpp +9 -0
  81. package/src/duckdb/src/common/types/list_segment.cpp +24 -74
  82. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +3 -9
  83. package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +2 -0
  84. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +2 -2
  85. package/src/duckdb/src/common/types/uuid.cpp +2 -2
  86. package/src/duckdb/src/common/types/validity_mask.cpp +33 -0
  87. package/src/duckdb/src/common/types/value.cpp +11 -6
  88. package/src/duckdb/src/common/types.cpp +9 -656
  89. package/src/duckdb/src/common/virtual_file_system.cpp +138 -1
  90. package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +2 -0
  91. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +2 -2
  92. package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +4 -4
  93. package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +4 -4
  94. package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +5 -4
  95. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +8 -8
  96. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +4 -3
  97. package/src/duckdb/src/core_functions/function_list.cpp +4 -2
  98. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +208 -42
  99. package/src/duckdb/src/core_functions/scalar/date/epoch.cpp +10 -24
  100. package/src/duckdb/src/core_functions/scalar/date/make_date.cpp +19 -4
  101. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +4 -2
  102. package/src/duckdb/src/execution/aggregate_hashtable.cpp +34 -18
  103. package/src/duckdb/src/execution/expression_executor.cpp +1 -1
  104. package/src/duckdb/src/execution/index/art/art.cpp +149 -139
  105. package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +1 -1
  106. package/src/duckdb/src/execution/index/art/iterator.cpp +129 -207
  107. package/src/duckdb/src/execution/index/art/leaf.cpp +8 -37
  108. package/src/duckdb/src/execution/index/art/node.cpp +113 -120
  109. package/src/duckdb/src/execution/index/art/node16.cpp +1 -10
  110. package/src/duckdb/src/execution/index/art/node256.cpp +1 -9
  111. package/src/duckdb/src/execution/index/art/node4.cpp +12 -13
  112. package/src/duckdb/src/execution/index/art/node48.cpp +1 -11
  113. package/src/duckdb/src/execution/index/art/prefix.cpp +228 -350
  114. package/src/duckdb/src/execution/join_hashtable.cpp +4 -4
  115. package/src/duckdb/src/execution/operator/aggregate/aggregate_object.cpp +1 -0
  116. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +8 -3
  117. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +32 -22
  118. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +512 -300
  119. package/src/duckdb/src/execution/operator/helper/physical_batch_collector.cpp +4 -3
  120. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +5 -5
  121. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +444 -284
  122. package/src/duckdb/src/execution/operator/join/physical_comparison_join.cpp +1 -1
  123. package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +21 -10
  124. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +28 -12
  125. package/src/duckdb/src/execution/operator/join/physical_join.cpp +1 -1
  126. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +23 -4
  127. package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +41 -5
  128. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +100 -13
  129. package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +1 -1
  130. package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +20 -0
  131. package/src/duckdb/src/execution/operator/persistent/csv_rejects_table.cpp +48 -0
  132. package/src/duckdb/src/execution/operator/persistent/parallel_csv_reader.cpp +2 -3
  133. package/src/duckdb/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +6 -4
  134. package/src/duckdb/src/execution/operator/persistent/physical_fixed_batch_copy.cpp +3 -3
  135. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
  136. package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -1
  137. package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +19 -0
  138. package/src/duckdb/src/execution/operator/scan/physical_table_scan.cpp +7 -2
  139. package/src/duckdb/src/execution/operator/set/physical_cte.cpp +160 -0
  140. package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +15 -5
  141. package/src/duckdb/src/execution/partitionable_hashtable.cpp +41 -6
  142. package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +30 -5
  143. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +43 -10
  144. package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +56 -33
  145. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +17 -13
  146. package/src/duckdb/src/execution/physical_plan/plan_cte.cpp +33 -0
  147. package/src/duckdb/src/execution/physical_plan/plan_get.cpp +2 -2
  148. package/src/duckdb/src/execution/physical_plan/plan_recursive_cte.cpp +25 -4
  149. package/src/duckdb/src/execution/physical_plan_generator.cpp +4 -0
  150. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +290 -43
  151. package/src/duckdb/src/execution/window_segment_tree.cpp +286 -129
  152. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +2 -1
  153. package/src/duckdb/src/function/cast/bit_cast.cpp +34 -2
  154. package/src/duckdb/src/function/cast/blob_cast.cpp +3 -0
  155. package/src/duckdb/src/function/cast/numeric_casts.cpp +2 -0
  156. package/src/duckdb/src/function/function.cpp +3 -1
  157. package/src/duckdb/src/function/pragma/pragma_queries.cpp +5 -0
  158. package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +212 -0
  159. package/src/duckdb/src/function/scalar/compressed_materialization/compress_string.cpp +249 -0
  160. package/src/duckdb/src/function/scalar/compressed_materialization_functions.cpp +29 -0
  161. package/src/duckdb/src/function/scalar/list/list_resize.cpp +162 -0
  162. package/src/duckdb/src/function/scalar/nested_functions.cpp +1 -0
  163. package/src/duckdb/src/function/scalar/string/like.cpp +12 -4
  164. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +12 -5
  165. package/src/duckdb/src/function/table/arrow.cpp +19 -0
  166. package/src/duckdb/src/function/table/arrow_conversion.cpp +35 -1
  167. package/src/duckdb/src/function/table/copy_csv.cpp +8 -1
  168. package/src/duckdb/src/function/table/read_csv.cpp +100 -17
  169. package/src/duckdb/src/function/table/system/test_all_types.cpp +7 -0
  170. package/src/duckdb/src/function/table/system_functions.cpp +1 -0
  171. package/src/duckdb/src/function/table/table_scan.cpp +9 -0
  172. package/src/duckdb/src/function/table/version/pragma_version.cpp +46 -2
  173. package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +1 -0
  174. package/src/duckdb/src/include/duckdb/common/allocator.hpp +2 -0
  175. package/src/duckdb/src/include/duckdb/common/bswap.hpp +42 -0
  176. package/src/duckdb/src/include/duckdb/common/dl.hpp +3 -1
  177. package/src/duckdb/src/include/duckdb/common/enum_util.hpp +616 -584
  178. package/src/duckdb/src/include/duckdb/common/enums/cte_materialize.hpp +21 -0
  179. package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +2 -1
  180. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +2 -0
  181. package/src/duckdb/src/include/duckdb/common/enums/optimizer_type.hpp +2 -0
  182. package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +2 -0
  183. package/src/duckdb/src/include/duckdb/common/extra_operator_info.hpp +27 -0
  184. package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +219 -0
  185. package/src/duckdb/src/include/duckdb/common/file_system.hpp +2 -0
  186. package/src/duckdb/src/include/duckdb/common/hive_partitioning.hpp +1 -1
  187. package/src/duckdb/src/include/duckdb/common/multi_file_reader.hpp +6 -4
  188. package/src/duckdb/src/include/duckdb/common/multi_file_reader_options.hpp +10 -42
  189. package/src/duckdb/src/include/duckdb/common/mutex.hpp +3 -0
  190. package/src/duckdb/src/include/duckdb/common/opener_file_system.hpp +2 -2
  191. package/src/duckdb/src/include/duckdb/common/operator/cast_operators.hpp +43 -3
  192. package/src/duckdb/src/include/duckdb/common/operator/numeric_cast.hpp +10 -0
  193. package/src/duckdb/src/include/duckdb/common/radix.hpp +9 -20
  194. package/src/duckdb/src/include/duckdb/common/radix_partitioning.hpp +6 -21
  195. package/src/duckdb/src/include/duckdb/common/row_operations/row_operations.hpp +3 -3
  196. package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +23 -8
  197. package/src/duckdb/src/include/duckdb/common/string_util.hpp +11 -0
  198. package/src/duckdb/src/include/duckdb/common/types/batched_data_collection.hpp +3 -1
  199. package/src/duckdb/src/include/duckdb/common/types/bit.hpp +81 -0
  200. package/src/duckdb/src/include/duckdb/common/types/column/column_data_allocator.hpp +1 -1
  201. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection.hpp +6 -1
  202. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection_segment.hpp +1 -1
  203. package/src/duckdb/src/include/duckdb/common/types/column/column_data_scan_states.hpp +3 -1
  204. package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +1 -1
  205. package/src/duckdb/src/include/duckdb/common/types/date.hpp +7 -5
  206. package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +6 -8
  207. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +5 -2
  208. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_collection.hpp +1 -0
  209. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_states.hpp +3 -0
  210. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +9 -0
  211. package/src/duckdb/src/include/duckdb/common/types/value.hpp +1 -0
  212. package/src/duckdb/src/include/duckdb/common/types.hpp +1 -15
  213. package/src/duckdb/src/include/duckdb/common/virtual_file_system.hpp +38 -97
  214. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +4 -4
  215. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +3 -1
  216. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic_functions.hpp +3 -1
  217. package/src/duckdb/src/include/duckdb/core_functions/aggregate/distributive_functions.hpp +3 -1
  218. package/src/duckdb/src/include/duckdb/core_functions/aggregate/holistic_functions.hpp +3 -1
  219. package/src/duckdb/src/include/duckdb/core_functions/aggregate/nested_functions.hpp +3 -1
  220. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +1 -0
  221. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +3 -3
  222. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression_functions.hpp +3 -1
  223. package/src/duckdb/src/include/duckdb/core_functions/scalar/bit_functions.hpp +3 -1
  224. package/src/duckdb/src/include/duckdb/core_functions/scalar/blob_functions.hpp +3 -1
  225. package/src/duckdb/src/include/duckdb/core_functions/scalar/date_functions.hpp +31 -11
  226. package/src/duckdb/src/include/duckdb/core_functions/scalar/enum_functions.hpp +3 -1
  227. package/src/duckdb/src/include/duckdb/core_functions/scalar/generic_functions.hpp +3 -1
  228. package/src/duckdb/src/include/duckdb/core_functions/scalar/list_functions.hpp +3 -1
  229. package/src/duckdb/src/include/duckdb/core_functions/scalar/map_functions.hpp +3 -1
  230. package/src/duckdb/src/include/duckdb/core_functions/scalar/math_functions.hpp +3 -1
  231. package/src/duckdb/src/include/duckdb/core_functions/scalar/operators_functions.hpp +3 -1
  232. package/src/duckdb/src/include/duckdb/core_functions/scalar/random_functions.hpp +3 -1
  233. package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +3 -1
  234. package/src/duckdb/src/include/duckdb/core_functions/scalar/struct_functions.hpp +3 -1
  235. package/src/duckdb/src/include/duckdb/core_functions/scalar/union_functions.hpp +3 -1
  236. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +21 -3
  237. package/src/duckdb/src/include/duckdb/execution/executor.hpp +3 -0
  238. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +4 -5
  239. package/src/duckdb/src/include/duckdb/execution/index/art/iterator.hpp +31 -27
  240. package/src/duckdb/src/include/duckdb/execution/index/art/leaf.hpp +6 -14
  241. package/src/duckdb/src/include/duckdb/execution/index/art/node.hpp +4 -10
  242. package/src/duckdb/src/include/duckdb/execution/index/art/node16.hpp +3 -6
  243. package/src/duckdb/src/include/duckdb/execution/index/art/node256.hpp +3 -6
  244. package/src/duckdb/src/include/duckdb/execution/index/art/node4.hpp +5 -8
  245. package/src/duckdb/src/include/duckdb/execution/index/art/node48.hpp +3 -6
  246. package/src/duckdb/src/include/duckdb/execution/index/art/prefix.hpp +63 -52
  247. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_asof_join.hpp +3 -10
  248. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_iejoin.hpp +1 -1
  249. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_piecewise_merge_join.hpp +1 -1
  250. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_range_join.hpp +12 -1
  251. package/src/duckdb/src/include/duckdb/execution/operator/persistent/base_csv_reader.hpp +2 -2
  252. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_line_info.hpp +4 -3
  253. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +8 -1
  254. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_rejects_table.hpp +36 -0
  255. package/src/duckdb/src/include/duckdb/execution/operator/persistent/parallel_csv_reader.hpp +1 -1
  256. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_column_data_scan.hpp +10 -0
  257. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_table_scan.hpp +5 -1
  258. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_cte.hpp +62 -0
  259. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_recursive_cte.hpp +8 -2
  260. package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +5 -1
  261. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +3 -0
  262. package/src/duckdb/src/include/duckdb/execution/radix_partitioned_hashtable.hpp +10 -3
  263. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +51 -40
  264. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +1 -1
  265. package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +2 -2
  266. package/src/duckdb/src/include/duckdb/function/built_in_functions.hpp +1 -0
  267. package/src/duckdb/src/include/duckdb/function/scalar/compressed_materialization_functions.hpp +49 -0
  268. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +1 -1
  269. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +5 -0
  270. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +2 -0
  271. package/src/duckdb/src/include/duckdb/function/table/system_functions.hpp +4 -0
  272. package/src/duckdb/src/include/duckdb/main/client_config.hpp +5 -0
  273. package/src/duckdb/src/include/duckdb/main/config.hpp +2 -0
  274. package/src/duckdb/src/include/duckdb/main/connection.hpp +1 -2
  275. package/src/duckdb/src/include/duckdb/main/extension/generated_extension_loader.hpp +22 -0
  276. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +2 -0
  277. package/src/duckdb/src/include/duckdb/main/relation/cross_product_relation.hpp +4 -1
  278. package/src/duckdb/src/include/duckdb/main/relation/join_relation.hpp +5 -2
  279. package/src/duckdb/src/include/duckdb/main/relation.hpp +4 -2
  280. package/src/duckdb/src/include/duckdb/main/settings.hpp +39 -1
  281. package/src/duckdb/src/include/duckdb/optimizer/column_binding_replacer.hpp +47 -0
  282. package/src/duckdb/src/include/duckdb/optimizer/compressed_materialization.hpp +132 -0
  283. package/src/duckdb/src/include/duckdb/optimizer/deliminator.hpp +13 -16
  284. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +3 -0
  285. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +1 -1
  286. package/src/duckdb/src/include/duckdb/optimizer/join_order/estimated_properties.hpp +10 -1
  287. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_order_optimizer.hpp +1 -1
  288. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_relation.hpp +1 -1
  289. package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph.hpp +3 -0
  290. package/src/duckdb/src/include/duckdb/optimizer/matcher/set_matcher.hpp +13 -0
  291. package/src/duckdb/src/include/duckdb/optimizer/optimizer.hpp +3 -0
  292. package/src/duckdb/src/include/duckdb/optimizer/remove_duplicate_groups.hpp +40 -0
  293. package/src/duckdb/src/include/duckdb/optimizer/statistics_propagator.hpp +11 -3
  294. package/src/duckdb/src/include/duckdb/optimizer/topn_optimizer.hpp +2 -0
  295. package/src/duckdb/src/include/duckdb/parallel/pipeline.hpp +2 -0
  296. package/src/duckdb/src/include/duckdb/parallel/task_scheduler.hpp +5 -0
  297. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +2 -0
  298. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
  299. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +3 -0
  300. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +3 -0
  301. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +3 -0
  302. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +3 -0
  303. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
  304. package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
  305. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +3 -0
  306. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +3 -0
  307. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +3 -0
  308. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +3 -0
  309. package/src/duckdb/src/include/duckdb/parser/query_node/cte_node.hpp +54 -0
  310. package/src/duckdb/src/include/duckdb/parser/query_node/list.hpp +1 -0
  311. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -1
  312. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +1 -0
  313. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +1 -1
  314. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
  315. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +1 -0
  316. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +15 -8
  317. package/src/duckdb/src/include/duckdb/planner/binder.hpp +12 -5
  318. package/src/duckdb/src/include/duckdb/planner/bound_tokens.hpp +1 -0
  319. package/src/duckdb/src/include/duckdb/planner/column_binding.hpp +4 -0
  320. package/src/duckdb/src/include/duckdb/planner/constraints/bound_unique_constraint.hpp +3 -3
  321. package/src/duckdb/src/include/duckdb/planner/expression_binder/lateral_binder.hpp +0 -2
  322. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
  323. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +2 -1
  324. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -5
  325. package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +7 -2
  326. package/src/duckdb/src/include/duckdb/planner/operator/logical_dependent_join.hpp +43 -0
  327. package/src/duckdb/src/include/duckdb/planner/operator/logical_get.hpp +4 -0
  328. package/src/duckdb/src/include/duckdb/planner/operator/logical_materialized_cte.hpp +49 -0
  329. package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +5 -4
  330. package/src/duckdb/src/include/duckdb/planner/query_node/bound_cte_node.hpp +44 -0
  331. package/src/duckdb/src/include/duckdb/planner/query_node/list.hpp +1 -0
  332. package/src/duckdb/src/include/duckdb/planner/subquery/flatten_dependent_join.hpp +2 -2
  333. package/src/duckdb/src/include/duckdb/planner/subquery/has_correlated_expressions.hpp +4 -1
  334. package/src/duckdb/src/include/duckdb/planner/subquery/recursive_dependent_join_planner.hpp +31 -0
  335. package/src/duckdb/src/include/duckdb/planner/subquery/rewrite_correlated_expressions.hpp +8 -2
  336. package/src/duckdb/src/include/duckdb/planner/tableref/bound_cteref.hpp +5 -2
  337. package/src/duckdb/src/include/duckdb/storage/arena_allocator.hpp +1 -1
  338. package/src/duckdb/src/include/duckdb/storage/block_manager.hpp +3 -3
  339. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +1 -1
  340. package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +22 -0
  341. package/src/duckdb/src/include/duckdb/storage/single_file_block_manager.hpp +2 -0
  342. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +4 -0
  343. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +3 -0
  344. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +3 -2
  345. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +1 -3
  346. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -3
  347. package/src/duckdb/src/include/duckdb.h +28 -0
  348. package/src/duckdb/src/main/capi/arrow-c.cpp +155 -1
  349. package/src/duckdb/src/main/capi/duckdb_value-c.cpp +1 -1
  350. package/src/duckdb/src/main/config.cpp +4 -0
  351. package/src/duckdb/src/main/database.cpp +1 -1
  352. package/src/duckdb/src/main/extension/extension_helper.cpp +93 -88
  353. package/src/duckdb/src/main/extension/extension_install.cpp +9 -0
  354. package/src/duckdb/src/main/extension/extension_load.cpp +10 -1
  355. package/src/duckdb/src/main/relation/cross_product_relation.cpp +4 -3
  356. package/src/duckdb/src/main/relation/join_relation.cpp +5 -5
  357. package/src/duckdb/src/main/relation.cpp +6 -5
  358. package/src/duckdb/src/main/settings/settings.cpp +79 -18
  359. package/src/duckdb/src/optimizer/column_binding_replacer.cpp +43 -0
  360. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -2
  361. package/src/duckdb/src/optimizer/compressed_materialization/compress_aggregate.cpp +140 -0
  362. package/src/duckdb/src/optimizer/compressed_materialization/compress_distinct.cpp +42 -0
  363. package/src/duckdb/src/optimizer/compressed_materialization/compress_order.cpp +65 -0
  364. package/src/duckdb/src/optimizer/compressed_materialization.cpp +478 -0
  365. package/src/duckdb/src/optimizer/deliminator.cpp +176 -321
  366. package/src/duckdb/src/optimizer/filter_pushdown.cpp +9 -0
  367. package/src/duckdb/src/optimizer/join_order/estimated_properties.cpp +7 -0
  368. package/src/duckdb/src/optimizer/join_order/join_node.cpp +2 -2
  369. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +113 -82
  370. package/src/duckdb/src/optimizer/join_order/join_relation_set.cpp +2 -6
  371. package/src/duckdb/src/optimizer/join_order/query_graph.cpp +22 -14
  372. package/src/duckdb/src/optimizer/optimizer.cpp +49 -14
  373. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +5 -5
  374. package/src/duckdb/src/optimizer/pushdown/pushdown_get.cpp +0 -1
  375. package/src/duckdb/src/optimizer/remove_duplicate_groups.cpp +127 -0
  376. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +4 -0
  377. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +154 -15
  378. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +65 -8
  379. package/src/duckdb/src/optimizer/statistics/operator/propagate_order.cpp +1 -1
  380. package/src/duckdb/src/optimizer/statistics_propagator.cpp +7 -5
  381. package/src/duckdb/src/optimizer/topn_optimizer.cpp +20 -10
  382. package/src/duckdb/src/parallel/executor.cpp +15 -0
  383. package/src/duckdb/src/parallel/task_scheduler.cpp +11 -2
  384. package/src/duckdb/src/parser/common_table_expression_info.cpp +2 -0
  385. package/src/duckdb/src/parser/expression/between_expression.cpp +3 -15
  386. package/src/duckdb/src/parser/expression/case_expression.cpp +0 -13
  387. package/src/duckdb/src/parser/expression/cast_expression.cpp +3 -14
  388. package/src/duckdb/src/parser/expression/collate_expression.cpp +3 -13
  389. package/src/duckdb/src/parser/expression/columnref_expression.cpp +3 -12
  390. package/src/duckdb/src/parser/expression/comparison_expression.cpp +3 -13
  391. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +0 -12
  392. package/src/duckdb/src/parser/expression/constant_expression.cpp +3 -11
  393. package/src/duckdb/src/parser/expression/default_expression.cpp +0 -4
  394. package/src/duckdb/src/parser/expression/function_expression.cpp +3 -32
  395. package/src/duckdb/src/parser/expression/lambda_expression.cpp +4 -14
  396. package/src/duckdb/src/parser/expression/operator_expression.cpp +0 -12
  397. package/src/duckdb/src/parser/expression/parameter_expression.cpp +0 -12
  398. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +4 -11
  399. package/src/duckdb/src/parser/expression/star_expression.cpp +0 -19
  400. package/src/duckdb/src/parser/expression/subquery_expression.cpp +0 -18
  401. package/src/duckdb/src/parser/expression/window_expression.cpp +3 -39
  402. package/src/duckdb/src/parser/parsed_expression.cpp +0 -70
  403. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +7 -0
  404. package/src/duckdb/src/parser/parser.cpp +8 -2
  405. package/src/duckdb/src/parser/query_node/cte_node.cpp +58 -0
  406. package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +0 -19
  407. package/src/duckdb/src/parser/query_node/select_node.cpp +0 -29
  408. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +0 -15
  409. package/src/duckdb/src/parser/query_node.cpp +15 -37
  410. package/src/duckdb/src/parser/result_modifier.cpp +0 -74
  411. package/src/duckdb/src/parser/tableref/basetableref.cpp +0 -19
  412. package/src/duckdb/src/parser/tableref/emptytableref.cpp +0 -4
  413. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +0 -15
  414. package/src/duckdb/src/parser/tableref/joinref.cpp +3 -23
  415. package/src/duckdb/src/parser/tableref/pivotref.cpp +0 -23
  416. package/src/duckdb/src/parser/tableref/subqueryref.cpp +3 -13
  417. package/src/duckdb/src/parser/tableref/table_function.cpp +0 -15
  418. package/src/duckdb/src/parser/tableref.cpp +0 -44
  419. package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +55 -3
  420. package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +2 -0
  421. package/src/duckdb/src/parser/transform/expression/transform_multi_assign_reference.cpp +44 -0
  422. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +19 -1
  423. package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +13 -0
  424. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +6 -1
  425. package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +6 -1
  426. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -2
  427. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +14 -11
  428. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +11 -2
  429. package/src/duckdb/src/parser/transform/statement/transform_update.cpp +6 -1
  430. package/src/duckdb/src/parser/transformer.cpp +15 -0
  431. package/src/duckdb/src/planner/binder/query_node/bind_cte_node.cpp +64 -0
  432. package/src/duckdb/src/planner/binder/query_node/plan_cte_node.cpp +26 -0
  433. package/src/duckdb/src/planner/binder/query_node/plan_recursive_cte_node.cpp +5 -5
  434. package/src/duckdb/src/planner/binder/query_node/plan_setop.cpp +4 -4
  435. package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +32 -29
  436. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +5 -4
  437. package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +11 -2
  438. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +32 -5
  439. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +116 -49
  440. package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -1
  441. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +64 -26
  442. package/src/duckdb/src/planner/binder/tableref/plan_subqueryref.cpp +3 -3
  443. package/src/duckdb/src/planner/binder.cpp +44 -31
  444. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +1 -1
  445. package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +4 -31
  446. package/src/duckdb/src/planner/expression_binder.cpp +3 -0
  447. package/src/duckdb/src/planner/expression_iterator.cpp +6 -0
  448. package/src/duckdb/src/planner/logical_operator.cpp +5 -0
  449. package/src/duckdb/src/planner/logical_operator_visitor.cpp +2 -0
  450. package/src/duckdb/src/planner/operator/logical_cteref.cpp +3 -1
  451. package/src/duckdb/src/planner/operator/logical_dependent_join.cpp +26 -0
  452. package/src/duckdb/src/planner/operator/logical_get.cpp +9 -4
  453. package/src/duckdb/src/planner/operator/logical_materialized_cte.cpp +21 -0
  454. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +90 -38
  455. package/src/duckdb/src/planner/subquery/has_correlated_expressions.cpp +22 -7
  456. package/src/duckdb/src/planner/subquery/rewrite_correlated_expressions.cpp +65 -7
  457. package/src/duckdb/src/storage/arena_allocator.cpp +1 -2
  458. package/src/duckdb/src/storage/buffer/block_manager.cpp +3 -0
  459. package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -0
  460. package/src/duckdb/src/storage/compression/rle.cpp +0 -1
  461. package/src/duckdb/src/storage/data_table.cpp +1 -1
  462. package/src/duckdb/src/storage/local_storage.cpp +3 -3
  463. package/src/duckdb/src/storage/serialization/serialize_parsed_expression.cpp +340 -0
  464. package/src/duckdb/src/storage/serialization/serialize_query_node.cpp +122 -0
  465. package/src/duckdb/src/storage/serialization/serialize_result_modifier.cpp +86 -0
  466. package/src/duckdb/src/storage/serialization/serialize_tableref.cpp +166 -0
  467. package/src/duckdb/src/storage/serialization/serialize_types.cpp +127 -0
  468. package/src/duckdb/src/storage/single_file_block_manager.cpp +23 -0
  469. package/src/duckdb/src/storage/statistics/string_stats.cpp +21 -2
  470. package/src/duckdb/src/storage/storage_info.cpp +1 -1
  471. package/src/duckdb/src/storage/table/chunk_info.cpp +17 -0
  472. package/src/duckdb/src/storage/table/row_group.cpp +25 -9
  473. package/src/duckdb/src/storage/table/row_group_collection.cpp +19 -18
  474. package/src/duckdb/third_party/concurrentqueue/concurrentqueue.h +2 -2
  475. package/src/duckdb/third_party/concurrentqueue/lightweightsemaphore.h +76 -0
  476. package/src/duckdb/third_party/fast_float/fast_float/fast_float.h +2 -0
  477. package/src/duckdb/third_party/httplib/httplib.hpp +10 -1
  478. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +9 -0
  479. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +2 -1
  480. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +12487 -12331
  481. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +6 -6
  482. package/src/duckdb/ub_src_common.cpp +2 -0
  483. package/src/duckdb/ub_src_execution_index_art.cpp +0 -2
  484. package/src/duckdb/ub_src_execution_operator_persistent.cpp +2 -0
  485. package/src/duckdb/ub_src_execution_operator_set.cpp +2 -0
  486. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  487. package/src/duckdb/ub_src_function_scalar.cpp +2 -0
  488. package/src/duckdb/ub_src_function_scalar_compressed_materialization.cpp +4 -0
  489. package/src/duckdb/ub_src_function_scalar_list.cpp +2 -0
  490. package/src/duckdb/ub_src_optimizer.cpp +6 -0
  491. package/src/duckdb/ub_src_optimizer_compressed_materialization.cpp +6 -0
  492. package/src/duckdb/ub_src_optimizer_statistics_expression.cpp +0 -2
  493. package/src/duckdb/ub_src_parser_query_node.cpp +2 -0
  494. package/src/duckdb/ub_src_parser_transform_expression.cpp +2 -0
  495. package/src/duckdb/ub_src_planner_binder_query_node.cpp +4 -0
  496. package/src/duckdb/ub_src_planner_operator.cpp +4 -0
  497. package/src/duckdb/ub_src_storage_serialization.cpp +10 -0
  498. package/src/statement.cpp +10 -3
  499. package/test/columns.test.ts +24 -1
  500. package/test/test_all_types.test.ts +234 -0
  501. package/tsconfig.json +1 -0
  502. package/src/duckdb/src/execution/index/art/prefix_segment.cpp +0 -42
  503. package/src/duckdb/src/include/duckdb/execution/index/art/prefix_segment.hpp +0 -40
  504. package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +0 -118
@@ -23,7 +23,7 @@ struct FlattenDependentJoins {
23
23
 
24
24
  //! Detects which Logical Operators have correlated expressions that they are dependent upon, filling the
25
25
  //! has_correlated_expressions map.
26
- bool DetectCorrelatedExpressions(LogicalOperator *op, bool lateral = false);
26
+ bool DetectCorrelatedExpressions(LogicalOperator *op, bool lateral = false, idx_t lateral_depth = 0);
27
27
 
28
28
  //! Push the dependent join down a LogicalOperator
29
29
  unique_ptr<LogicalOperator> PushDownDependentJoin(unique_ptr<LogicalOperator> plan);
@@ -43,7 +43,7 @@ struct FlattenDependentJoins {
43
43
 
44
44
  private:
45
45
  unique_ptr<LogicalOperator> PushDownDependentJoinInternal(unique_ptr<LogicalOperator> plan,
46
- bool &parent_propagate_null_values);
46
+ bool &parent_propagate_null_values, idx_t lateral_depth);
47
47
  };
48
48
 
49
49
  } // namespace duckdb
@@ -16,7 +16,8 @@ namespace duckdb {
16
16
  //! Helper class to recursively detect correlated expressions inside a single LogicalOperator
17
17
  class HasCorrelatedExpressions : public LogicalOperatorVisitor {
18
18
  public:
19
- explicit HasCorrelatedExpressions(const vector<CorrelatedColumnInfo> &correlated, bool lateral = false);
19
+ explicit HasCorrelatedExpressions(const vector<CorrelatedColumnInfo> &correlated, bool lateral = false,
20
+ idx_t lateral_depth = 0);
20
21
 
21
22
  void VisitOperator(LogicalOperator &op) override;
22
23
 
@@ -28,6 +29,8 @@ protected:
28
29
  unique_ptr<Expression> VisitReplace(BoundSubqueryExpression &expr, unique_ptr<Expression> *expr_ptr) override;
29
30
 
30
31
  const vector<CorrelatedColumnInfo> &correlated_columns;
32
+ // Tracks number of nested laterals
33
+ idx_t lateral_depth;
31
34
  };
32
35
 
33
36
  } // namespace duckdb
@@ -0,0 +1,31 @@
1
+ //===----------------------------------------------------------------------===//
2
+ // DuckDB
3
+ //
4
+ // duckdb/planner/subquery/recursive_dependent_join_planner.hpp
5
+ //
6
+ //
7
+ //===----------------------------------------------------------------------===//
8
+
9
+ #pragma once
10
+
11
+ #include "duckdb/planner/logical_operator_visitor.hpp"
12
+
13
+ namespace duckdb {
14
+
15
+ class Binder;
16
+
17
+ /*
18
+ * Recursively plan subqueries and flatten dependent joins from outermost to innermost (like peeling an onion).
19
+ */
20
+ class RecursiveDependentJoinPlanner : public LogicalOperatorVisitor {
21
+ public:
22
+ explicit RecursiveDependentJoinPlanner(Binder &binder) : binder(binder) {
23
+ }
24
+ void VisitOperator(LogicalOperator &op) override;
25
+ unique_ptr<Expression> VisitReplace(BoundSubqueryExpression &expr, unique_ptr<Expression> *expr_ptr) override;
26
+
27
+ private:
28
+ unique_ptr<LogicalOperator> root;
29
+ Binder &binder;
30
+ };
31
+ } // namespace duckdb
@@ -17,7 +17,8 @@ namespace duckdb {
17
17
  //! Helper class to rewrite correlated expressions within a single LogicalOperator
18
18
  class RewriteCorrelatedExpressions : public LogicalOperatorVisitor {
19
19
  public:
20
- RewriteCorrelatedExpressions(ColumnBinding base_binding, column_binding_map_t<idx_t> &correlated_map);
20
+ RewriteCorrelatedExpressions(ColumnBinding base_binding, column_binding_map_t<idx_t> &correlated_map,
21
+ idx_t lateral_depth, bool recursive_rewrite = false);
21
22
 
22
23
  void VisitOperator(LogicalOperator &op) override;
23
24
 
@@ -31,7 +32,7 @@ private:
31
32
  public:
32
33
  RewriteCorrelatedRecursive(BoundSubqueryExpression &parent, ColumnBinding base_binding,
33
34
  column_binding_map_t<idx_t> &correlated_map);
34
-
35
+ void RewriteJoinRefRecursive(BoundTableRef &ref);
35
36
  void RewriteCorrelatedSubquery(BoundSubqueryExpression &expr);
36
37
  void RewriteCorrelatedExpressions(Expression &child);
37
38
 
@@ -43,6 +44,11 @@ private:
43
44
  private:
44
45
  ColumnBinding base_binding;
45
46
  column_binding_map_t<idx_t> &correlated_map;
47
+ // To keep track of the number of dependent joins encountered
48
+ idx_t lateral_depth;
49
+ // This flag is used to determine if the rewrite should recursively update the bindings for all
50
+ // bound columns ref in the plan, and update the depths to match the new source
51
+ bool recursive_rewrite;
46
52
  };
47
53
 
48
54
  //! Helper class that rewrites COUNT aggregates into a CASE expression turning NULL into 0 after a LEFT OUTER JOIN
@@ -17,8 +17,9 @@ public:
17
17
  static constexpr const TableReferenceType TYPE = TableReferenceType::CTE;
18
18
 
19
19
  public:
20
- BoundCTERef(idx_t bind_index, idx_t cte_index)
21
- : BoundTableRef(TableReferenceType::CTE), bind_index(bind_index), cte_index(cte_index) {
20
+ BoundCTERef(idx_t bind_index, idx_t cte_index, CTEMaterialize materialized_cte)
21
+ : BoundTableRef(TableReferenceType::CTE), bind_index(bind_index), cte_index(cte_index),
22
+ materialized_cte(materialized_cte) {
22
23
  }
23
24
 
24
25
  //! The set of columns bound to this base table reference
@@ -29,5 +30,7 @@ public:
29
30
  idx_t bind_index;
30
31
  //! The index of the cte
31
32
  idx_t cte_index;
33
+ //! Is this a reference to a materialized CTE?
34
+ CTEMaterialize materialized_cte;
32
35
  };
33
36
  } // namespace duckdb
@@ -45,7 +45,7 @@ public:
45
45
  DUCKDB_API ArenaChunk *GetHead();
46
46
  DUCKDB_API ArenaChunk *GetTail();
47
47
 
48
- DUCKDB_API bool IsEmpty();
48
+ DUCKDB_API bool IsEmpty() const;
49
49
 
50
50
  //! Returns an "Allocator" wrapper for this arena allocator
51
51
  Allocator &GetAllocator() {
@@ -65,6 +65,9 @@ public:
65
65
  //! Returns the number of free blocks
66
66
  virtual idx_t FreeBlocks() = 0;
67
67
 
68
+ //! Truncate the underlying database file after a checkpoint
69
+ virtual void Truncate();
70
+
68
71
  //! Register a block with the given block id in the base file
69
72
  shared_ptr<BlockHandle> RegisterBlock(block_id_t block_id, bool is_meta_block = false);
70
73
  //! Clear cached handles for meta blocks
@@ -74,9 +77,6 @@ public:
74
77
 
75
78
  void UnregisterBlock(block_id_t block_id, bool can_destroy);
76
79
 
77
- static BlockManager &GetBlockManager(ClientContext &context);
78
- static BlockManager &GetBlockManager(DatabaseInstance &db);
79
-
80
80
  private:
81
81
  //! The lock for the set of blocks
82
82
  mutex blocks_lock;
@@ -51,7 +51,7 @@ public:
51
51
  const string &table, vector<ColumnDefinition> column_definitions_p,
52
52
  unique_ptr<PersistentTableData> data = nullptr);
53
53
  //! Constructs a DataTable as a delta on an existing data table with a newly added column
54
- DataTable(ClientContext &context, DataTable &parent, ColumnDefinition &new_column, Expression *default_value);
54
+ DataTable(ClientContext &context, DataTable &parent, ColumnDefinition &new_column, Expression &default_value);
55
55
  //! Constructs a DataTable as a delta on an existing data table but with one column removed
56
56
  DataTable(ClientContext &context, DataTable &parent, idx_t removed_column);
57
57
  //! Constructs a DataTable as a delta on an existing data table but with one column changed type
@@ -47,11 +47,33 @@ public:
47
47
  return std::static_pointer_cast<T, ObjectCacheEntry>(object);
48
48
  }
49
49
 
50
+ template <class T, class... Args>
51
+ shared_ptr<T> GetOrCreate(const string &key, Args &&...args) {
52
+ lock_guard<mutex> glock(lock);
53
+
54
+ auto entry = cache.find(key);
55
+ if (entry == cache.end()) {
56
+ auto value = make_shared<T>(args...);
57
+ cache[key] = value;
58
+ return value;
59
+ }
60
+ auto object = entry->second;
61
+ if (!object || object->GetObjectType() != T::ObjectType()) {
62
+ return nullptr;
63
+ }
64
+ return std::static_pointer_cast<T, ObjectCacheEntry>(object);
65
+ }
66
+
50
67
  void Put(string key, shared_ptr<ObjectCacheEntry> value) {
51
68
  lock_guard<mutex> glock(lock);
52
69
  cache[key] = std::move(value);
53
70
  }
54
71
 
72
+ void Delete(const string &key) {
73
+ lock_guard<mutex> glock(lock);
74
+ cache.erase(key);
75
+ }
76
+
55
77
  DUCKDB_API static ObjectCache &GetObjectCache(ClientContext &context);
56
78
  DUCKDB_API static bool ObjectCacheEnabled(ClientContext &context);
57
79
 
@@ -60,6 +60,8 @@ public:
60
60
  void Write(FileBuffer &block, block_id_t block_id) override;
61
61
  //! Write the header to disk, this is the final step of the checkpointing process
62
62
  void WriteHeader(DatabaseHeader header) override;
63
+ //! Truncate the underlying database file after a checkpoint
64
+ void Truncate() override;
63
65
 
64
66
  //! Returns the number of total blocks
65
67
  idx_t TotalBlocks() override;
@@ -48,6 +48,10 @@ struct StringStats {
48
48
  DUCKDB_API static uint32_t MaxStringLength(const BaseStatistics &stats);
49
49
  //! Whether or not the strings can contain unicode
50
50
  DUCKDB_API static bool CanContainUnicode(const BaseStatistics &stats);
51
+ //! Returns the min value (up to a length of StringStatsData::MAX_STRING_MINMAX_SIZE)
52
+ DUCKDB_API static string Min(const BaseStatistics &stats);
53
+ //! Returns the max value (up to a length of StringStatsData::MAX_STRING_MINMAX_SIZE)
54
+ DUCKDB_API static string Max(const BaseStatistics &stats);
51
55
 
52
56
  //! Resets the max string length so HasMaxStringLength() is false
53
57
  DUCKDB_API static void ResetMaxStringLength(BaseStatistics &stats);
@@ -41,6 +41,7 @@ public:
41
41
  //! Returns whether or not a single row in the ChunkInfo should be used or not for the given transaction
42
42
  virtual bool Fetch(TransactionData transaction, row_t row) = 0;
43
43
  virtual void CommitAppend(transaction_t commit_id, idx_t start, idx_t end) = 0;
44
+ virtual idx_t GetCommittedDeletedCount(idx_t max_count) = 0;
44
45
 
45
46
  virtual void Serialize(Serializer &serialize) = 0;
46
47
  static unique_ptr<ChunkInfo> Deserialize(Deserializer &source);
@@ -79,6 +80,7 @@ public:
79
80
  SelectionVector &sel_vector, idx_t max_count) override;
80
81
  bool Fetch(TransactionData transaction, row_t row) override;
81
82
  void CommitAppend(transaction_t commit_id, idx_t start, idx_t end) override;
83
+ idx_t GetCommittedDeletedCount(idx_t max_count) override;
82
84
 
83
85
  void Serialize(Serializer &serialize) override;
84
86
  static unique_ptr<ChunkInfo> Deserialize(Deserializer &source);
@@ -113,6 +115,7 @@ public:
113
115
  SelectionVector &sel_vector, idx_t max_count) override;
114
116
  bool Fetch(TransactionData transaction, row_t row) override;
115
117
  void CommitAppend(transaction_t commit_id, idx_t start, idx_t end) override;
118
+ idx_t GetCommittedDeletedCount(idx_t max_count) override;
116
119
 
117
120
  void Append(idx_t start, idx_t end, transaction_t commit_id);
118
121
 
@@ -74,7 +74,6 @@ public:
74
74
  RowGroupCollection &GetCollection() {
75
75
  return collection.get();
76
76
  }
77
- DatabaseInstance &GetDatabase();
78
77
  BlockManager &GetBlockManager();
79
78
  DataTableInfo &GetTableInfo();
80
79
 
@@ -82,7 +81,7 @@ public:
82
81
  ExpressionExecutor &executor, CollectionScanState &scan_state,
83
82
  DataChunk &scan_chunk);
84
83
  unique_ptr<RowGroup> AddColumn(RowGroupCollection &collection, ColumnDefinition &new_column,
85
- ExpressionExecutor &executor, Expression *default_value, Vector &intermediate);
84
+ ExpressionExecutor &executor, Expression &default_value, Vector &intermediate);
86
85
  unique_ptr<RowGroup> RemoveColumn(RowGroupCollection &collection, idx_t removed_column);
87
86
 
88
87
  void CommitDrop();
@@ -123,6 +122,7 @@ public:
123
122
  idx_t Delete(TransactionData transaction, DataTable &table, row_t *row_ids, idx_t count);
124
123
 
125
124
  RowGroupWriteData WriteToDisk(PartialBlockManager &manager, const vector<CompressionType> &compression_types);
125
+ bool AllDeleted();
126
126
  RowGroupPointer Checkpoint(RowGroupWriter &writer, TableStatistics &global_stats);
127
127
  static void Serialize(RowGroupPointer &pointer, Serializer &serializer);
128
128
  static RowGroupPointer Deserialize(Deserializer &source, const vector<LogicalType> &columns);
@@ -170,6 +170,7 @@ struct VersionNode {
170
170
  unique_ptr<ChunkInfo> info[RowGroup::ROW_GROUP_VECTOR_COUNT];
171
171
 
172
172
  void SetStart(idx_t start);
173
+ idx_t GetCommittedDeletedCount(idx_t count);
173
174
  };
174
175
 
175
176
  } // namespace duckdb
@@ -45,7 +45,6 @@ public:
45
45
  void AppendRowGroup(SegmentLock &l, idx_t start_row);
46
46
  //! Get the nth row-group, negative numbers start from the back (so -1 is the last row group, etc)
47
47
  RowGroup *GetRowGroup(int64_t index);
48
- idx_t RowGroupCount();
49
48
  void Verify();
50
49
 
51
50
  void InitializeScan(CollectionScanState &state, const vector<column_t> &column_ids, TableFilterSet *table_filters);
@@ -93,7 +92,7 @@ public:
93
92
  const vector<LogicalType> &GetTypes() const;
94
93
 
95
94
  shared_ptr<RowGroupCollection> AddColumn(ClientContext &context, ColumnDefinition &new_column,
96
- Expression *default_value);
95
+ Expression &default_value);
97
96
  shared_ptr<RowGroupCollection> RemoveColumn(idx_t col_idx);
98
97
  shared_ptr<RowGroupCollection> AlterType(ClientContext &context, idx_t changed_idx, const LogicalType &target_type,
99
98
  vector<column_t> bound_columns, Expression &cast_expr);
@@ -104,7 +103,6 @@ public:
104
103
  void SetDistinct(column_t column_id, unique_ptr<DistinctStatistics> distinct_stats);
105
104
 
106
105
  AttachedDatabase &GetAttached();
107
- DatabaseInstance &GetDatabase();
108
106
  BlockManager &GetBlockManager() {
109
107
  return block_manager;
110
108
  }
@@ -32,7 +32,7 @@ public:
32
32
  LocalTableStorage(DataTable &table, LocalTableStorage &parent, idx_t drop_idx);
33
33
  // Create a LocalTableStorage from an ADD COLUMN
34
34
  LocalTableStorage(ClientContext &context, DataTable &table, LocalTableStorage &parent, ColumnDefinition &new_column,
35
- optional_ptr<Expression> default_value);
35
+ Expression &default_value);
36
36
  ~LocalTableStorage();
37
37
 
38
38
  reference<DataTable> table_ref;
@@ -143,8 +143,7 @@ public:
143
143
 
144
144
  idx_t AddedRows(DataTable &table);
145
145
 
146
- void AddColumn(DataTable &old_dt, DataTable &new_dt, ColumnDefinition &new_column,
147
- optional_ptr<Expression> default_value);
146
+ void AddColumn(DataTable &old_dt, DataTable &new_dt, ColumnDefinition &new_column, Expression &default_value);
148
147
  void DropColumn(DataTable &old_dt, DataTable &new_dt, idx_t removed_column);
149
148
  void ChangeType(DataTable &old_dt, DataTable &new_dt, idx_t changed_idx, const LogicalType &target_type,
150
149
  const vector<column_t> &bound_columns, Expression &cast_expr);
@@ -279,6 +279,9 @@ typedef struct _duckdb_appender {
279
279
  typedef struct _duckdb_arrow {
280
280
  void *__arrw;
281
281
  } * duckdb_arrow;
282
+ typedef struct _duckdb_arrow_stream {
283
+ void *__arrwstr;
284
+ } * duckdb_arrow_stream;
282
285
  typedef struct _duckdb_config {
283
286
  void *__cnfg;
284
287
  } * duckdb_config;
@@ -1078,6 +1081,31 @@ Executes the prepared statement with the given bound parameters, and returns an
1078
1081
  DUCKDB_API duckdb_state duckdb_execute_prepared_arrow(duckdb_prepared_statement prepared_statement,
1079
1082
  duckdb_arrow *out_result);
1080
1083
 
1084
+ /*!
1085
+ Scans the Arrow stream and creates a view with the given name.
1086
+
1087
+ * connection: The connection on which to execute the scan.
1088
+ * table_name: Name of the temporary view to create.
1089
+ * arrow: Arrow stream wrapper.
1090
+ * returns: `DuckDBSuccess` on success or `DuckDBError` on failure.
1091
+ */
1092
+ DUCKDB_API duckdb_state duckdb_arrow_scan(duckdb_connection connection, const char *table_name,
1093
+ duckdb_arrow_stream arrow);
1094
+
1095
+ /*!
1096
+ Scans the Arrow array and creates a view with the given name.
1097
+
1098
+ * connection: The connection on which to execute the scan.
1099
+ * table_name: Name of the temporary view to create.
1100
+ * arrow_schema: Arrow schema wrapper.
1101
+ * arrow_array: Arrow array wrapper.
1102
+ * out_stream: Output array stream that wraps around the passed schema, for releasing/deleting once done.
1103
+ * returns: `DuckDBSuccess` on success or `DuckDBError` on failure.
1104
+ */
1105
+ DUCKDB_API duckdb_state duckdb_arrow_array_scan(duckdb_connection connection, const char *table_name,
1106
+ duckdb_arrow_schema arrow_schema, duckdb_arrow_array arrow_array,
1107
+ duckdb_arrow_stream *out_stream);
1108
+
1081
1109
  //===--------------------------------------------------------------------===//
1082
1110
  // Extract Statements
1083
1111
  //===--------------------------------------------------------------------===//
@@ -1,5 +1,6 @@
1
- #include "duckdb/main/capi/capi_internal.hpp"
2
1
  #include "duckdb/common/arrow/arrow_converter.hpp"
2
+ #include "duckdb/function/table/arrow.hpp"
3
+ #include "duckdb/main/capi/capi_internal.hpp"
3
4
 
4
5
  using duckdb::ArrowConverter;
5
6
  using duckdb::ArrowResultWrapper;
@@ -108,3 +109,156 @@ duckdb_state duckdb_execute_prepared_arrow(duckdb_prepared_statement prepared_st
108
109
  *out_result = reinterpret_cast<duckdb_arrow>(arrow_wrapper);
109
110
  return !arrow_wrapper->result->HasError() ? DuckDBSuccess : DuckDBError;
110
111
  }
112
+
113
+ namespace arrow_array_stream_wrapper {
114
+ namespace {
115
+ struct PrivateData {
116
+ ArrowSchema *schema;
117
+ ArrowArray *array;
118
+ bool done = false;
119
+ };
120
+
121
+ // LCOV_EXCL_START
122
+ // This function is never called, but used to set ArrowSchema's release functions to a non-null NOOP.
123
+ void EmptySchemaRelease(ArrowSchema *) {
124
+ }
125
+ // LCOV_EXCL_STOP
126
+
127
+ void EmptyArrayRelease(ArrowArray *) {
128
+ }
129
+
130
+ void EmptyStreamRelease(ArrowArrayStream *) {
131
+ }
132
+
133
+ void FactoryGetSchema(uintptr_t stream_factory_ptr, duckdb::ArrowSchemaWrapper &schema) {
134
+ auto private_data =
135
+ reinterpret_cast<PrivateData *>(reinterpret_cast<ArrowArrayStream *>(stream_factory_ptr)->private_data);
136
+ schema.arrow_schema = *private_data->schema;
137
+
138
+ // Need to nullify the root schema's release function here, because streams don't allow us to set the release
139
+ // function. For the schema's children, we nullify the release functions in `duckdb_arrow_scan`, so we don't need to
140
+ // handle them again here. We set this to nullptr and not EmptySchemaRelease to prevent ArrowSchemaWrapper's
141
+ // destructor from destroying the schema (it's the caller's responsibility).
142
+ schema.arrow_schema.release = nullptr;
143
+ }
144
+
145
+ int GetSchema(struct ArrowArrayStream *stream, struct ArrowSchema *out) {
146
+ auto private_data = static_cast<arrow_array_stream_wrapper::PrivateData *>((stream->private_data));
147
+ if (private_data->schema == nullptr) {
148
+ return DuckDBError;
149
+ }
150
+
151
+ *out = *private_data->schema;
152
+ out->release = EmptySchemaRelease;
153
+ return DuckDBSuccess;
154
+ }
155
+
156
+ int GetNext(struct ArrowArrayStream *stream, struct ArrowArray *out) {
157
+ auto private_data = static_cast<arrow_array_stream_wrapper::PrivateData *>((stream->private_data));
158
+ *out = *private_data->array;
159
+ if (private_data->done) {
160
+ out->release = nullptr;
161
+ } else {
162
+ out->release = EmptyArrayRelease;
163
+ }
164
+
165
+ private_data->done = true;
166
+ return DuckDBSuccess;
167
+ }
168
+
169
+ duckdb::unique_ptr<duckdb::ArrowArrayStreamWrapper> FactoryGetNext(uintptr_t stream_factory_ptr,
170
+ duckdb::ArrowStreamParameters &parameters) {
171
+ auto stream = reinterpret_cast<ArrowArrayStream *>(stream_factory_ptr);
172
+ auto ret = duckdb::make_uniq<duckdb::ArrowArrayStreamWrapper>();
173
+ ret->arrow_array_stream = *stream;
174
+ ret->arrow_array_stream.release = EmptyStreamRelease;
175
+ return ret;
176
+ }
177
+
178
+ // LCOV_EXCL_START
179
+ // This function is never be called, because it's used to construct a stream wrapping around a caller-supplied
180
+ // ArrowArray. Thus, the stream itself cannot produce an error.
181
+ const char *GetLastError(struct ArrowArrayStream *stream) {
182
+ return nullptr;
183
+ }
184
+ // LCOV_EXCL_STOP
185
+
186
+ void Release(struct ArrowArrayStream *stream) {
187
+ if (stream->private_data != nullptr) {
188
+ delete reinterpret_cast<PrivateData *>(stream->private_data);
189
+ }
190
+
191
+ stream->private_data = nullptr;
192
+ stream->release = nullptr;
193
+ }
194
+
195
+ duckdb_state Ingest(duckdb_connection connection, const char *table_name, struct ArrowArrayStream *input) {
196
+ try {
197
+ auto cconn = reinterpret_cast<duckdb::Connection *>(connection);
198
+ cconn
199
+ ->TableFunction("arrow_scan", {duckdb::Value::POINTER((uintptr_t)input),
200
+ duckdb::Value::POINTER((uintptr_t)FactoryGetNext),
201
+ duckdb::Value::POINTER((uintptr_t)FactoryGetSchema)})
202
+ ->CreateView(table_name, true, false);
203
+ } catch (...) { // LCOV_EXCL_START
204
+ // Tried covering this in tests, but it proved harder than expected. At the time of writing:
205
+ // - Passing any name to `CreateView` worked without throwing an exception
206
+ // - Passing a null Arrow array worked without throwing an exception
207
+ // - Passing an invalid schema (without any columns) led to an InternalException with SIGABRT, which is meant to
208
+ // be un-catchable. This case likely needs to be handled gracefully within `arrow_scan`.
209
+ // Ref: https://discord.com/channels/909674491309850675/921100573732909107/1115230468699336785
210
+ return DuckDBError;
211
+ } // LCOV_EXCL_STOP
212
+
213
+ return DuckDBSuccess;
214
+ }
215
+ } // namespace
216
+ } // namespace arrow_array_stream_wrapper
217
+
218
+ duckdb_state duckdb_arrow_scan(duckdb_connection connection, const char *table_name, duckdb_arrow_stream arrow) {
219
+ auto stream = reinterpret_cast<ArrowArrayStream *>(arrow);
220
+
221
+ // Backup release functions - we nullify children schema release functions because we don't want to release on
222
+ // behalf of the caller, downstream in our code. Note that Arrow releases target immediate children, but aren't
223
+ // recursive. So we only back up immediate children here and restore their functions.
224
+ ArrowSchema schema;
225
+ if (stream->get_schema(stream, &schema) == DuckDBError) {
226
+ return DuckDBError;
227
+ }
228
+
229
+ typedef void (*release_fn_t)(ArrowSchema *);
230
+ std::vector<release_fn_t> release_fns(schema.n_children);
231
+ for (int64_t i = 0; i < schema.n_children; i++) {
232
+ auto child = schema.children[i];
233
+ release_fns[i] = child->release;
234
+ child->release = arrow_array_stream_wrapper::EmptySchemaRelease;
235
+ }
236
+
237
+ auto ret = arrow_array_stream_wrapper::Ingest(connection, table_name, stream);
238
+
239
+ // Restore release functions.
240
+ for (int64_t i = 0; i < schema.n_children; i++) {
241
+ schema.children[i]->release = release_fns[i];
242
+ }
243
+
244
+ return ret;
245
+ }
246
+
247
+ duckdb_state duckdb_arrow_array_scan(duckdb_connection connection, const char *table_name,
248
+ duckdb_arrow_schema arrow_schema, duckdb_arrow_array arrow_array,
249
+ duckdb_arrow_stream *out_stream) {
250
+ auto private_data = new arrow_array_stream_wrapper::PrivateData;
251
+ private_data->schema = reinterpret_cast<ArrowSchema *>(arrow_schema);
252
+ private_data->array = reinterpret_cast<ArrowArray *>(arrow_array);
253
+ private_data->done = false;
254
+
255
+ ArrowArrayStream *stream = new ArrowArrayStream;
256
+ *out_stream = reinterpret_cast<duckdb_arrow_stream>(stream);
257
+ stream->get_schema = arrow_array_stream_wrapper::GetSchema;
258
+ stream->get_next = arrow_array_stream_wrapper::GetNext;
259
+ stream->get_last_error = arrow_array_stream_wrapper::GetLastError;
260
+ stream->release = arrow_array_stream_wrapper::Release;
261
+ stream->private_data = private_data;
262
+
263
+ return duckdb_arrow_scan(connection, table_name, reinterpret_cast<duckdb_arrow_stream>(stream));
264
+ }
@@ -26,7 +26,7 @@ char *duckdb_get_varchar(duckdb_value value) {
26
26
  auto str_val = val->DefaultCastAs(duckdb::LogicalType::VARCHAR);
27
27
  auto &str = duckdb::StringValue::Get(str_val);
28
28
 
29
- auto result = reinterpret_cast<char *>(malloc(sizeof(char *) * (str.size() + 1)));
29
+ auto result = reinterpret_cast<char *>(malloc(sizeof(char) * (str.size() + 1)));
30
30
  memcpy(result, str.c_str(), str.size());
31
31
  result[str.size()] = '\0';
32
32
  return result;
@@ -59,10 +59,12 @@ static ConfigurationOption internal_options[] = {DUCKDB_GLOBAL(AccessModeSetting
59
59
  DUCKDB_LOCAL(DebugForceExternal),
60
60
  DUCKDB_LOCAL(DebugForceNoCrossProduct),
61
61
  DUCKDB_LOCAL(DebugAsOfIEJoin),
62
+ DUCKDB_LOCAL(PreferRangeJoins),
62
63
  DUCKDB_GLOBAL(DebugWindowMode),
63
64
  DUCKDB_GLOBAL_LOCAL(DefaultCollationSetting),
64
65
  DUCKDB_GLOBAL(DefaultOrderSetting),
65
66
  DUCKDB_GLOBAL(DefaultNullOrderSetting),
67
+ DUCKDB_GLOBAL(DisabledFileSystemsSetting),
66
68
  DUCKDB_GLOBAL(DisabledOptimizersSetting),
67
69
  DUCKDB_GLOBAL(EnableExternalAccessSetting),
68
70
  DUCKDB_GLOBAL(EnableFSSTVectors),
@@ -92,6 +94,7 @@ static ConfigurationOption internal_options[] = {DUCKDB_GLOBAL(AccessModeSetting
92
94
  DUCKDB_LOCAL(OrderedAggregateThreshold),
93
95
  DUCKDB_GLOBAL(PasswordSetting),
94
96
  DUCKDB_LOCAL(PerfectHashThresholdSetting),
97
+ DUCKDB_LOCAL(PivotFilterThreshold),
95
98
  DUCKDB_LOCAL(PivotLimitSetting),
96
99
  DUCKDB_LOCAL(PreserveIdentifierCase),
97
100
  DUCKDB_GLOBAL(PreserveInsertionOrder),
@@ -109,6 +112,7 @@ static ConfigurationOption internal_options[] = {DUCKDB_GLOBAL(AccessModeSetting
109
112
  DUCKDB_GLOBAL_ALIAS("user", UsernameSetting),
110
113
  DUCKDB_GLOBAL_ALIAS("wal_autocheckpoint", CheckpointThresholdSetting),
111
114
  DUCKDB_GLOBAL_ALIAS("worker_threads", ThreadsSetting),
115
+ DUCKDB_GLOBAL(FlushAllocatorSetting),
112
116
  FINAL_SETTING};
113
117
 
114
118
  vector<ConfigurationOption> DBConfig::GetOptions() {
@@ -178,7 +178,7 @@ void DatabaseInstance::CreateMainDatabase() {
178
178
  void ThrowExtensionSetUnrecognizedOptions(const unordered_map<string, Value> &unrecognized_options) {
179
179
  auto unrecognized_options_iter = unrecognized_options.begin();
180
180
  string unrecognized_option_keys = unrecognized_options_iter->first;
181
- for (; unrecognized_options_iter == unrecognized_options.end(); ++unrecognized_options_iter) {
181
+ while (++unrecognized_options_iter != unrecognized_options.end()) {
182
182
  unrecognized_option_keys = "," + unrecognized_options_iter->first;
183
183
  }
184
184
  throw InvalidInputException("Unrecognized configuration property \"%s\"", unrecognized_option_keys);