duckdb 0.8.2-dev161.0 → 0.8.2-dev1724.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 +44 -11
  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 +13 -0
  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 +0 -1
  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 +51 -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
@@ -1,15 +1,15 @@
1
+ #include "duckdb/execution/index/art/node.hpp"
2
+
1
3
  #include "duckdb/common/limits.hpp"
2
4
  #include "duckdb/common/swap.hpp"
3
5
  #include "duckdb/execution/index/art/art.hpp"
4
- #include "duckdb/execution/index/art/leaf.hpp"
5
- #include "duckdb/execution/index/art/leaf_segment.hpp"
6
- #include "duckdb/execution/index/art/node.hpp"
7
- #include "duckdb/execution/index/art/node16.hpp"
8
6
  #include "duckdb/execution/index/art/node256.hpp"
9
- #include "duckdb/execution/index/art/node4.hpp"
10
7
  #include "duckdb/execution/index/art/node48.hpp"
8
+ #include "duckdb/execution/index/art/node16.hpp"
9
+ #include "duckdb/execution/index/art/node4.hpp"
10
+ #include "duckdb/execution/index/art/leaf.hpp"
11
+ #include "duckdb/execution/index/art/leaf_segment.hpp"
11
12
  #include "duckdb/execution/index/art/prefix.hpp"
12
- #include "duckdb/execution/index/art/prefix_segment.hpp"
13
13
  #include "duckdb/storage/meta_block_reader.hpp"
14
14
  #include "duckdb/storage/meta_block_writer.hpp"
15
15
  #include "duckdb/storage/table_io_manager.hpp"
@@ -28,13 +28,9 @@ Node::Node(MetaBlockReader &reader) : SwizzleablePointer(reader) {
28
28
 
29
29
  void Node::New(ART &art, Node &node, const NType type) {
30
30
 
31
+ // NOTE: leaves and prefixes should not pass through this function
32
+
31
33
  switch (type) {
32
- case NType::PREFIX_SEGMENT:
33
- PrefixSegment::New(art, node);
34
- break;
35
- case NType::LEAF_SEGMENT:
36
- LeafSegment::New(art, node);
37
- break;
38
34
  case NType::NODE_4:
39
35
  Node4::New(art, node);
40
36
  break;
@@ -55,20 +51,18 @@ void Node::New(ART &art, Node &node, const NType type) {
55
51
  void Node::Free(ART &art, Node &node) {
56
52
 
57
53
  // recursively free all nodes that are in-memory, and skip swizzled and empty nodes
58
-
59
54
  if (!node.IsSet()) {
60
55
  return;
61
56
  }
62
57
 
63
58
  if (!node.IsSwizzled()) {
64
59
 
60
+ // free the children of the nodes
65
61
  auto type = node.DecodeARTNodeType();
66
- if (type != NType::PREFIX_SEGMENT && type != NType::LEAF_SEGMENT) {
67
- node.GetPrefix(art).Free(art);
68
- }
69
-
70
- // free the prefixes and children of the nodes
71
62
  switch (type) {
63
+ case NType::PREFIX:
64
+ Prefix::Free(art, node);
65
+ break;
72
66
  case NType::LEAF_SEGMENT:
73
67
  LeafSegment::Free(art, node);
74
68
  break;
@@ -87,8 +81,6 @@ void Node::Free(ART &art, Node &node) {
87
81
  case NType::NODE_256:
88
82
  Node256::Free(art, node);
89
83
  break;
90
- default:
91
- break;
92
84
  }
93
85
 
94
86
  Node::GetAllocator(art, type).Free(node);
@@ -140,11 +132,11 @@ void Node::InsertChild(ART &art, Node &node, const uint8_t byte, const Node chil
140
132
  // Deletes
141
133
  //===--------------------------------------------------------------------===//
142
134
 
143
- void Node::DeleteChild(ART &art, Node &node, const uint8_t byte) {
135
+ void Node::DeleteChild(ART &art, Node &node, Node &prefix, const uint8_t byte) {
144
136
 
145
137
  switch (node.DecodeARTNodeType()) {
146
138
  case NType::NODE_4:
147
- return Node4::DeleteChild(art, node, byte);
139
+ return Node4::DeleteChild(art, node, prefix, byte);
148
140
  case NType::NODE_16:
149
141
  return Node16::DeleteChild(art, node, byte);
150
142
  case NType::NODE_48:
@@ -227,12 +219,13 @@ BlockPointer Node::Serialize(ART &art, MetaBlockWriter &writer) {
227
219
  if (!IsSet()) {
228
220
  return {(block_id_t)DConstants::INVALID_INDEX, 0};
229
221
  }
230
-
231
222
  if (IsSwizzled()) {
232
223
  Deserialize(art);
233
224
  }
234
225
 
235
226
  switch (DecodeARTNodeType()) {
227
+ case NType::PREFIX:
228
+ return Prefix::Get(art, *this).Serialize(art, writer);
236
229
  case NType::LEAF:
237
230
  return Leaf::Get(art, *this).Serialize(art, writer);
238
231
  case NType::NODE_4:
@@ -260,16 +253,18 @@ void Node::Deserialize(ART &art) {
260
253
  type = (uint8_t)decoded_type;
261
254
 
262
255
  switch (decoded_type) {
256
+ case NType::PREFIX:
257
+ return Prefix::Get(art, *this).Deserialize(reader);
263
258
  case NType::LEAF:
264
259
  return Leaf::Get(art, *this).Deserialize(art, reader);
265
260
  case NType::NODE_4:
266
- return Node4::Get(art, *this).Deserialize(art, reader);
261
+ return Node4::Get(art, *this).Deserialize(reader);
267
262
  case NType::NODE_16:
268
- return Node16::Get(art, *this).Deserialize(art, reader);
263
+ return Node16::Get(art, *this).Deserialize(reader);
269
264
  case NType::NODE_48:
270
- return Node48::Get(art, *this).Deserialize(art, reader);
265
+ return Node48::Get(art, *this).Deserialize(reader);
271
266
  case NType::NODE_256:
272
- return Node256::Get(art, *this).Deserialize(art, reader);
267
+ return Node256::Get(art, *this).Deserialize(reader);
273
268
  default:
274
269
  throw InternalException("Invalid node type for Deserialize.");
275
270
  }
@@ -291,13 +286,19 @@ string Node::VerifyAndToString(ART &art, const bool only_verify) {
291
286
  auto str = Leaf::Get(art, *this).VerifyAndToString(art, only_verify);
292
287
  return only_verify ? "" : "\n" + str;
293
288
  }
289
+ if (type == NType::PREFIX) {
290
+ auto str = Prefix::Get(art, *this).VerifyAndToString(art, only_verify);
291
+ return only_verify ? "" : "\n" + str;
292
+ }
294
293
 
295
294
  string str = "Node" + to_string(GetCapacity()) + ": [";
296
295
 
297
296
  idx_t child_count = 0;
298
297
  uint8_t byte = 0;
299
298
  auto child = GetNextChild(art, byte, false);
299
+
300
300
  while (child) {
301
+
301
302
  child_count++;
302
303
  if (child->IsSwizzled()) {
303
304
  if (!only_verify) {
@@ -309,6 +310,7 @@ string Node::VerifyAndToString(ART &art, const bool only_verify) {
309
310
  break;
310
311
  }
311
312
  }
313
+
312
314
  byte++;
313
315
  child = GetNextChild(art, byte, false);
314
316
  }
@@ -337,28 +339,6 @@ idx_t Node::GetCapacity() const {
337
339
  }
338
340
  }
339
341
 
340
- Prefix &Node::GetPrefix(ART &art) {
341
-
342
- if (IsSwizzled()) {
343
- Deserialize(art);
344
- }
345
-
346
- switch (DecodeARTNodeType()) {
347
- case NType::LEAF:
348
- return Leaf::Get(art, *this).prefix;
349
- case NType::NODE_4:
350
- return Node4::Get(art, *this).prefix;
351
- case NType::NODE_16:
352
- return Node16::Get(art, *this).prefix;
353
- case NType::NODE_48:
354
- return Node48::Get(art, *this).prefix;
355
- case NType::NODE_256:
356
- return Node256::Get(art, *this).prefix;
357
- default:
358
- throw InternalException("Invalid node type for GetPrefix.");
359
- }
360
- }
361
-
362
342
  NType Node::GetARTNodeTypeByCount(const idx_t count) {
363
343
 
364
344
  if (count <= NODE_4_CAPACITY) {
@@ -381,22 +361,14 @@ FixedSizeAllocator &Node::GetAllocator(const ART &art, NType type) {
381
361
 
382
362
  void Node::InitializeMerge(ART &art, const ARTFlags &flags) {
383
363
 
384
- if (!IsSet()) {
385
- return;
386
- }
387
-
388
- if (IsSwizzled()) {
389
- Deserialize(art);
390
- }
391
-
392
- // if not all prefixes are inlined
393
- if (flags.merge_buffer_counts[(uint8_t)NType::PREFIX_SEGMENT - 1] != 0) {
394
- // initialize prefix segments
395
- GetPrefix(art).InitializeMerge(art, flags.merge_buffer_counts[(uint8_t)NType::PREFIX_SEGMENT - 1]);
396
- }
364
+ // the index is fully in memory during CREATE [UNIQUE] INDEX statements
365
+ D_ASSERT(IsSet() && !IsSwizzled());
397
366
 
398
367
  auto type = DecodeARTNodeType();
399
368
  switch (type) {
369
+ case NType::PREFIX:
370
+ Prefix::Get(art, *this).InitializeMerge(art, flags);
371
+ break;
400
372
  case NType::LEAF:
401
373
  // if not all leaves are inlined
402
374
  if (flags.merge_buffer_counts[(uint8_t)NType::LEAF_SEGMENT - 1] != 0) {
@@ -434,82 +406,108 @@ bool Node::Merge(ART &art, Node &other) {
434
406
  return ResolvePrefixes(art, other);
435
407
  }
436
408
 
437
- bool Node::ResolvePrefixes(ART &art, Node &other) {
409
+ bool MergePrefixContainsOtherPrefix(ART &art, reference<Node> &l_node, reference<Node> &r_node,
410
+ idx_t &mismatch_position) {
438
411
 
439
- // NOTE: we always merge into the left ART
412
+ // r_node's prefix contains l_node's prefix
413
+ // l_node cannot be a leaf, otherwise the key represented by l_node would be a subset of another key
414
+ // which is not possible by our construction
415
+ D_ASSERT(l_node.get().DecodeARTNodeType() != NType::LEAF);
440
416
 
441
- D_ASSERT(IsSet());
442
- D_ASSERT(other.IsSet());
417
+ // test if the next byte (mismatch_position) in r_node (prefix) exists in l_node
418
+ auto mismatch_byte = Prefix::GetByte(art, r_node, mismatch_position);
419
+ auto child_node = l_node.get().GetChild(art, mismatch_byte);
443
420
 
444
- // make sure that r_node has the longer (or equally long) prefix
445
- if (GetPrefix(art).count > other.GetPrefix(art).count) {
446
- swap(*this, other);
421
+ // update the prefix of r_node to only consist of the bytes after mismatch_position
422
+ Prefix::Reduce(art, r_node, mismatch_position);
423
+
424
+ if (!child_node) {
425
+ // insert r_node as a child of l_node at the empty position
426
+ Node::InsertChild(art, l_node, mismatch_byte, r_node);
427
+ r_node.get().Reset();
428
+ return true;
447
429
  }
448
430
 
449
- auto &l_node = *this;
450
- auto &r_node = other;
451
- auto &l_prefix = l_node.GetPrefix(art);
452
- auto &r_prefix = r_node.GetPrefix(art);
431
+ // recurse
432
+ return child_node->ResolvePrefixes(art, r_node);
433
+ }
453
434
 
454
- auto mismatch_position = l_prefix.MismatchPosition(art, r_prefix);
435
+ void MergePrefixesDiffer(ART &art, reference<Node> &l_node, reference<Node> &r_node, idx_t &mismatch_position) {
455
436
 
456
- // both nodes have no prefix or the same prefix
457
- if (mismatch_position == l_prefix.count && l_prefix.count == r_prefix.count) {
458
- return MergeInternal(art, r_node);
459
- }
437
+ // create a new node and insert both nodes as children
460
438
 
461
- if (mismatch_position == l_prefix.count) {
462
- // r_node's prefix contains l_node's prefix
463
- // l_node cannot be a leaf, otherwise the key represented by l_node would be a subset of another key
464
- // which is not possible by our construction
465
- D_ASSERT(l_node.DecodeARTNodeType() != NType::LEAF);
439
+ Node l_child;
440
+ auto l_byte = Prefix::GetByte(art, l_node, mismatch_position);
441
+ Prefix::Split(art, l_node, l_child, mismatch_position);
442
+ Node4::New(art, l_node);
466
443
 
467
- // test if the next byte (mismatch_position) in r_node (longer prefix) exists in l_node
468
- auto mismatch_byte = r_prefix.GetByte(art, mismatch_position);
469
- auto child_node = l_node.GetChild(art, mismatch_byte);
444
+ // insert children
445
+ Node4::InsertChild(art, l_node, l_byte, l_child);
446
+ auto r_byte = Prefix::GetByte(art, r_node, mismatch_position);
447
+ Prefix::Reduce(art, r_node, mismatch_position);
448
+ Node4::InsertChild(art, l_node, r_byte, r_node);
470
449
 
471
- // update the prefix of r_node to only consist of the bytes after mismatch_position
472
- r_prefix.Reduce(art, mismatch_position);
450
+ r_node.get().Reset();
451
+ }
473
452
 
474
- // insert r_node as a child of l_node at empty position
475
- if (!child_node) {
476
- Node::InsertChild(art, l_node, mismatch_byte, r_node);
477
- r_node.Reset();
478
- return true;
479
- }
453
+ bool Node::ResolvePrefixes(ART &art, Node &other) {
454
+
455
+ // NOTE: we always merge into the left ART
456
+
457
+ D_ASSERT(IsSet());
458
+ D_ASSERT(other.IsSet());
480
459
 
481
- // recurse
482
- return child_node->ResolvePrefixes(art, r_node);
460
+ // case 1: both nodes have no prefix
461
+ if (DecodeARTNodeType() != NType::PREFIX && other.DecodeARTNodeType() != NType::PREFIX) {
462
+ return MergeInternal(art, other);
483
463
  }
484
464
 
485
- // prefixes differ, create new node and insert both nodes as children
465
+ reference<Node> l_node(*this);
466
+ reference<Node> r_node(other);
486
467
 
487
- // create new node
488
- auto old_l_node = l_node;
489
- auto &new_n4 = Node4::New(art, l_node);
490
- new_n4.prefix.Initialize(art, l_prefix, mismatch_position);
468
+ idx_t mismatch_position = DConstants::INVALID_INDEX;
491
469
 
492
- // insert old l_node, break up prefix of old l_node
493
- auto key_byte = l_prefix.Reduce(art, mismatch_position);
494
- Node4::InsertChild(art, l_node, key_byte, old_l_node);
470
+ // traverse prefixes
471
+ if (l_node.get().DecodeARTNodeType() == NType::PREFIX && r_node.get().DecodeARTNodeType() == NType::PREFIX) {
472
+
473
+ if (!Prefix::Traverse(art, l_node, r_node, mismatch_position)) {
474
+ return false;
475
+ }
476
+ // we already recurse because the prefixes matched (so far)
477
+ if (mismatch_position == DConstants::INVALID_INDEX) {
478
+ return true;
479
+ }
495
480
 
496
- // insert r_node, break up prefix of r_node
497
- key_byte = r_prefix.Reduce(art, mismatch_position);
498
- Node4::InsertChild(art, l_node, key_byte, r_node);
481
+ } else {
499
482
 
500
- r_node.Reset();
483
+ // l_prefix contains r_prefix
484
+ if (l_node.get().DecodeARTNodeType() == NType::PREFIX) {
485
+ swap(*this, other);
486
+ }
487
+ mismatch_position = 0;
488
+ }
489
+ D_ASSERT(mismatch_position != DConstants::INVALID_INDEX);
490
+
491
+ // case 2: one prefix contains the other prefix
492
+ if (l_node.get().DecodeARTNodeType() != NType::PREFIX && r_node.get().DecodeARTNodeType() == NType::PREFIX) {
493
+ return MergePrefixContainsOtherPrefix(art, l_node, r_node, mismatch_position);
494
+ }
495
+
496
+ // case 3: prefixes differ at a specific byte
497
+ MergePrefixesDiffer(art, l_node, r_node, mismatch_position);
501
498
  return true;
502
499
  }
503
500
 
504
501
  bool Node::MergeInternal(ART &art, Node &other) {
505
502
 
506
- D_ASSERT(IsSet());
507
- D_ASSERT(other.IsSet());
503
+ D_ASSERT(IsSet() && other.IsSet());
504
+ D_ASSERT(DecodeARTNodeType() != NType::PREFIX && DecodeARTNodeType() != NType::LEAF_SEGMENT);
505
+ D_ASSERT(other.DecodeARTNodeType() != NType::PREFIX && other.DecodeARTNodeType() != NType::LEAF_SEGMENT);
508
506
 
509
507
  // always try to merge the smaller node into the bigger node
510
508
  // because maybe there is enough free space in the bigger node to fit the smaller one
511
509
  // without too much recursion
512
- if (this->DecodeARTNodeType() < other.DecodeARTNodeType()) {
510
+ if (DecodeARTNodeType() < other.DecodeARTNodeType()) {
513
511
  swap(*this, other);
514
512
  }
515
513
 
@@ -524,7 +522,7 @@ bool Node::MergeInternal(ART &art, Node &other) {
524
522
  return false;
525
523
  }
526
524
 
527
- Leaf::Get(art, *this).Merge(art, r_node);
525
+ Leaf::Get(art, l_node).Merge(art, r_node);
528
526
  return true;
529
527
  }
530
528
 
@@ -567,22 +565,17 @@ void Node::Vacuum(ART &art, Node &node, const ARTFlags &flags) {
567
565
  return;
568
566
  }
569
567
 
570
- // possibly vacuum prefix segments, if not all prefixes are inlined
571
- bool needs_vacuum = flags.vacuum_flags[(uint8_t)NType::PREFIX_SEGMENT - 1];
572
- if (needs_vacuum) {
573
- // vacuum prefix segments
574
- node.GetPrefix(art).Vacuum(art);
575
- }
576
-
577
568
  auto type = node.DecodeARTNodeType();
578
569
  auto &allocator = Node::GetAllocator(art, type);
579
- needs_vacuum = flags.vacuum_flags[node.type - 1] && allocator.NeedsVacuum(node);
570
+ auto needs_vacuum = flags.vacuum_flags[node.type - 1] && allocator.NeedsVacuum(node);
580
571
  if (needs_vacuum) {
581
572
  node.SetPtr(allocator.VacuumPointer(node));
582
573
  node.type = (uint8_t)type;
583
574
  }
584
575
 
585
576
  switch (type) {
577
+ case NType::PREFIX:
578
+ return Prefix::Get(art, node).Vacuum(art, flags);
586
579
  case NType::LEAF: {
587
580
  // possibly vacuum leaf segments, if not all leaves are inlined
588
581
  if (flags.vacuum_flags[(uint8_t)NType::LEAF_SEGMENT - 1]) {
@@ -1,7 +1,5 @@
1
1
  #include "duckdb/execution/index/art/node16.hpp"
2
2
 
3
- #include "duckdb/execution/index/art/art.hpp"
4
- #include "duckdb/execution/index/art/node.hpp"
5
3
  #include "duckdb/execution/index/art/node4.hpp"
6
4
  #include "duckdb/execution/index/art/node48.hpp"
7
5
  #include "duckdb/storage/meta_block_reader.hpp"
@@ -16,7 +14,6 @@ Node16 &Node16::New(ART &art, Node &node) {
16
14
  auto &n16 = Node16::Get(art, node);
17
15
 
18
16
  n16.count = 0;
19
- n16.prefix.Initialize();
20
17
  return n16;
21
18
  }
22
19
 
@@ -39,8 +36,6 @@ Node16 &Node16::GrowNode4(ART &art, Node &node16, Node &node4) {
39
36
  auto &n16 = Node16::New(art, node16);
40
37
 
41
38
  n16.count = n4.count;
42
- n16.prefix.Move(n4.prefix);
43
-
44
39
  for (idx_t i = 0; i < n4.count; i++) {
45
40
  n16.key[i] = n4.key[i];
46
41
  n16.children[i] = n4.children[i];
@@ -57,8 +52,6 @@ Node16 &Node16::ShrinkNode48(ART &art, Node &node16, Node &node48) {
57
52
  auto &n48 = Node48::Get(art, node48);
58
53
 
59
54
  n16.count = 0;
60
- n16.prefix.Move(n48.prefix);
61
-
62
55
  for (idx_t i = 0; i < Node::NODE_256_CAPACITY; i++) {
63
56
  D_ASSERT(n16.count <= Node::NODE_16_CAPACITY);
64
57
  if (n48.child_index[i] != Node::EMPTY_MARKER) {
@@ -195,7 +188,6 @@ BlockPointer Node16::Serialize(ART &art, MetaBlockWriter &writer) {
195
188
  auto block_pointer = writer.GetBlockPointer();
196
189
  writer.Write(NType::NODE_16);
197
190
  writer.Write<uint8_t>(count);
198
- prefix.Serialize(art, writer);
199
191
 
200
192
  // write key values
201
193
  for (idx_t i = 0; i < Node::NODE_16_CAPACITY; i++) {
@@ -211,10 +203,9 @@ BlockPointer Node16::Serialize(ART &art, MetaBlockWriter &writer) {
211
203
  return block_pointer;
212
204
  }
213
205
 
214
- void Node16::Deserialize(ART &art, MetaBlockReader &reader) {
206
+ void Node16::Deserialize(MetaBlockReader &reader) {
215
207
 
216
208
  count = reader.Read<uint8_t>();
217
- prefix.Deserialize(art, reader);
218
209
 
219
210
  // read key values
220
211
  for (idx_t i = 0; i < Node::NODE_16_CAPACITY; i++) {
@@ -1,7 +1,5 @@
1
1
  #include "duckdb/execution/index/art/node256.hpp"
2
2
 
3
- #include "duckdb/execution/index/art/art.hpp"
4
- #include "duckdb/execution/index/art/node.hpp"
5
3
  #include "duckdb/execution/index/art/node48.hpp"
6
4
  #include "duckdb/storage/meta_block_reader.hpp"
7
5
  #include "duckdb/storage/meta_block_writer.hpp"
@@ -15,8 +13,6 @@ Node256 &Node256::New(ART &art, Node &node) {
15
13
  auto &n256 = Node256::Get(art, node);
16
14
 
17
15
  n256.count = 0;
18
- n256.prefix.Initialize();
19
-
20
16
  for (idx_t i = 0; i < Node::NODE_256_CAPACITY; i++) {
21
17
  n256.children[i].Reset();
22
18
  }
@@ -49,8 +45,6 @@ Node256 &Node256::GrowNode48(ART &art, Node &node256, Node &node48) {
49
45
  auto &n256 = Node256::New(art, node256);
50
46
 
51
47
  n256.count = n48.count;
52
- n256.prefix.Move(n48.prefix);
53
-
54
48
  for (idx_t i = 0; i < Node::NODE_256_CAPACITY; i++) {
55
49
  if (n48.child_index[i] != Node::EMPTY_MARKER) {
56
50
  n256.children[i] = n48.children[n48.child_index[i]];
@@ -127,7 +121,6 @@ BlockPointer Node256::Serialize(ART &art, MetaBlockWriter &writer) {
127
121
  auto block_pointer = writer.GetBlockPointer();
128
122
  writer.Write(NType::NODE_256);
129
123
  writer.Write<uint16_t>(count);
130
- prefix.Serialize(art, writer);
131
124
 
132
125
  // write child block pointers
133
126
  for (auto &child_block_pointer : child_block_pointers) {
@@ -138,10 +131,9 @@ BlockPointer Node256::Serialize(ART &art, MetaBlockWriter &writer) {
138
131
  return block_pointer;
139
132
  }
140
133
 
141
- void Node256::Deserialize(ART &art, MetaBlockReader &reader) {
134
+ void Node256::Deserialize(MetaBlockReader &reader) {
142
135
 
143
136
  count = reader.Read<uint16_t>();
144
- prefix.Deserialize(art, reader);
145
137
 
146
138
  // read child block pointers
147
139
  for (idx_t i = 0; i < Node::NODE_256_CAPACITY; i++) {
@@ -1,7 +1,6 @@
1
1
  #include "duckdb/execution/index/art/node4.hpp"
2
2
 
3
- #include "duckdb/execution/index/art/art.hpp"
4
- #include "duckdb/execution/index/art/node.hpp"
3
+ #include "duckdb/execution/index/art/prefix.hpp"
5
4
  #include "duckdb/execution/index/art/node16.hpp"
6
5
  #include "duckdb/storage/meta_block_reader.hpp"
7
6
  #include "duckdb/storage/meta_block_writer.hpp"
@@ -15,7 +14,6 @@ Node4 &Node4::New(ART &art, Node &node) {
15
14
  auto &n4 = Node4::Get(art, node);
16
15
 
17
16
  n4.count = 0;
18
- n4.prefix.Initialize();
19
17
  return n4;
20
18
  }
21
19
 
@@ -39,8 +37,6 @@ Node4 &Node4::ShrinkNode16(ART &art, Node &node4, Node &node16) {
39
37
 
40
38
  D_ASSERT(n16.count <= Node::NODE_4_CAPACITY);
41
39
  n4.count = n16.count;
42
- n4.prefix.Move(n16.prefix);
43
-
44
40
  for (idx_t i = 0; i < n16.count; i++) {
45
41
  n4.key[i] = n16.key[i];
46
42
  n4.children[i] = n16.children[i];
@@ -94,7 +90,7 @@ void Node4::InsertChild(ART &art, Node &node, const uint8_t byte, const Node chi
94
90
  }
95
91
  }
96
92
 
97
- void Node4::DeleteChild(ART &art, Node &node, const uint8_t byte) {
93
+ void Node4::DeleteChild(ART &art, Node &node, Node &prefix, const uint8_t byte) {
98
94
 
99
95
  D_ASSERT(node.IsSet());
100
96
  D_ASSERT(!node.IsSwizzled());
@@ -123,13 +119,18 @@ void Node4::DeleteChild(ART &art, Node &node, const uint8_t byte) {
123
119
  // this is a one way node, compress
124
120
  if (n4.count == 1) {
125
121
 
122
+ // we need to keep track of the old node pointer
123
+ // because Concatenate() might overwrite that pointer while appending bytes to
124
+ // the prefix (and by doing so overwriting the subsequent node with
125
+ // new prefix nodes)
126
+ auto old_n4_node = node;
127
+
126
128
  // get only child and concatenate prefixes
127
129
  auto child = *n4.GetChild(n4.key[0]);
128
- child.GetPrefix(art).Concatenate(art, n4.key[0], n4.prefix);
129
- n4.count--;
130
+ Prefix::Concatenate(art, prefix, n4.key[0], child);
130
131
 
131
- Node::Free(art, node);
132
- node = child;
132
+ n4.count--;
133
+ Node::Free(art, old_n4_node);
133
134
  }
134
135
  }
135
136
 
@@ -180,7 +181,6 @@ BlockPointer Node4::Serialize(ART &art, MetaBlockWriter &writer) {
180
181
  auto block_pointer = writer.GetBlockPointer();
181
182
  writer.Write(NType::NODE_4);
182
183
  writer.Write<uint8_t>(count);
183
- prefix.Serialize(art, writer);
184
184
 
185
185
  // write key values
186
186
  for (idx_t i = 0; i < Node::NODE_4_CAPACITY; i++) {
@@ -196,10 +196,9 @@ BlockPointer Node4::Serialize(ART &art, MetaBlockWriter &writer) {
196
196
  return block_pointer;
197
197
  }
198
198
 
199
- void Node4::Deserialize(ART &art, MetaBlockReader &reader) {
199
+ void Node4::Deserialize(MetaBlockReader &reader) {
200
200
 
201
201
  count = reader.Read<uint8_t>();
202
- prefix.Deserialize(art, reader);
203
202
 
204
203
  // read key values
205
204
  for (idx_t i = 0; i < Node::NODE_4_CAPACITY; i++) {
@@ -1,7 +1,5 @@
1
1
  #include "duckdb/execution/index/art/node48.hpp"
2
2
 
3
- #include "duckdb/execution/index/art/art.hpp"
4
- #include "duckdb/execution/index/art/node.hpp"
5
3
  #include "duckdb/execution/index/art/node16.hpp"
6
4
  #include "duckdb/execution/index/art/node256.hpp"
7
5
  #include "duckdb/storage/meta_block_reader.hpp"
@@ -16,8 +14,6 @@ Node48 &Node48::New(ART &art, Node &node) {
16
14
  auto &n48 = Node48::Get(art, node);
17
15
 
18
16
  n48.count = 0;
19
- n48.prefix.Initialize();
20
-
21
17
  for (idx_t i = 0; i < Node::NODE_256_CAPACITY; i++) {
22
18
  n48.child_index[i] = Node::EMPTY_MARKER;
23
19
  }
@@ -55,8 +51,6 @@ Node48 &Node48::GrowNode16(ART &art, Node &node48, Node &node16) {
55
51
  auto &n48 = Node48::New(art, node48);
56
52
 
57
53
  n48.count = n16.count;
58
- n48.prefix.Move(n16.prefix);
59
-
60
54
  for (idx_t i = 0; i < Node::NODE_256_CAPACITY; i++) {
61
55
  n48.child_index[i] = Node::EMPTY_MARKER;
62
56
  }
@@ -82,8 +76,6 @@ Node48 &Node48::ShrinkNode256(ART &art, Node &node48, Node &node256) {
82
76
  auto &n256 = Node256::Get(art, node256);
83
77
 
84
78
  n48.count = 0;
85
- n48.prefix.Move(n256.prefix);
86
-
87
79
  for (idx_t i = 0; i < Node::NODE_256_CAPACITY; i++) {
88
80
  D_ASSERT(n48.count <= Node::NODE_48_CAPACITY);
89
81
  if (n256.children[i].IsSet()) {
@@ -188,7 +180,6 @@ BlockPointer Node48::Serialize(ART &art, MetaBlockWriter &writer) {
188
180
  auto block_pointer = writer.GetBlockPointer();
189
181
  writer.Write(NType::NODE_48);
190
182
  writer.Write<uint8_t>(count);
191
- prefix.Serialize(art, writer);
192
183
 
193
184
  // write key values
194
185
  for (idx_t i = 0; i < Node::NODE_256_CAPACITY; i++) {
@@ -204,10 +195,9 @@ BlockPointer Node48::Serialize(ART &art, MetaBlockWriter &writer) {
204
195
  return block_pointer;
205
196
  }
206
197
 
207
- void Node48::Deserialize(ART &art, MetaBlockReader &reader) {
198
+ void Node48::Deserialize(MetaBlockReader &reader) {
208
199
 
209
200
  count = reader.Read<uint8_t>();
210
- prefix.Deserialize(art, reader);
211
201
 
212
202
  // read key values
213
203
  for (idx_t i = 0; i < Node::NODE_256_CAPACITY; i++) {