duckdb 0.8.2-dev150.0 → 0.8.2-dev1559.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 (489) 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_structure.cpp +1 -1
  23. package/src/duckdb/extension/json/json_functions/json_transform.cpp +17 -37
  24. package/src/duckdb/extension/json/json_functions/json_type.cpp +1 -1
  25. package/src/duckdb/extension/json/json_functions.cpp +24 -24
  26. package/src/duckdb/extension/json/json_scan.cpp +3 -6
  27. package/src/duckdb/extension/parquet/column_reader.cpp +19 -21
  28. package/src/duckdb/extension/parquet/column_writer.cpp +77 -61
  29. package/src/duckdb/extension/parquet/include/cast_column_reader.hpp +2 -2
  30. package/src/duckdb/extension/parquet/include/column_reader.hpp +14 -16
  31. package/src/duckdb/extension/parquet/include/column_writer.hpp +9 -7
  32. package/src/duckdb/extension/parquet/include/list_column_reader.hpp +2 -2
  33. package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +3 -3
  34. package/src/duckdb/extension/parquet/include/parquet_decimal_utils.hpp +3 -3
  35. package/src/duckdb/extension/parquet/include/parquet_file_metadata_cache.hpp +2 -2
  36. package/src/duckdb/extension/parquet/include/parquet_statistics.hpp +2 -2
  37. package/src/duckdb/extension/parquet/include/parquet_support.hpp +9 -11
  38. package/src/duckdb/extension/parquet/include/parquet_writer.hpp +24 -5
  39. package/src/duckdb/extension/parquet/include/string_column_reader.hpp +1 -1
  40. package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +2 -3
  41. package/src/duckdb/extension/parquet/include/zstd_file_system.hpp +2 -2
  42. package/src/duckdb/extension/parquet/parquet_extension.cpp +192 -20
  43. package/src/duckdb/extension/parquet/parquet_reader.cpp +6 -6
  44. package/src/duckdb/extension/parquet/parquet_statistics.cpp +7 -6
  45. package/src/duckdb/extension/parquet/parquet_writer.cpp +79 -16
  46. package/src/duckdb/extension/parquet/zstd_file_system.cpp +2 -2
  47. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +1 -1
  48. package/src/duckdb/src/catalog/catalog_search_path.cpp +5 -4
  49. package/src/duckdb/src/catalog/default/default_functions.cpp +16 -0
  50. package/src/duckdb/src/common/adbc/adbc.cpp +75 -10
  51. package/src/duckdb/src/common/adbc/driver_manager.cpp +6 -11
  52. package/src/duckdb/src/common/allocator.cpp +14 -2
  53. package/src/duckdb/src/common/arrow/arrow_appender.cpp +5 -11
  54. package/src/duckdb/src/common/assert.cpp +3 -0
  55. package/src/duckdb/src/common/enum_util.cpp +4619 -4446
  56. package/src/duckdb/src/common/enums/logical_operator_type.cpp +4 -0
  57. package/src/duckdb/src/common/enums/optimizer_type.cpp +2 -0
  58. package/src/duckdb/src/common/enums/physical_operator_type.cpp +4 -0
  59. package/src/duckdb/src/common/exception.cpp +2 -2
  60. package/src/duckdb/src/common/extra_type_info.cpp +506 -0
  61. package/src/duckdb/src/common/file_system.cpp +19 -0
  62. package/src/duckdb/src/common/hive_partitioning.cpp +10 -6
  63. package/src/duckdb/src/common/local_file_system.cpp +14 -14
  64. package/src/duckdb/src/common/multi_file_reader.cpp +184 -20
  65. package/src/duckdb/src/common/operator/cast_operators.cpp +35 -1
  66. package/src/duckdb/src/common/radix_partitioning.cpp +26 -8
  67. package/src/duckdb/src/common/re2_regex.cpp +1 -1
  68. package/src/duckdb/src/common/row_operations/row_external.cpp +1 -1
  69. package/src/duckdb/src/common/sort/merge_sorter.cpp +9 -16
  70. package/src/duckdb/src/common/sort/partition_state.cpp +44 -11
  71. package/src/duckdb/src/common/types/batched_data_collection.cpp +7 -2
  72. package/src/duckdb/src/common/types/bit.cpp +51 -0
  73. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +9 -6
  74. package/src/duckdb/src/common/types/column/column_data_collection.cpp +17 -2
  75. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +15 -6
  76. package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
  77. package/src/duckdb/src/common/types/data_chunk.cpp +2 -2
  78. package/src/duckdb/src/common/types/date.cpp +9 -0
  79. package/src/duckdb/src/common/types/list_segment.cpp +24 -74
  80. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +3 -9
  81. package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +2 -0
  82. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +2 -2
  83. package/src/duckdb/src/common/types/uuid.cpp +2 -2
  84. package/src/duckdb/src/common/types/validity_mask.cpp +33 -0
  85. package/src/duckdb/src/common/types.cpp +8 -655
  86. package/src/duckdb/src/common/virtual_file_system.cpp +138 -1
  87. package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +2 -0
  88. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +2 -2
  89. package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +4 -4
  90. package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +4 -4
  91. package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +5 -4
  92. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +8 -8
  93. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +4 -3
  94. package/src/duckdb/src/core_functions/function_list.cpp +4 -2
  95. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +208 -42
  96. package/src/duckdb/src/core_functions/scalar/date/epoch.cpp +10 -24
  97. package/src/duckdb/src/core_functions/scalar/date/make_date.cpp +19 -4
  98. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +4 -2
  99. package/src/duckdb/src/execution/aggregate_hashtable.cpp +34 -18
  100. package/src/duckdb/src/execution/expression_executor.cpp +1 -1
  101. package/src/duckdb/src/execution/index/art/art.cpp +149 -139
  102. package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +1 -1
  103. package/src/duckdb/src/execution/index/art/iterator.cpp +129 -207
  104. package/src/duckdb/src/execution/index/art/leaf.cpp +8 -37
  105. package/src/duckdb/src/execution/index/art/node.cpp +113 -120
  106. package/src/duckdb/src/execution/index/art/node16.cpp +1 -10
  107. package/src/duckdb/src/execution/index/art/node256.cpp +1 -9
  108. package/src/duckdb/src/execution/index/art/node4.cpp +12 -13
  109. package/src/duckdb/src/execution/index/art/node48.cpp +1 -11
  110. package/src/duckdb/src/execution/index/art/prefix.cpp +228 -350
  111. package/src/duckdb/src/execution/join_hashtable.cpp +4 -4
  112. package/src/duckdb/src/execution/operator/aggregate/aggregate_object.cpp +1 -0
  113. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +8 -3
  114. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +32 -22
  115. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +512 -300
  116. package/src/duckdb/src/execution/operator/helper/physical_batch_collector.cpp +4 -3
  117. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +5 -5
  118. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +414 -283
  119. package/src/duckdb/src/execution/operator/join/physical_comparison_join.cpp +1 -1
  120. package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +21 -10
  121. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +28 -12
  122. package/src/duckdb/src/execution/operator/join/physical_join.cpp +1 -1
  123. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +23 -4
  124. package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +41 -5
  125. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +100 -13
  126. package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +1 -1
  127. package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +20 -0
  128. package/src/duckdb/src/execution/operator/persistent/csv_rejects_table.cpp +48 -0
  129. package/src/duckdb/src/execution/operator/persistent/parallel_csv_reader.cpp +2 -3
  130. package/src/duckdb/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +6 -4
  131. package/src/duckdb/src/execution/operator/persistent/physical_fixed_batch_copy.cpp +3 -3
  132. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
  133. package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -1
  134. package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +19 -0
  135. package/src/duckdb/src/execution/operator/scan/physical_table_scan.cpp +7 -2
  136. package/src/duckdb/src/execution/operator/set/physical_cte.cpp +160 -0
  137. package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +15 -5
  138. package/src/duckdb/src/execution/partitionable_hashtable.cpp +41 -6
  139. package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +30 -5
  140. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +43 -10
  141. package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +13 -22
  142. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +17 -13
  143. package/src/duckdb/src/execution/physical_plan/plan_cte.cpp +33 -0
  144. package/src/duckdb/src/execution/physical_plan/plan_get.cpp +2 -2
  145. package/src/duckdb/src/execution/physical_plan/plan_recursive_cte.cpp +25 -4
  146. package/src/duckdb/src/execution/physical_plan_generator.cpp +4 -0
  147. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +290 -43
  148. package/src/duckdb/src/execution/window_segment_tree.cpp +286 -129
  149. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +2 -1
  150. package/src/duckdb/src/function/cast/bit_cast.cpp +34 -2
  151. package/src/duckdb/src/function/cast/blob_cast.cpp +3 -0
  152. package/src/duckdb/src/function/cast/numeric_casts.cpp +2 -0
  153. package/src/duckdb/src/function/function.cpp +3 -1
  154. package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +212 -0
  155. package/src/duckdb/src/function/scalar/compressed_materialization/compress_string.cpp +249 -0
  156. package/src/duckdb/src/function/scalar/compressed_materialization_functions.cpp +29 -0
  157. package/src/duckdb/src/function/scalar/list/list_resize.cpp +162 -0
  158. package/src/duckdb/src/function/scalar/nested_functions.cpp +1 -0
  159. package/src/duckdb/src/function/scalar/string/like.cpp +12 -4
  160. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +12 -5
  161. package/src/duckdb/src/function/table/copy_csv.cpp +8 -1
  162. package/src/duckdb/src/function/table/read_csv.cpp +100 -17
  163. package/src/duckdb/src/function/table/table_scan.cpp +9 -0
  164. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  165. package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +1 -0
  166. package/src/duckdb/src/include/duckdb/common/allocator.hpp +2 -0
  167. package/src/duckdb/src/include/duckdb/common/bswap.hpp +42 -0
  168. package/src/duckdb/src/include/duckdb/common/dl.hpp +3 -1
  169. package/src/duckdb/src/include/duckdb/common/enum_util.hpp +616 -584
  170. package/src/duckdb/src/include/duckdb/common/enums/cte_materialize.hpp +21 -0
  171. package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +2 -1
  172. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +2 -0
  173. package/src/duckdb/src/include/duckdb/common/enums/optimizer_type.hpp +2 -0
  174. package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +2 -0
  175. package/src/duckdb/src/include/duckdb/common/extra_operator_info.hpp +27 -0
  176. package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +219 -0
  177. package/src/duckdb/src/include/duckdb/common/file_system.hpp +2 -0
  178. package/src/duckdb/src/include/duckdb/common/hive_partitioning.hpp +1 -1
  179. package/src/duckdb/src/include/duckdb/common/multi_file_reader.hpp +6 -4
  180. package/src/duckdb/src/include/duckdb/common/multi_file_reader_options.hpp +10 -42
  181. package/src/duckdb/src/include/duckdb/common/mutex.hpp +3 -0
  182. package/src/duckdb/src/include/duckdb/common/operator/cast_operators.hpp +43 -3
  183. package/src/duckdb/src/include/duckdb/common/operator/numeric_cast.hpp +10 -0
  184. package/src/duckdb/src/include/duckdb/common/radix.hpp +9 -20
  185. package/src/duckdb/src/include/duckdb/common/radix_partitioning.hpp +6 -21
  186. package/src/duckdb/src/include/duckdb/common/row_operations/row_operations.hpp +3 -3
  187. package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +13 -0
  188. package/src/duckdb/src/include/duckdb/common/types/batched_data_collection.hpp +3 -1
  189. package/src/duckdb/src/include/duckdb/common/types/bit.hpp +81 -0
  190. package/src/duckdb/src/include/duckdb/common/types/column/column_data_allocator.hpp +1 -1
  191. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection.hpp +6 -1
  192. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection_segment.hpp +1 -1
  193. package/src/duckdb/src/include/duckdb/common/types/column/column_data_scan_states.hpp +3 -1
  194. package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +1 -1
  195. package/src/duckdb/src/include/duckdb/common/types/date.hpp +7 -5
  196. package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +6 -8
  197. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +0 -1
  198. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_collection.hpp +1 -0
  199. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_states.hpp +3 -0
  200. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +9 -0
  201. package/src/duckdb/src/include/duckdb/common/types.hpp +1 -15
  202. package/src/duckdb/src/include/duckdb/common/virtual_file_system.hpp +38 -97
  203. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +4 -4
  204. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +3 -1
  205. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic_functions.hpp +3 -1
  206. package/src/duckdb/src/include/duckdb/core_functions/aggregate/distributive_functions.hpp +3 -1
  207. package/src/duckdb/src/include/duckdb/core_functions/aggregate/holistic_functions.hpp +3 -1
  208. package/src/duckdb/src/include/duckdb/core_functions/aggregate/nested_functions.hpp +3 -1
  209. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +1 -0
  210. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +3 -3
  211. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression_functions.hpp +3 -1
  212. package/src/duckdb/src/include/duckdb/core_functions/scalar/bit_functions.hpp +3 -1
  213. package/src/duckdb/src/include/duckdb/core_functions/scalar/blob_functions.hpp +3 -1
  214. package/src/duckdb/src/include/duckdb/core_functions/scalar/date_functions.hpp +31 -11
  215. package/src/duckdb/src/include/duckdb/core_functions/scalar/enum_functions.hpp +3 -1
  216. package/src/duckdb/src/include/duckdb/core_functions/scalar/generic_functions.hpp +3 -1
  217. package/src/duckdb/src/include/duckdb/core_functions/scalar/list_functions.hpp +3 -1
  218. package/src/duckdb/src/include/duckdb/core_functions/scalar/map_functions.hpp +3 -1
  219. package/src/duckdb/src/include/duckdb/core_functions/scalar/math_functions.hpp +3 -1
  220. package/src/duckdb/src/include/duckdb/core_functions/scalar/operators_functions.hpp +3 -1
  221. package/src/duckdb/src/include/duckdb/core_functions/scalar/random_functions.hpp +3 -1
  222. package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +3 -1
  223. package/src/duckdb/src/include/duckdb/core_functions/scalar/struct_functions.hpp +3 -1
  224. package/src/duckdb/src/include/duckdb/core_functions/scalar/union_functions.hpp +3 -1
  225. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +21 -3
  226. package/src/duckdb/src/include/duckdb/execution/executor.hpp +3 -0
  227. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +4 -5
  228. package/src/duckdb/src/include/duckdb/execution/index/art/iterator.hpp +31 -27
  229. package/src/duckdb/src/include/duckdb/execution/index/art/leaf.hpp +6 -14
  230. package/src/duckdb/src/include/duckdb/execution/index/art/node.hpp +4 -10
  231. package/src/duckdb/src/include/duckdb/execution/index/art/node16.hpp +3 -6
  232. package/src/duckdb/src/include/duckdb/execution/index/art/node256.hpp +3 -6
  233. package/src/duckdb/src/include/duckdb/execution/index/art/node4.hpp +5 -8
  234. package/src/duckdb/src/include/duckdb/execution/index/art/node48.hpp +3 -6
  235. package/src/duckdb/src/include/duckdb/execution/index/art/prefix.hpp +63 -52
  236. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_asof_join.hpp +2 -10
  237. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_iejoin.hpp +1 -1
  238. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_piecewise_merge_join.hpp +1 -1
  239. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_range_join.hpp +12 -1
  240. package/src/duckdb/src/include/duckdb/execution/operator/persistent/base_csv_reader.hpp +2 -2
  241. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_line_info.hpp +4 -3
  242. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +8 -1
  243. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_rejects_table.hpp +36 -0
  244. package/src/duckdb/src/include/duckdb/execution/operator/persistent/parallel_csv_reader.hpp +1 -1
  245. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_column_data_scan.hpp +10 -0
  246. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_table_scan.hpp +5 -1
  247. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_cte.hpp +62 -0
  248. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_recursive_cte.hpp +8 -2
  249. package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +5 -1
  250. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +3 -0
  251. package/src/duckdb/src/include/duckdb/execution/radix_partitioned_hashtable.hpp +10 -3
  252. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +51 -40
  253. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +1 -1
  254. package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +2 -2
  255. package/src/duckdb/src/include/duckdb/function/built_in_functions.hpp +1 -0
  256. package/src/duckdb/src/include/duckdb/function/scalar/compressed_materialization_functions.hpp +49 -0
  257. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +1 -1
  258. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +5 -0
  259. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +2 -0
  260. package/src/duckdb/src/include/duckdb/main/client_config.hpp +5 -0
  261. package/src/duckdb/src/include/duckdb/main/config.hpp +2 -0
  262. package/src/duckdb/src/include/duckdb/main/connection.hpp +1 -2
  263. package/src/duckdb/src/include/duckdb/main/relation/cross_product_relation.hpp +4 -1
  264. package/src/duckdb/src/include/duckdb/main/relation/join_relation.hpp +5 -2
  265. package/src/duckdb/src/include/duckdb/main/relation.hpp +4 -2
  266. package/src/duckdb/src/include/duckdb/main/settings.hpp +39 -1
  267. package/src/duckdb/src/include/duckdb/optimizer/column_binding_replacer.hpp +47 -0
  268. package/src/duckdb/src/include/duckdb/optimizer/compressed_materialization.hpp +132 -0
  269. package/src/duckdb/src/include/duckdb/optimizer/deliminator.hpp +13 -16
  270. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +3 -0
  271. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +1 -1
  272. package/src/duckdb/src/include/duckdb/optimizer/join_order/estimated_properties.hpp +10 -1
  273. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_order_optimizer.hpp +1 -1
  274. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_relation.hpp +1 -1
  275. package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph.hpp +3 -0
  276. package/src/duckdb/src/include/duckdb/optimizer/matcher/set_matcher.hpp +13 -0
  277. package/src/duckdb/src/include/duckdb/optimizer/optimizer.hpp +3 -0
  278. package/src/duckdb/src/include/duckdb/optimizer/remove_duplicate_groups.hpp +40 -0
  279. package/src/duckdb/src/include/duckdb/optimizer/statistics_propagator.hpp +11 -3
  280. package/src/duckdb/src/include/duckdb/optimizer/topn_optimizer.hpp +2 -0
  281. package/src/duckdb/src/include/duckdb/parallel/pipeline.hpp +2 -0
  282. package/src/duckdb/src/include/duckdb/parallel/task_scheduler.hpp +5 -0
  283. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +2 -0
  284. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
  285. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +3 -0
  286. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +3 -0
  287. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +3 -0
  288. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +3 -0
  289. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
  290. package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
  291. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +3 -0
  292. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +3 -0
  293. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +3 -0
  294. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +3 -0
  295. package/src/duckdb/src/include/duckdb/parser/query_node/cte_node.hpp +54 -0
  296. package/src/duckdb/src/include/duckdb/parser/query_node/list.hpp +1 -0
  297. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -1
  298. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +1 -0
  299. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +1 -1
  300. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
  301. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +1 -0
  302. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +15 -8
  303. package/src/duckdb/src/include/duckdb/planner/binder.hpp +12 -5
  304. package/src/duckdb/src/include/duckdb/planner/bound_tokens.hpp +1 -0
  305. package/src/duckdb/src/include/duckdb/planner/column_binding.hpp +4 -0
  306. package/src/duckdb/src/include/duckdb/planner/constraints/bound_unique_constraint.hpp +3 -3
  307. package/src/duckdb/src/include/duckdb/planner/expression_binder/lateral_binder.hpp +0 -2
  308. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
  309. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +2 -1
  310. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -5
  311. package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +7 -2
  312. package/src/duckdb/src/include/duckdb/planner/operator/logical_dependent_join.hpp +43 -0
  313. package/src/duckdb/src/include/duckdb/planner/operator/logical_get.hpp +4 -0
  314. package/src/duckdb/src/include/duckdb/planner/operator/logical_materialized_cte.hpp +49 -0
  315. package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +5 -4
  316. package/src/duckdb/src/include/duckdb/planner/query_node/bound_cte_node.hpp +44 -0
  317. package/src/duckdb/src/include/duckdb/planner/query_node/list.hpp +1 -0
  318. package/src/duckdb/src/include/duckdb/planner/subquery/flatten_dependent_join.hpp +2 -2
  319. package/src/duckdb/src/include/duckdb/planner/subquery/has_correlated_expressions.hpp +4 -1
  320. package/src/duckdb/src/include/duckdb/planner/subquery/recursive_dependent_join_planner.hpp +31 -0
  321. package/src/duckdb/src/include/duckdb/planner/subquery/rewrite_correlated_expressions.hpp +8 -2
  322. package/src/duckdb/src/include/duckdb/planner/tableref/bound_cteref.hpp +5 -2
  323. package/src/duckdb/src/include/duckdb/storage/arena_allocator.hpp +1 -1
  324. package/src/duckdb/src/include/duckdb/storage/block_manager.hpp +3 -3
  325. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +1 -1
  326. package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +22 -0
  327. package/src/duckdb/src/include/duckdb/storage/single_file_block_manager.hpp +2 -0
  328. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +4 -0
  329. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +3 -0
  330. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +3 -2
  331. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +1 -3
  332. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -3
  333. package/src/duckdb/src/include/duckdb.h +28 -0
  334. package/src/duckdb/src/main/capi/arrow-c.cpp +155 -1
  335. package/src/duckdb/src/main/capi/duckdb_value-c.cpp +1 -1
  336. package/src/duckdb/src/main/config.cpp +4 -0
  337. package/src/duckdb/src/main/database.cpp +1 -1
  338. package/src/duckdb/src/main/extension/extension_helper.cpp +96 -89
  339. package/src/duckdb/src/main/extension/extension_install.cpp +6 -0
  340. package/src/duckdb/src/main/extension/extension_load.cpp +10 -1
  341. package/src/duckdb/src/main/relation/cross_product_relation.cpp +4 -3
  342. package/src/duckdb/src/main/relation/join_relation.cpp +5 -5
  343. package/src/duckdb/src/main/relation.cpp +6 -5
  344. package/src/duckdb/src/main/settings/settings.cpp +79 -18
  345. package/src/duckdb/src/optimizer/column_binding_replacer.cpp +43 -0
  346. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -2
  347. package/src/duckdb/src/optimizer/compressed_materialization/compress_aggregate.cpp +140 -0
  348. package/src/duckdb/src/optimizer/compressed_materialization/compress_distinct.cpp +42 -0
  349. package/src/duckdb/src/optimizer/compressed_materialization/compress_order.cpp +65 -0
  350. package/src/duckdb/src/optimizer/compressed_materialization.cpp +478 -0
  351. package/src/duckdb/src/optimizer/deliminator.cpp +176 -321
  352. package/src/duckdb/src/optimizer/filter_pushdown.cpp +9 -0
  353. package/src/duckdb/src/optimizer/join_order/estimated_properties.cpp +7 -0
  354. package/src/duckdb/src/optimizer/join_order/join_node.cpp +2 -2
  355. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +113 -82
  356. package/src/duckdb/src/optimizer/join_order/join_relation_set.cpp +2 -6
  357. package/src/duckdb/src/optimizer/join_order/query_graph.cpp +22 -14
  358. package/src/duckdb/src/optimizer/optimizer.cpp +51 -14
  359. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +5 -5
  360. package/src/duckdb/src/optimizer/pushdown/pushdown_get.cpp +0 -1
  361. package/src/duckdb/src/optimizer/remove_duplicate_groups.cpp +127 -0
  362. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +4 -0
  363. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +154 -15
  364. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +65 -8
  365. package/src/duckdb/src/optimizer/statistics/operator/propagate_order.cpp +1 -1
  366. package/src/duckdb/src/optimizer/statistics_propagator.cpp +7 -5
  367. package/src/duckdb/src/optimizer/topn_optimizer.cpp +20 -10
  368. package/src/duckdb/src/parallel/executor.cpp +15 -0
  369. package/src/duckdb/src/parallel/task_scheduler.cpp +11 -2
  370. package/src/duckdb/src/parser/common_table_expression_info.cpp +2 -0
  371. package/src/duckdb/src/parser/expression/between_expression.cpp +3 -15
  372. package/src/duckdb/src/parser/expression/case_expression.cpp +0 -13
  373. package/src/duckdb/src/parser/expression/cast_expression.cpp +3 -14
  374. package/src/duckdb/src/parser/expression/collate_expression.cpp +3 -13
  375. package/src/duckdb/src/parser/expression/columnref_expression.cpp +3 -12
  376. package/src/duckdb/src/parser/expression/comparison_expression.cpp +3 -13
  377. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +0 -12
  378. package/src/duckdb/src/parser/expression/constant_expression.cpp +3 -11
  379. package/src/duckdb/src/parser/expression/default_expression.cpp +0 -4
  380. package/src/duckdb/src/parser/expression/function_expression.cpp +3 -32
  381. package/src/duckdb/src/parser/expression/lambda_expression.cpp +4 -14
  382. package/src/duckdb/src/parser/expression/operator_expression.cpp +0 -12
  383. package/src/duckdb/src/parser/expression/parameter_expression.cpp +0 -12
  384. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +4 -11
  385. package/src/duckdb/src/parser/expression/star_expression.cpp +0 -19
  386. package/src/duckdb/src/parser/expression/subquery_expression.cpp +0 -18
  387. package/src/duckdb/src/parser/expression/window_expression.cpp +3 -39
  388. package/src/duckdb/src/parser/parsed_expression.cpp +0 -70
  389. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +7 -0
  390. package/src/duckdb/src/parser/parser.cpp +8 -2
  391. package/src/duckdb/src/parser/query_node/cte_node.cpp +58 -0
  392. package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +0 -19
  393. package/src/duckdb/src/parser/query_node/select_node.cpp +0 -29
  394. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +0 -15
  395. package/src/duckdb/src/parser/query_node.cpp +15 -37
  396. package/src/duckdb/src/parser/result_modifier.cpp +0 -74
  397. package/src/duckdb/src/parser/tableref/basetableref.cpp +0 -19
  398. package/src/duckdb/src/parser/tableref/emptytableref.cpp +0 -4
  399. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +0 -15
  400. package/src/duckdb/src/parser/tableref/joinref.cpp +3 -23
  401. package/src/duckdb/src/parser/tableref/pivotref.cpp +0 -23
  402. package/src/duckdb/src/parser/tableref/subqueryref.cpp +3 -13
  403. package/src/duckdb/src/parser/tableref/table_function.cpp +0 -15
  404. package/src/duckdb/src/parser/tableref.cpp +0 -44
  405. package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +55 -3
  406. package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +2 -0
  407. package/src/duckdb/src/parser/transform/expression/transform_multi_assign_reference.cpp +44 -0
  408. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +19 -1
  409. package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +13 -0
  410. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +6 -1
  411. package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +6 -1
  412. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -2
  413. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +14 -11
  414. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +11 -2
  415. package/src/duckdb/src/parser/transform/statement/transform_update.cpp +6 -1
  416. package/src/duckdb/src/parser/transformer.cpp +15 -0
  417. package/src/duckdb/src/planner/binder/query_node/bind_cte_node.cpp +64 -0
  418. package/src/duckdb/src/planner/binder/query_node/plan_cte_node.cpp +26 -0
  419. package/src/duckdb/src/planner/binder/query_node/plan_recursive_cte_node.cpp +5 -5
  420. package/src/duckdb/src/planner/binder/query_node/plan_setop.cpp +4 -4
  421. package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +32 -29
  422. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +5 -4
  423. package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +11 -2
  424. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +32 -5
  425. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +116 -49
  426. package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -1
  427. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +61 -26
  428. package/src/duckdb/src/planner/binder/tableref/plan_subqueryref.cpp +3 -3
  429. package/src/duckdb/src/planner/binder.cpp +44 -31
  430. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +1 -1
  431. package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +4 -31
  432. package/src/duckdb/src/planner/expression_binder.cpp +3 -0
  433. package/src/duckdb/src/planner/expression_iterator.cpp +6 -0
  434. package/src/duckdb/src/planner/logical_operator.cpp +5 -0
  435. package/src/duckdb/src/planner/logical_operator_visitor.cpp +2 -0
  436. package/src/duckdb/src/planner/operator/logical_cteref.cpp +3 -1
  437. package/src/duckdb/src/planner/operator/logical_dependent_join.cpp +26 -0
  438. package/src/duckdb/src/planner/operator/logical_get.cpp +9 -4
  439. package/src/duckdb/src/planner/operator/logical_materialized_cte.cpp +21 -0
  440. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +90 -38
  441. package/src/duckdb/src/planner/subquery/has_correlated_expressions.cpp +22 -7
  442. package/src/duckdb/src/planner/subquery/rewrite_correlated_expressions.cpp +65 -7
  443. package/src/duckdb/src/storage/arena_allocator.cpp +1 -2
  444. package/src/duckdb/src/storage/buffer/block_manager.cpp +3 -0
  445. package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -0
  446. package/src/duckdb/src/storage/compression/rle.cpp +0 -1
  447. package/src/duckdb/src/storage/data_table.cpp +1 -1
  448. package/src/duckdb/src/storage/local_storage.cpp +3 -3
  449. package/src/duckdb/src/storage/serialization/serialize_parsed_expression.cpp +340 -0
  450. package/src/duckdb/src/storage/serialization/serialize_query_node.cpp +122 -0
  451. package/src/duckdb/src/storage/serialization/serialize_result_modifier.cpp +86 -0
  452. package/src/duckdb/src/storage/serialization/serialize_tableref.cpp +166 -0
  453. package/src/duckdb/src/storage/serialization/serialize_types.cpp +127 -0
  454. package/src/duckdb/src/storage/single_file_block_manager.cpp +23 -0
  455. package/src/duckdb/src/storage/statistics/string_stats.cpp +21 -2
  456. package/src/duckdb/src/storage/storage_info.cpp +1 -1
  457. package/src/duckdb/src/storage/table/chunk_info.cpp +17 -0
  458. package/src/duckdb/src/storage/table/row_group.cpp +25 -9
  459. package/src/duckdb/src/storage/table/row_group_collection.cpp +19 -18
  460. package/src/duckdb/third_party/concurrentqueue/concurrentqueue.h +2 -2
  461. package/src/duckdb/third_party/concurrentqueue/lightweightsemaphore.h +76 -0
  462. package/src/duckdb/third_party/fast_float/fast_float/fast_float.h +2 -0
  463. package/src/duckdb/third_party/httplib/httplib.hpp +10 -1
  464. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +9 -0
  465. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +2 -1
  466. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +12487 -12331
  467. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +6 -6
  468. package/src/duckdb/ub_src_common.cpp +2 -0
  469. package/src/duckdb/ub_src_execution_index_art.cpp +0 -2
  470. package/src/duckdb/ub_src_execution_operator_persistent.cpp +2 -0
  471. package/src/duckdb/ub_src_execution_operator_set.cpp +2 -0
  472. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  473. package/src/duckdb/ub_src_function_scalar.cpp +2 -0
  474. package/src/duckdb/ub_src_function_scalar_compressed_materialization.cpp +4 -0
  475. package/src/duckdb/ub_src_function_scalar_list.cpp +2 -0
  476. package/src/duckdb/ub_src_optimizer.cpp +6 -0
  477. package/src/duckdb/ub_src_optimizer_compressed_materialization.cpp +6 -0
  478. package/src/duckdb/ub_src_optimizer_statistics_expression.cpp +0 -2
  479. package/src/duckdb/ub_src_parser_query_node.cpp +2 -0
  480. package/src/duckdb/ub_src_parser_transform_expression.cpp +2 -0
  481. package/src/duckdb/ub_src_planner_binder_query_node.cpp +4 -0
  482. package/src/duckdb/ub_src_planner_operator.cpp +4 -0
  483. package/src/duckdb/ub_src_storage_serialization.cpp +10 -0
  484. package/src/statement.cpp +10 -3
  485. package/test/test_all_types.test.ts +233 -0
  486. package/tsconfig.json +1 -0
  487. package/src/duckdb/src/execution/index/art/prefix_segment.cpp +0 -42
  488. package/src/duckdb/src/include/duckdb/execution/index/art/prefix_segment.hpp +0 -40
  489. package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +0 -118
@@ -5,7 +5,9 @@
5
5
  //
6
6
  //
7
7
  //===----------------------------------------------------------------------===//
8
- // This file is generated by scripts/generate_functions.py
8
+ // This file is automatically generated by scripts/generate_functions.py
9
+ // Do not edit this file manually, your changes will be overwritten
10
+ //===----------------------------------------------------------------------===//
9
11
 
10
12
  #pragma once
11
13
 
@@ -5,7 +5,9 @@
5
5
  //
6
6
  //
7
7
  //===----------------------------------------------------------------------===//
8
- // This file is generated by scripts/generate_functions.py
8
+ // This file is automatically generated by scripts/generate_functions.py
9
+ // Do not edit this file manually, your changes will be overwritten
10
+ //===----------------------------------------------------------------------===//
9
11
 
10
12
  #pragma once
11
13
 
@@ -5,7 +5,9 @@
5
5
  //
6
6
  //
7
7
  //===----------------------------------------------------------------------===//
8
- // This file is generated by scripts/generate_functions.py
8
+ // This file is automatically generated by scripts/generate_functions.py
9
+ // Do not edit this file manually, your changes will be overwritten
10
+ //===----------------------------------------------------------------------===//
9
11
 
10
12
  #pragma once
11
13
 
@@ -5,7 +5,9 @@
5
5
  //
6
6
  //
7
7
  //===----------------------------------------------------------------------===//
8
- // This file is generated by scripts/generate_functions.py
8
+ // This file is automatically generated by scripts/generate_functions.py
9
+ // Do not edit this file manually, your changes will be overwritten
10
+ //===----------------------------------------------------------------------===//
9
11
 
10
12
  #pragma once
11
13
 
@@ -5,6 +5,7 @@
5
5
  //
6
6
  //
7
7
  //===----------------------------------------------------------------------===//
8
+ // REGR_COUNT(y, x)
8
9
 
9
10
  #pragma once
10
11
 
@@ -25,9 +25,9 @@ struct RegrSlopeOperation {
25
25
  }
26
26
 
27
27
  template <class A_TYPE, class B_TYPE, class STATE, class OP>
28
- static void Operation(STATE &state, const A_TYPE &x, const B_TYPE &y, AggregateBinaryInput &idata) {
29
- CovarOperation::Operation<A_TYPE, B_TYPE, CovarState, OP>(state.cov_pop, x, y, idata);
30
- STDDevBaseOperation::Execute<A_TYPE, StddevState>(state.var_pop, y);
28
+ static void Operation(STATE &state, const A_TYPE &y, const B_TYPE &x, AggregateBinaryInput &idata) {
29
+ CovarOperation::Operation<A_TYPE, B_TYPE, CovarState, OP>(state.cov_pop, y, x,idata);
30
+ STDDevBaseOperation::Execute<A_TYPE, StddevState>(state.var_pop, x);
31
31
  }
32
32
 
33
33
  template <class STATE, class OP>
@@ -5,7 +5,9 @@
5
5
  //
6
6
  //
7
7
  //===----------------------------------------------------------------------===//
8
- // This file is generated by scripts/generate_functions.py
8
+ // This file is automatically generated by scripts/generate_functions.py
9
+ // Do not edit this file manually, your changes will be overwritten
10
+ //===----------------------------------------------------------------------===//
9
11
 
10
12
  #pragma once
11
13
 
@@ -5,7 +5,9 @@
5
5
  //
6
6
  //
7
7
  //===----------------------------------------------------------------------===//
8
- // This file is generated by scripts/generate_functions.py
8
+ // This file is automatically generated by scripts/generate_functions.py
9
+ // Do not edit this file manually, your changes will be overwritten
10
+ //===----------------------------------------------------------------------===//
9
11
 
10
12
  #pragma once
11
13
 
@@ -5,7 +5,9 @@
5
5
  //
6
6
  //
7
7
  //===----------------------------------------------------------------------===//
8
- // This file is generated by scripts/generate_functions.py
8
+ // This file is automatically generated by scripts/generate_functions.py
9
+ // Do not edit this file manually, your changes will be overwritten
10
+ //===----------------------------------------------------------------------===//
9
11
 
10
12
  #pragma once
11
13
 
@@ -5,7 +5,9 @@
5
5
  //
6
6
  //
7
7
  //===----------------------------------------------------------------------===//
8
- // This file is generated by scripts/generate_functions.py
8
+ // This file is automatically generated by scripts/generate_functions.py
9
+ // Do not edit this file manually, your changes will be overwritten
10
+ //===----------------------------------------------------------------------===//
9
11
 
10
12
  #pragma once
11
13
 
@@ -162,8 +164,8 @@ struct DecadeFun {
162
164
 
163
165
  struct EpochFun {
164
166
  static constexpr const char *Name = "epoch";
165
- static constexpr const char *Parameters = "ts";
166
- static constexpr const char *Description = "Extract the epoch component from a date or timestamp";
167
+ static constexpr const char *Parameters = "temporal";
168
+ static constexpr const char *Description = "Extract the epoch component from a temporal type";
167
169
  static constexpr const char *Example = "epoch(timestamp '2021-08-03 11:59:44.123456')";
168
170
 
169
171
  static ScalarFunctionSet GetFunctions();
@@ -171,11 +173,29 @@ struct EpochFun {
171
173
 
172
174
  struct EpochMsFun {
173
175
  static constexpr const char *Name = "epoch_ms";
174
- static constexpr const char *Parameters = "ms";
175
- static constexpr const char *Description = "Converts ms since epoch to a timestamp";
176
- static constexpr const char *Example = "epoch_ms(701222400000)";
176
+ static constexpr const char *Parameters = "temporal";
177
+ static constexpr const char *Description = "Extract the epoch component in milliseconds from a temporal type";
178
+ static constexpr const char *Example = "epoch_ms(timestamp '2021-08-03 11:59:44.123456')";
177
179
 
178
- static ScalarFunction GetFunction();
180
+ static ScalarFunctionSet GetFunctions();
181
+ };
182
+
183
+ struct EpochUsFun {
184
+ static constexpr const char *Name = "epoch_us";
185
+ static constexpr const char *Parameters = "temporal";
186
+ static constexpr const char *Description = "Extract the epoch component in microseconds from a temporal type";
187
+ static constexpr const char *Example = "epoch_us(timestamp '2021-08-03 11:59:44.123456')";
188
+
189
+ static ScalarFunctionSet GetFunctions();
190
+ };
191
+
192
+ struct EpochNsFun {
193
+ static constexpr const char *Name = "epoch_ns";
194
+ static constexpr const char *Parameters = "temporal";
195
+ static constexpr const char *Description = "Extract the epoch component in nanoseconds from a temporal type";
196
+ static constexpr const char *Example = "epoch_ns(timestamp '2021-08-03 11:59:44.123456')";
197
+
198
+ static ScalarFunctionSet GetFunctions();
179
199
  };
180
200
 
181
201
  struct EraFun {
@@ -277,7 +297,7 @@ struct MakeTimestampFun {
277
297
  static constexpr const char *Description = "The timestamp for the given parts";
278
298
  static constexpr const char *Example = "make_timestamp(1992, 9, 20, 13, 34, 27.123456)";
279
299
 
280
- static ScalarFunction GetFunction();
300
+ static ScalarFunctionSet GetFunctions();
281
301
  };
282
302
 
283
303
  struct MicrosecondsFun {
@@ -472,8 +492,8 @@ struct ToSecondsFun {
472
492
  struct ToTimestampFun {
473
493
  static constexpr const char *Name = "to_timestamp";
474
494
  static constexpr const char *Parameters = "sec";
475
- static constexpr const char *Description = "Converts sec since epoch to a timestamp";
476
- static constexpr const char *Example = "to_timestamp(701222400)";
495
+ static constexpr const char *Description = "Converts secs since epoch to a timestamp with time zone";
496
+ static constexpr const char *Example = "to_timestamp(1284352323.5)";
477
497
 
478
498
  static ScalarFunction GetFunction();
479
499
  };
@@ -490,7 +510,7 @@ struct ToYearsFun {
490
510
  struct TryStrpTimeFun {
491
511
  static constexpr const char *Name = "try_strptime";
492
512
  static constexpr const char *Parameters = "text,format";
493
- static constexpr const char *Description = "Converts string to timestamp with time zone according to the format string if %Z is specified. Returns NULL on failure.";
513
+ static constexpr const char *Description = "Converts string to timestamp using the format string (timestamp with time zone if %Z is specified). Returns NULL on failure.";
494
514
  static constexpr const char *Example = "try_strptime('Wed, 1 January 1992 - 08:38:40 PM', '%a, %-d %B %Y - %I:%M:%S %p')";
495
515
 
496
516
  static ScalarFunctionSet GetFunctions();
@@ -5,7 +5,9 @@
5
5
  //
6
6
  //
7
7
  //===----------------------------------------------------------------------===//
8
- // This file is generated by scripts/generate_functions.py
8
+ // This file is automatically generated by scripts/generate_functions.py
9
+ // Do not edit this file manually, your changes will be overwritten
10
+ //===----------------------------------------------------------------------===//
9
11
 
10
12
  #pragma once
11
13
 
@@ -5,7 +5,9 @@
5
5
  //
6
6
  //
7
7
  //===----------------------------------------------------------------------===//
8
- // This file is generated by scripts/generate_functions.py
8
+ // This file is automatically generated by scripts/generate_functions.py
9
+ // Do not edit this file manually, your changes will be overwritten
10
+ //===----------------------------------------------------------------------===//
9
11
 
10
12
  #pragma once
11
13
 
@@ -5,7 +5,9 @@
5
5
  //
6
6
  //
7
7
  //===----------------------------------------------------------------------===//
8
- // This file is generated by scripts/generate_functions.py
8
+ // This file is automatically generated by scripts/generate_functions.py
9
+ // Do not edit this file manually, your changes will be overwritten
10
+ //===----------------------------------------------------------------------===//
9
11
 
10
12
  #pragma once
11
13
 
@@ -5,7 +5,9 @@
5
5
  //
6
6
  //
7
7
  //===----------------------------------------------------------------------===//
8
- // This file is generated by scripts/generate_functions.py
8
+ // This file is automatically generated by scripts/generate_functions.py
9
+ // Do not edit this file manually, your changes will be overwritten
10
+ //===----------------------------------------------------------------------===//
9
11
 
10
12
  #pragma once
11
13
 
@@ -5,7 +5,9 @@
5
5
  //
6
6
  //
7
7
  //===----------------------------------------------------------------------===//
8
- // This file is generated by scripts/generate_functions.py
8
+ // This file is automatically generated by scripts/generate_functions.py
9
+ // Do not edit this file manually, your changes will be overwritten
10
+ //===----------------------------------------------------------------------===//
9
11
 
10
12
  #pragma once
11
13
 
@@ -5,7 +5,9 @@
5
5
  //
6
6
  //
7
7
  //===----------------------------------------------------------------------===//
8
- // This file is generated by scripts/generate_functions.py
8
+ // This file is automatically generated by scripts/generate_functions.py
9
+ // Do not edit this file manually, your changes will be overwritten
10
+ //===----------------------------------------------------------------------===//
9
11
 
10
12
  #pragma once
11
13
 
@@ -5,7 +5,9 @@
5
5
  //
6
6
  //
7
7
  //===----------------------------------------------------------------------===//
8
- // This file is generated by scripts/generate_functions.py
8
+ // This file is automatically generated by scripts/generate_functions.py
9
+ // Do not edit this file manually, your changes will be overwritten
10
+ //===----------------------------------------------------------------------===//
9
11
 
10
12
  #pragma once
11
13
 
@@ -5,7 +5,9 @@
5
5
  //
6
6
  //
7
7
  //===----------------------------------------------------------------------===//
8
- // This file is generated by scripts/generate_functions.py
8
+ // This file is automatically generated by scripts/generate_functions.py
9
+ // Do not edit this file manually, your changes will be overwritten
10
+ //===----------------------------------------------------------------------===//
9
11
 
10
12
  #pragma once
11
13
 
@@ -5,7 +5,9 @@
5
5
  //
6
6
  //
7
7
  //===----------------------------------------------------------------------===//
8
- // This file is generated by scripts/generate_functions.py
8
+ // This file is automatically generated by scripts/generate_functions.py
9
+ // Do not edit this file manually, your changes will be overwritten
10
+ //===----------------------------------------------------------------------===//
9
11
 
10
12
  #pragma once
11
13
 
@@ -5,7 +5,9 @@
5
5
  //
6
6
  //
7
7
  //===----------------------------------------------------------------------===//
8
- // This file is generated by scripts/generate_functions.py
8
+ // This file is automatically generated by scripts/generate_functions.py
9
+ // Do not edit this file manually, your changes will be overwritten
10
+ //===----------------------------------------------------------------------===//
9
11
 
10
12
  #pragma once
11
13
 
@@ -128,6 +128,9 @@ public:
128
128
  //! Executes the filter(if any) and update the aggregates
129
129
  void Combine(GroupedAggregateHashTable &other);
130
130
 
131
+ //! Appends the data in the other HT to this one
132
+ void Append(GroupedAggregateHashTable &other);
133
+
131
134
  TupleDataCollection &GetDataCollection() {
132
135
  return *data_collection;
133
136
  }
@@ -136,16 +139,29 @@ public:
136
139
  return data_collection->Count();
137
140
  }
138
141
 
142
+ idx_t DataSize() const {
143
+ return data_collection->SizeInBytes();
144
+ }
145
+
139
146
  static idx_t InitialCapacity();
140
147
  idx_t Capacity() {
141
148
  return capacity;
142
149
  }
143
150
 
151
+ static idx_t FirstPartSize(idx_t count, HtEntryType entry_type) {
152
+ idx_t entry_size = entry_type == HT_WIDTH_32 ? sizeof(aggr_ht_entry_32) : sizeof(aggr_ht_entry_64);
153
+ return NextPowerOfTwo(count * 2L) * entry_size;
154
+ }
155
+
156
+ idx_t TotalSize() const {
157
+ return DataSize() + FirstPartSize(Count(), entry_type);
158
+ }
159
+
144
160
  idx_t ResizeThreshold();
145
161
  idx_t MaxCapacity();
146
162
  static idx_t GetMaxCapacity(HtEntryType entry_type, idx_t tuple_size);
147
163
 
148
- void Partition(vector<GroupedAggregateHashTable *> &partition_hts, idx_t radix_bits);
164
+ void Partition(vector<GroupedAggregateHashTable *> &partition_hts, idx_t radix_bits, bool sink_done);
149
165
  void InitializeFirstPart();
150
166
 
151
167
  void Finalize();
@@ -165,7 +181,7 @@ private:
165
181
  vector<data_ptr_t> payload_hds_ptrs;
166
182
 
167
183
  //! The hashes of the HT
168
- BufferHandle hashes_hdl;
184
+ AllocatedData hashes_hdl;
169
185
  data_ptr_t hashes_hdl_ptr;
170
186
  idx_t hash_offset; // Offset into the layout of the hash column
171
187
 
@@ -178,8 +194,10 @@ private:
178
194
 
179
195
  vector<ExpressionType> predicates;
180
196
 
181
- //! The arena allocator used by the aggregates for their internal state
197
+ //! The active arena allocator used by the aggregates for their internal state
182
198
  shared_ptr<ArenaAllocator> aggregate_allocator;
199
+ //! Owning arena allocators that this HT has data from
200
+ vector<shared_ptr<ArenaAllocator>> stored_allocators;
183
201
 
184
202
  private:
185
203
  GroupedAggregateHashTable(const GroupedAggregateHashTable &) = delete;
@@ -88,6 +88,7 @@ public:
88
88
  void AddEvent(shared_ptr<Event> event);
89
89
 
90
90
  void AddRecursiveCTE(PhysicalOperator &rec_cte);
91
+ void AddMaterializedCTE(PhysicalOperator &mat_cte);
91
92
  void ReschedulePipelines(const vector<shared_ptr<MetaPipeline>> &pipelines, vector<shared_ptr<Event>> &events);
92
93
 
93
94
  //! Whether or not the root of the pipeline is a result collector object
@@ -129,6 +130,8 @@ private:
129
130
  vector<shared_ptr<Pipeline>> root_pipelines;
130
131
  //! The recursive CTE's in this query plan
131
132
  vector<reference<PhysicalOperator>> recursive_ctes;
133
+ //! The materialized CTE's in this query plan
134
+ vector<reference<PhysicalOperator>> materialized_ctes;
132
135
  //! The pipeline executor for the root pipeline
133
136
  unique_ptr<PipelineExecutor> root_executor;
134
137
  //! The current root pipeline index
@@ -112,14 +112,13 @@ private:
112
112
  void Erase(Node &node, const ARTKey &key, idx_t depth, const row_t &row_id);
113
113
 
114
114
  //! Returns all row IDs belonging to a key greater (or equal) than the search key
115
- bool SearchGreater(ARTIndexScanState &state, ARTKey &key, bool inclusive, idx_t max_count,
116
- vector<row_t> &result_ids);
115
+ bool SearchGreater(ARTIndexScanState &state, ARTKey &key, bool equal, idx_t max_count, vector<row_t> &result_ids);
117
116
  //! Returns all row IDs belonging to a key less (or equal) than the upper_bound
118
- bool SearchLess(ARTIndexScanState &state, ARTKey &upper_bound, bool inclusive, idx_t max_count,
117
+ bool SearchLess(ARTIndexScanState &state, ARTKey &upper_bound, bool equal, idx_t max_count,
119
118
  vector<row_t> &result_ids);
120
119
  //! Returns all row IDs belonging to a key within the range of lower_bound and upper_bound
121
- bool SearchCloseRange(ARTIndexScanState &state, ARTKey &lower_bound, ARTKey &upper_bound, bool left_inclusive,
122
- bool right_inclusive, idx_t max_count, vector<row_t> &result_ids);
120
+ bool SearchCloseRange(ARTIndexScanState &state, ARTKey &lower_bound, ARTKey &upper_bound, bool left_equal,
121
+ bool right_equal, idx_t max_count, vector<row_t> &result_ids);
123
122
 
124
123
  //! Initializes a merge operation by returning a set containing the buffer count of each fixed-size allocator
125
124
  void InitializeMerge(ARTFlags &flags);
@@ -14,9 +14,8 @@
14
14
 
15
15
  namespace duckdb {
16
16
 
17
+ //! Keeps track of the byte leading to the currently active child of the node
17
18
  struct IteratorEntry {
18
- IteratorEntry() {
19
- }
20
19
  IteratorEntry(Node node, uint8_t byte) : node(node), byte(byte) {
21
20
  }
22
21
 
@@ -24,16 +23,23 @@ struct IteratorEntry {
24
23
  uint8_t byte = 0;
25
24
  };
26
25
 
27
- //! Keeps track of the current key in the iterator
28
- class IteratorCurrentKey {
26
+ //! Keeps track of the current key in the iterator leading down to the top node in the stack
27
+ class IteratorKey {
29
28
  public:
30
- //! Push byte into current key
31
- void Push(const uint8_t key);
32
- //! Pops n elements from the key
33
- void Pop(const idx_t n);
29
+ //! Pushes a byte into the current key
30
+ inline void Push(const uint8_t key_byte) {
31
+ key_bytes.push_back(key_byte);
32
+ }
33
+ //! Pops n bytes from the current key
34
+ inline void Pop(const idx_t n) {
35
+ key_bytes.resize(key_bytes.size() - n);
36
+ }
34
37
 
35
38
  //! Subscript operator
36
- uint8_t &operator[](idx_t idx);
39
+ inline uint8_t &operator[](idx_t idx) {
40
+ D_ASSERT(idx < key_bytes.size());
41
+ return key_bytes[idx];
42
+ }
37
43
  //! Greater than operator
38
44
  bool operator>(const ARTKey &k) const;
39
45
  //! Greater than or equal to operator
@@ -42,37 +48,35 @@ public:
42
48
  bool operator==(const ARTKey &k) const;
43
49
 
44
50
  private:
45
- //! The current key position
46
- idx_t cur_key_pos = 0;
47
- //! The current key corresponding to the current leaf
48
- vector<uint8_t> key;
51
+ vector<uint8_t> key_bytes;
49
52
  };
50
53
 
51
54
  class Iterator {
52
55
  public:
53
- //! All information about the current key
54
- IteratorCurrentKey cur_key;
56
+ //! Holds the current key leading down to the top node on the stack
57
+ IteratorKey current_key;
55
58
  //! Pointer to the ART
56
- ART *art = nullptr;
59
+ optional_ptr<ART> art = nullptr;
57
60
 
58
- //! Scan the tree
59
- bool Scan(const ARTKey &key, const idx_t &max_count, vector<row_t> &result_ids, const bool &is_inclusive);
60
- //! Finds the minimum value of the tree
61
+ //! Scans the tree, starting at the current top node on the stack, and ending at upper_bound.
62
+ //! If upper_bound is the empty ARTKey, than there is no upper bound
63
+ bool Scan(const ARTKey &upper_bound, const idx_t max_count, vector<row_t> &result_ids, const bool equal);
64
+ //! Finds the minimum (leaf) of the current subtree
61
65
  void FindMinimum(Node &node);
62
- //! Goes to the lower bound of the tree
63
- bool LowerBound(Node node, const ARTKey &key, const bool &is_inclusive);
66
+ //! Finds the lower bound of the ART and adds the nodes to the stack. Returns false, if the lower
67
+ //! bound exceeds the maximum value of the ART
68
+ bool LowerBound(Node &node, const ARTKey &key, const bool equal, idx_t depth);
64
69
 
65
70
  private:
66
- //! Stack of iterator entries
71
+ //! Stack of nodes from the root to the currently active node
67
72
  stack<IteratorEntry> nodes;
68
73
  //! Last visited leaf
69
- Leaf *last_leaf = nullptr;
74
+ optional_ptr<Leaf> last_leaf = nullptr;
70
75
 
71
- //! Go to the next node
76
+ //! Goes to the next leaf in the ART and sets it as last_leaf,
77
+ //! returns false if there is no next leaf
72
78
  bool Next();
73
- //! Push part of the key to the current key
74
- void PushKey(const Node &node, const uint8_t byte);
75
- //! Pop node from the stack of iterator entries
79
+ //! Pop the top node from the stack of iterator entries and adjust the current key
76
80
  void PopNode();
77
81
  };
78
82
  } // namespace duckdb
@@ -8,16 +8,13 @@
8
8
 
9
9
  #pragma once
10
10
 
11
- #include "duckdb/execution/index/art/art.hpp"
12
11
  #include "duckdb/execution/index/art/fixed_size_allocator.hpp"
12
+ #include "duckdb/execution/index/art/art.hpp"
13
13
  #include "duckdb/execution/index/art/node.hpp"
14
- #include "duckdb/execution/index/art/prefix.hpp"
15
14
 
16
15
  namespace duckdb {
17
16
 
18
17
  // classes
19
- class Node;
20
- class ARTKey;
21
18
  class MetaBlockWriter;
22
19
  class MetaBlockReader;
23
20
 
@@ -28,8 +25,6 @@ class Leaf {
28
25
  public:
29
26
  //! Number of row IDs
30
27
  uint32_t count;
31
- //! Compressed path (prefix)
32
- Prefix prefix;
33
28
  union {
34
29
  //! The pointer to the head of the list of leaf segments
35
30
  Node ptr;
@@ -38,13 +33,10 @@ public:
38
33
  } row_ids;
39
34
 
40
35
  public:
41
- //! Get a new leaf node, might cause a new buffer allocation, and initializes a leaf holding one
42
- //! row ID and a prefix starting at depth
43
- static Leaf &New(ART &art, Node &node, const ARTKey &key, const uint32_t depth, const row_t row_id);
44
- //! Get a new leaf node, might cause a new buffer allocation, and initializes a leaf holding
45
- //! n_row_ids row IDs and a prefix starting at depth
46
- static Leaf &New(ART &art, Node &node, const ARTKey &key, const uint32_t depth, const row_t *row_ids,
47
- const idx_t count);
36
+ //! Get a new leaf node, might cause a new buffer allocation, and initializes a leaf holding one row ID
37
+ static Leaf &New(ART &art, Node &node, const row_t row_id);
38
+ //! Get a new leaf node, might cause a new buffer allocation, and initializes a leaf holding n_row_ids row IDs
39
+ static Leaf &New(ART &art, Node &node, const row_t *row_ids, const idx_t count);
48
40
  //! Free the leaf
49
41
  static void Free(ART &art, Node &node);
50
42
  //! Get a reference to the leaf
@@ -72,7 +64,7 @@ public:
72
64
  //! and sets the ptr to point to the segment containing the row ID
73
65
  uint32_t FindRowId(const ART &art, Node &ptr, const row_t row_id) const;
74
66
 
75
- //! Returns the string representation of a leaf
67
+ //! Returns the string representation of the node, or only traverses and verifies the node and its subtree
76
68
  string VerifyAndToString(const ART &art, const bool only_verify) const;
77
69
 
78
70
  //! Serialize this leaf
@@ -15,7 +15,7 @@ namespace duckdb {
15
15
 
16
16
  // classes
17
17
  enum class NType : uint8_t {
18
- PREFIX_SEGMENT = 1,
18
+ PREFIX = 1,
19
19
  LEAF_SEGMENT = 2,
20
20
  LEAF = 3,
21
21
  NODE_4 = 4,
@@ -38,11 +38,6 @@ struct ARTFlags;
38
38
  //! The remaining bytes are the position in the respective ART buffer.
39
39
  class Node : public SwizzleablePointer {
40
40
  public:
41
- // constants (this allows testing performance with different ART node sizes)
42
-
43
- //! Node prefixes (NOTE: this should always hold: PREFIX_SEGMENT_SIZE >= PREFIX_INLINE_BYTES)
44
- static constexpr uint32_t PREFIX_INLINE_BYTES = 8;
45
- static constexpr uint32_t PREFIX_SEGMENT_SIZE = 32;
46
41
  //! Node thresholds
47
42
  static constexpr uint8_t NODE_48_SHRINK_THRESHOLD = 12;
48
43
  static constexpr uint8_t NODE_256_SHRINK_THRESHOLD = 36;
@@ -54,6 +49,7 @@ public:
54
49
  //! Other constants
55
50
  static constexpr uint8_t EMPTY_MARKER = 48;
56
51
  static constexpr uint32_t LEAF_SEGMENT_SIZE = 8;
52
+ static constexpr uint8_t PREFIX_SIZE = 15;
57
53
 
58
54
  public:
59
55
  //! Constructs an empty ARTNode
@@ -73,7 +69,7 @@ public:
73
69
  //! Retrieve the node type from the leftmost byte
74
70
  inline NType DecodeARTNodeType() const {
75
71
  D_ASSERT(!IsSwizzled());
76
- D_ASSERT(type >= (uint8_t)NType::PREFIX_SEGMENT);
72
+ D_ASSERT(type >= (uint8_t)NType::PREFIX);
77
73
  D_ASSERT(type <= (uint8_t)NType::NODE_256);
78
74
  return NType(type);
79
75
  }
@@ -91,7 +87,7 @@ public:
91
87
  //! Insert the child node at byte
92
88
  static void InsertChild(ART &art, Node &node, const uint8_t byte, const Node child);
93
89
  //! Delete the child node at the respective byte
94
- static void DeleteChild(ART &art, Node &node, const uint8_t byte);
90
+ static void DeleteChild(ART &art, Node &node, Node &prefix, const uint8_t byte);
95
91
 
96
92
  //! Get the child for the respective byte in the node
97
93
  optional_ptr<Node> GetChild(ART &art, const uint8_t byte) const;
@@ -107,8 +103,6 @@ public:
107
103
  string VerifyAndToString(ART &art, const bool only_verify);
108
104
  //! Returns the capacity of the node
109
105
  idx_t GetCapacity() const;
110
- //! Returns a pointer to the prefix of the node
111
- Prefix &GetPrefix(ART &art);
112
106
  //! Returns the matching node type for a given count
113
107
  static NType GetARTNodeTypeByCount(const idx_t count);
114
108
  //! Get references to the different allocators