duckdb 0.8.0 → 0.8.1-dev111.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 (556) hide show
  1. package/package.json +1 -1
  2. package/src/duckdb/extension/icu/icu-datepart.cpp +1 -1
  3. package/src/duckdb/extension/json/include/json_common.hpp +1 -1
  4. package/src/duckdb/extension/json/include/json_executors.hpp +1 -1
  5. package/src/duckdb/extension/json/json_functions/json_create.cpp +6 -6
  6. package/src/duckdb/extension/json/json_functions/json_merge_patch.cpp +1 -1
  7. package/src/duckdb/extension/json/json_functions/json_transform.cpp +1 -1
  8. package/src/duckdb/extension/parquet/column_reader.cpp +57 -52
  9. package/src/duckdb/extension/parquet/column_writer.cpp +57 -45
  10. package/src/duckdb/extension/parquet/include/cast_column_reader.hpp +1 -1
  11. package/src/duckdb/extension/parquet/include/column_reader.hpp +5 -4
  12. package/src/duckdb/extension/parquet/include/column_writer.hpp +24 -0
  13. package/src/duckdb/extension/parquet/include/decode_utils.hpp +6 -0
  14. package/src/duckdb/extension/parquet/include/list_column_reader.hpp +1 -1
  15. package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +4 -4
  16. package/src/duckdb/extension/parquet/include/parquet_rle_bp_decoder.hpp +4 -5
  17. package/src/duckdb/extension/parquet/include/resizable_buffer.hpp +4 -4
  18. package/src/duckdb/extension/parquet/include/row_number_column_reader.hpp +1 -1
  19. package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +1 -1
  20. package/src/duckdb/extension/parquet/parquet-extension.cpp +1 -1
  21. package/src/duckdb/extension/parquet/parquet_metadata.cpp +1 -1
  22. package/src/duckdb/extension/parquet/parquet_reader.cpp +18 -18
  23. package/src/duckdb/extension/parquet/parquet_statistics.cpp +23 -26
  24. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +2 -2
  25. package/src/duckdb/extension/parquet/parquet_writer.cpp +3 -3
  26. package/src/duckdb/extension/parquet/zstd_file_system.cpp +3 -3
  27. package/src/duckdb/src/catalog/catalog.cpp +0 -4
  28. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +3 -0
  29. package/src/duckdb/src/catalog/catalog_entry.cpp +4 -4
  30. package/src/duckdb/src/catalog/catalog_set.cpp +1 -1
  31. package/src/duckdb/src/catalog/dependency_manager.cpp +2 -2
  32. package/src/duckdb/src/catalog/duck_catalog.cpp +1 -0
  33. package/src/duckdb/src/common/adbc/adbc.cpp +183 -94
  34. package/src/duckdb/src/common/adbc/driver_manager.cpp +10 -2
  35. package/src/duckdb/src/common/arrow/arrow_appender.cpp +12 -12
  36. package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +7 -7
  37. package/src/duckdb/src/common/checksum.cpp +1 -1
  38. package/src/duckdb/src/common/compressed_file_system.cpp +6 -6
  39. package/src/duckdb/src/common/crypto/md5.cpp +9 -9
  40. package/src/duckdb/src/common/field_writer.cpp +1 -1
  41. package/src/duckdb/src/common/file_system.cpp +15 -2
  42. package/src/duckdb/src/common/fsst.cpp +11 -6
  43. package/src/duckdb/src/common/gzip_file_system.cpp +8 -8
  44. package/src/duckdb/src/common/hive_partitioning.cpp +1 -1
  45. package/src/duckdb/src/common/local_file_system.cpp +11 -11
  46. package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
  47. package/src/duckdb/src/common/pipe_file_system.cpp +2 -2
  48. package/src/duckdb/src/common/radix_partitioning.cpp +2 -2
  49. package/src/duckdb/src/common/row_operations/row_heap_gather.cpp +1 -1
  50. package/src/duckdb/src/common/row_operations/row_heap_scatter.cpp +5 -5
  51. package/src/duckdb/src/common/row_operations/row_match.cpp +1 -1
  52. package/src/duckdb/src/common/row_operations/row_radix_scatter.cpp +2 -2
  53. package/src/duckdb/src/common/row_operations/row_scatter.cpp +4 -4
  54. package/src/duckdb/src/common/serializer/binary_deserializer.cpp +1 -1
  55. package/src/duckdb/src/common/serializer/binary_serializer.cpp +3 -3
  56. package/src/duckdb/src/common/serializer.cpp +1 -1
  57. package/src/duckdb/src/common/sort/comparators.cpp +1 -1
  58. package/src/duckdb/src/common/sort/merge_sorter.cpp +7 -2
  59. package/src/duckdb/src/common/sort/partition_state.cpp +2 -2
  60. package/src/duckdb/src/common/types/bit.cpp +5 -5
  61. package/src/duckdb/src/common/types/blob.cpp +8 -8
  62. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +4 -4
  63. package/src/duckdb/src/common/types/column/column_data_collection.cpp +3 -3
  64. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +1 -1
  65. package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
  66. package/src/duckdb/src/common/types/hash.cpp +2 -2
  67. package/src/duckdb/src/common/types/hyperloglog.cpp +22 -21
  68. package/src/duckdb/src/common/types/list_segment.cpp +77 -49
  69. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +1 -1
  70. package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +5 -3
  71. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +17 -17
  72. package/src/duckdb/src/common/types/string_heap.cpp +1 -1
  73. package/src/duckdb/src/common/types/value.cpp +2 -2
  74. package/src/duckdb/src/common/types/vector.cpp +101 -101
  75. package/src/duckdb/src/common/types/vector_cache.cpp +6 -6
  76. package/src/duckdb/src/common/types/vector_constants.cpp +2 -1
  77. package/src/duckdb/src/common/types.cpp +44 -33
  78. package/src/duckdb/src/common/vector_operations/boolean_operators.cpp +2 -2
  79. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +12 -12
  80. package/src/duckdb/src/common/vector_operations/vector_hash.cpp +13 -11
  81. package/src/duckdb/src/common/vector_operations/vector_storage.cpp +1 -1
  82. package/src/duckdb/src/core_functions/aggregate/algebraic/avg.cpp +30 -33
  83. package/src/duckdb/src/core_functions/aggregate/algebraic/covar.cpp +0 -4
  84. package/src/duckdb/src/core_functions/aggregate/distributive/approx_count.cpp +32 -36
  85. package/src/duckdb/src/core_functions/aggregate/distributive/arg_min_max.cpp +53 -66
  86. package/src/duckdb/src/core_functions/aggregate/distributive/bitagg.cpp +48 -48
  87. package/src/duckdb/src/core_functions/aggregate/distributive/bitstring_agg.cpp +43 -43
  88. package/src/duckdb/src/core_functions/aggregate/distributive/bool.cpp +32 -32
  89. package/src/duckdb/src/core_functions/aggregate/distributive/entropy.cpp +34 -34
  90. package/src/duckdb/src/core_functions/aggregate/distributive/kurtosis.cpp +30 -31
  91. package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +91 -103
  92. package/src/duckdb/src/core_functions/aggregate/distributive/product.cpp +17 -17
  93. package/src/duckdb/src/core_functions/aggregate/distributive/skew.cpp +25 -27
  94. package/src/duckdb/src/core_functions/aggregate/distributive/string_agg.cpp +36 -37
  95. package/src/duckdb/src/core_functions/aggregate/distributive/sum.cpp +22 -22
  96. package/src/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp +48 -84
  97. package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +49 -51
  98. package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +83 -119
  99. package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +62 -99
  100. package/src/duckdb/src/core_functions/aggregate/nested/histogram.cpp +24 -26
  101. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +22 -23
  102. package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +16 -18
  103. package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +22 -25
  104. package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +19 -24
  105. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +18 -23
  106. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +14 -18
  107. package/src/duckdb/src/core_functions/scalar/blob/base64.cpp +1 -1
  108. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +45 -45
  109. package/src/duckdb/src/core_functions/scalar/date/strftime.cpp +2 -2
  110. package/src/duckdb/src/core_functions/scalar/generic/current_setting.cpp +1 -1
  111. package/src/duckdb/src/core_functions/scalar/generic/least.cpp +2 -2
  112. package/src/duckdb/src/core_functions/scalar/generic/stats.cpp +1 -1
  113. package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +3 -3
  114. package/src/duckdb/src/core_functions/scalar/list/flatten.cpp +2 -4
  115. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +3 -3
  116. package/src/duckdb/src/core_functions/scalar/list/list_lambdas.cpp +6 -7
  117. package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +1 -1
  118. package/src/duckdb/src/core_functions/scalar/map/cardinality.cpp +1 -1
  119. package/src/duckdb/src/core_functions/scalar/map/map.cpp +2 -2
  120. package/src/duckdb/src/core_functions/scalar/map/map_concat.cpp +1 -1
  121. package/src/duckdb/src/core_functions/scalar/map/map_extract.cpp +5 -9
  122. package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +3 -3
  123. package/src/duckdb/src/core_functions/scalar/string/starts_with.cpp +3 -2
  124. package/src/duckdb/src/core_functions/scalar/string/string_split.cpp +4 -4
  125. package/src/duckdb/src/core_functions/scalar/string/trim.cpp +1 -1
  126. package/src/duckdb/src/core_functions/scalar/union/union_extract.cpp +1 -1
  127. package/src/duckdb/src/execution/adaptive_filter.cpp +1 -1
  128. package/src/duckdb/src/execution/expression_executor/execute_case.cpp +10 -10
  129. package/src/duckdb/src/execution/expression_executor/execute_conjunction.cpp +7 -7
  130. package/src/duckdb/src/execution/expression_executor.cpp +33 -28
  131. package/src/duckdb/src/execution/index/art/art.cpp +30 -32
  132. package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +3 -4
  133. package/src/duckdb/src/execution/join_hashtable.cpp +4 -4
  134. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_inner.cpp +4 -4
  135. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_mark.cpp +2 -2
  136. package/src/duckdb/src/execution/operator/aggregate/distinct_aggregate_data.cpp +1 -1
  137. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +1 -1
  138. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +2 -2
  139. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +4 -4
  140. package/src/duckdb/src/execution/operator/filter/physical_filter.cpp +1 -1
  141. package/src/duckdb/src/execution/operator/join/outer_join_marker.cpp +1 -1
  142. package/src/duckdb/src/execution/operator/join/perfect_hash_join_executor.cpp +1 -1
  143. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +2 -2
  144. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +4 -4
  145. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +3 -3
  146. package/src/duckdb/src/execution/operator/join/physical_nested_loop_join.cpp +3 -3
  147. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +3 -3
  148. package/src/duckdb/src/execution/operator/order/physical_top_n.cpp +1 -1
  149. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +2 -2
  150. package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +2 -2
  151. package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +2 -0
  152. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -3
  153. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
  154. package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -2
  155. package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +1 -1
  156. package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +3 -3
  157. package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +2 -1
  158. package/src/duckdb/src/execution/operator/scan/physical_expression_scan.cpp +1 -1
  159. package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +2 -2
  160. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +1 -1
  161. package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +1 -1
  162. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +1 -1
  163. package/src/duckdb/src/execution/physical_plan/plan_create_table.cpp +1 -1
  164. package/src/duckdb/src/execution/physical_plan_generator.cpp +2 -2
  165. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +1 -1
  166. package/src/duckdb/src/execution/reservoir_sample.cpp +2 -2
  167. package/src/duckdb/src/execution/window_segment_tree.cpp +8 -6
  168. package/src/duckdb/src/function/aggregate/distributive/count.cpp +158 -20
  169. package/src/duckdb/src/function/aggregate/distributive/first.cpp +66 -74
  170. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +13 -13
  171. package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
  172. package/src/duckdb/src/function/cast/decimal_cast.cpp +1 -1
  173. package/src/duckdb/src/function/cast/enum_casts.cpp +2 -2
  174. package/src/duckdb/src/function/cast/string_cast.cpp +11 -11
  175. package/src/duckdb/src/function/cast/union_casts.cpp +2 -2
  176. package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +3 -2
  177. package/src/duckdb/src/function/scalar/generic/constant_or_null.cpp +1 -1
  178. package/src/duckdb/src/function/scalar/list/list_concat.cpp +2 -2
  179. package/src/duckdb/src/function/scalar/list/list_extract.cpp +3 -3
  180. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +2 -3
  181. package/src/duckdb/src/function/scalar/string/concat.cpp +8 -7
  182. package/src/duckdb/src/function/scalar/string/contains.cpp +4 -4
  183. package/src/duckdb/src/function/scalar/string/like.cpp +5 -5
  184. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +4 -4
  185. package/src/duckdb/src/function/scalar/string/regexp.cpp +3 -3
  186. package/src/duckdb/src/function/scalar/string/strip_accents.cpp +1 -1
  187. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +1 -1
  188. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +25 -23
  189. package/src/duckdb/src/function/scalar_function.cpp +3 -3
  190. package/src/duckdb/src/function/table/arrow.cpp +4 -4
  191. package/src/duckdb/src/function/table/arrow_conversion.cpp +67 -61
  192. package/src/duckdb/src/function/table/checkpoint.cpp +1 -1
  193. package/src/duckdb/src/function/table/copy_csv.cpp +11 -7
  194. package/src/duckdb/src/function/table/glob.cpp +1 -1
  195. package/src/duckdb/src/function/table/pragma_last_profiling_output.cpp +1 -1
  196. package/src/duckdb/src/function/table/range.cpp +4 -4
  197. package/src/duckdb/src/function/table/read_csv.cpp +4 -7
  198. package/src/duckdb/src/function/table/repeat.cpp +2 -2
  199. package/src/duckdb/src/function/table/repeat_row.cpp +2 -2
  200. package/src/duckdb/src/function/table/system/duckdb_functions.cpp +1 -1
  201. package/src/duckdb/src/function/table/system/test_vector_types.cpp +1 -1
  202. package/src/duckdb/src/function/table/table_scan.cpp +2 -2
  203. package/src/duckdb/src/function/table/unnest.cpp +1 -1
  204. package/src/duckdb/src/function/table/version/pragma_version.cpp +3 -3
  205. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +2 -2
  206. package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +2 -2
  207. package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +5 -0
  208. package/src/duckdb/src/include/duckdb/common/allocator.hpp +15 -4
  209. package/src/duckdb/src/include/duckdb/common/arrow/arrow_buffer.hpp +7 -2
  210. package/src/duckdb/src/include/duckdb/common/crypto/md5.hpp +2 -2
  211. package/src/duckdb/src/include/duckdb/common/exception.hpp +2 -2
  212. package/src/duckdb/src/include/duckdb/common/field_writer.hpp +3 -3
  213. package/src/duckdb/src/include/duckdb/common/file_system.hpp +11 -0
  214. package/src/duckdb/src/include/duckdb/common/fsst.hpp +2 -3
  215. package/src/duckdb/src/include/duckdb/common/radix.hpp +3 -3
  216. package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +1 -1
  217. package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +4 -1
  218. package/src/duckdb/src/include/duckdb/common/serializer.hpp +4 -4
  219. package/src/duckdb/src/include/duckdb/common/typedefs.hpp +30 -0
  220. package/src/duckdb/src/include/duckdb/common/types/column/partitioned_column_data.hpp +12 -0
  221. package/src/duckdb/src/include/duckdb/common/types/hyperloglog.hpp +6 -2
  222. package/src/duckdb/src/include/duckdb/common/types/null_value.hpp +1 -1
  223. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +12 -0
  224. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +10 -10
  225. package/src/duckdb/src/include/duckdb/common/types/value.hpp +1 -1
  226. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +9 -0
  227. package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +18 -6
  228. package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +112 -76
  229. package/src/duckdb/src/include/duckdb/common/vector_operations/binary_executor.hpp +16 -15
  230. package/src/duckdb/src/include/duckdb/common/vector_operations/generic_executor.hpp +11 -11
  231. package/src/duckdb/src/include/duckdb/common/vector_operations/ternary_executor.hpp +23 -19
  232. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +3 -3
  233. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +20 -24
  234. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +36 -39
  235. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/stddev.hpp +57 -53
  236. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +8 -9
  237. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +16 -18
  238. package/src/duckdb/src/include/duckdb/core_functions/aggregate/sum_helpers.hpp +7 -8
  239. package/src/duckdb/src/include/duckdb/execution/expression_executor_state.hpp +14 -2
  240. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -3
  241. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_result_collector.hpp +3 -0
  242. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_buffer.hpp +1 -1
  243. package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +5 -2
  244. package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +12 -12
  245. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +8 -29
  246. package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +95 -0
  247. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +13 -2
  248. package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +4 -4
  249. package/src/duckdb/src/include/duckdb/function/compression_function.hpp +44 -0
  250. package/src/duckdb/src/include/duckdb/function/copy_function.hpp +6 -6
  251. package/src/duckdb/src/include/duckdb/function/function.hpp +3 -3
  252. package/src/duckdb/src/include/duckdb/function/macro_function.hpp +2 -2
  253. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +3 -3
  254. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
  255. package/src/duckdb/src/include/duckdb/function/table_function.hpp +6 -6
  256. package/src/duckdb/src/include/duckdb/main/capi/cast/utils.hpp +1 -1
  257. package/src/duckdb/src/include/duckdb/main/materialized_query_result.hpp +3 -0
  258. package/src/duckdb/src/include/duckdb/main/pending_query_result.hpp +3 -0
  259. package/src/duckdb/src/include/duckdb/main/query_result.hpp +17 -0
  260. package/src/duckdb/src/include/duckdb/main/relation.hpp +12 -0
  261. package/src/duckdb/src/include/duckdb/main/stream_query_result.hpp +3 -0
  262. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  263. package/src/duckdb/src/include/duckdb/parser/base_expression.hpp +6 -12
  264. package/src/duckdb/src/include/duckdb/parser/constraint.hpp +2 -2
  265. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +1 -1
  266. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +1 -1
  267. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +1 -1
  268. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +1 -1
  269. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +1 -1
  270. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +1 -1
  271. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +1 -1
  272. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +1 -1
  273. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +1 -1
  274. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +1 -1
  275. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +1 -1
  276. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +1 -1
  277. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +1 -1
  278. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +1 -1
  279. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +1 -1
  280. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +1 -1
  281. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +1 -1
  282. package/src/duckdb/src/include/duckdb/parser/expression_map.hpp +1 -1
  283. package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +2 -2
  284. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -1
  285. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -2
  286. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +36 -5
  287. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +7 -4
  288. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +1 -1
  289. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +1 -1
  290. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +1 -1
  291. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +1 -1
  292. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +1 -1
  293. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +1 -1
  294. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +1 -1
  295. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +1 -1
  296. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +4 -3
  297. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +107 -91
  298. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +1 -1
  299. package/src/duckdb/src/include/duckdb/planner/bound_constraint.hpp +2 -2
  300. package/src/duckdb/src/include/duckdb/planner/bound_query_node.hpp +2 -2
  301. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +34 -1
  302. package/src/duckdb/src/include/duckdb/planner/bound_tableref.hpp +2 -2
  303. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +1 -1
  304. package/src/duckdb/src/include/duckdb/planner/expression/bound_between_expression.hpp +1 -1
  305. package/src/duckdb/src/include/duckdb/planner/expression/bound_case_expression.hpp +1 -1
  306. package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +1 -1
  307. package/src/duckdb/src/include/duckdb/planner/expression/bound_columnref_expression.hpp +1 -1
  308. package/src/duckdb/src/include/duckdb/planner/expression/bound_comparison_expression.hpp +1 -1
  309. package/src/duckdb/src/include/duckdb/planner/expression/bound_conjunction_expression.hpp +1 -1
  310. package/src/duckdb/src/include/duckdb/planner/expression/bound_constant_expression.hpp +1 -1
  311. package/src/duckdb/src/include/duckdb/planner/expression/bound_function_expression.hpp +1 -1
  312. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambda_expression.hpp +1 -1
  313. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambdaref_expression.hpp +1 -1
  314. package/src/duckdb/src/include/duckdb/planner/expression/bound_operator_expression.hpp +1 -1
  315. package/src/duckdb/src/include/duckdb/planner/expression/bound_parameter_expression.hpp +1 -1
  316. package/src/duckdb/src/include/duckdb/planner/expression/bound_reference_expression.hpp +1 -1
  317. package/src/duckdb/src/include/duckdb/planner/expression/bound_subquery_expression.hpp +1 -1
  318. package/src/duckdb/src/include/duckdb/planner/expression/bound_unnest_expression.hpp +1 -1
  319. package/src/duckdb/src/include/duckdb/planner/expression/bound_window_expression.hpp +1 -1
  320. package/src/duckdb/src/include/duckdb/planner/expression.hpp +5 -7
  321. package/src/duckdb/src/include/duckdb/planner/filter/conjunction_filter.hpp +6 -0
  322. package/src/duckdb/src/include/duckdb/planner/filter/constant_filter.hpp +3 -0
  323. package/src/duckdb/src/include/duckdb/planner/filter/null_filter.hpp +6 -0
  324. package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +2 -2
  325. package/src/duckdb/src/include/duckdb/planner/operator/logical_pivot.hpp +3 -0
  326. package/src/duckdb/src/include/duckdb/planner/table_binding.hpp +26 -0
  327. package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +17 -0
  328. package/src/duckdb/src/include/duckdb/planner/tableref/bound_pivotref.hpp +3 -0
  329. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_analyze.hpp +1 -1
  330. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
  331. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_analyze.hpp +2 -2
  332. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
  333. package/src/duckdb/src/include/duckdb/storage/index.hpp +2 -2
  334. package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +1 -1
  335. package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +12 -0
  336. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +1 -1
  337. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +25 -2
  338. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +12 -0
  339. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +22 -0
  340. package/src/duckdb/src/include/duckdb/transaction/duck_transaction_manager.hpp +2 -2
  341. package/src/duckdb/src/include/duckdb/transaction/transaction.hpp +2 -2
  342. package/src/duckdb/src/main/capi/appender-c.cpp +5 -5
  343. package/src/duckdb/src/main/capi/arrow-c.cpp +10 -10
  344. package/src/duckdb/src/main/capi/cast/from_decimal-c.cpp +1 -1
  345. package/src/duckdb/src/main/capi/cast/utils-c.cpp +1 -1
  346. package/src/duckdb/src/main/capi/config-c.cpp +1 -1
  347. package/src/duckdb/src/main/capi/data_chunk-c.cpp +17 -17
  348. package/src/duckdb/src/main/capi/duckdb-c.cpp +4 -4
  349. package/src/duckdb/src/main/capi/duckdb_value-c.cpp +4 -4
  350. package/src/duckdb/src/main/capi/logical_types-c.cpp +22 -21
  351. package/src/duckdb/src/main/capi/pending-c.cpp +6 -6
  352. package/src/duckdb/src/main/capi/prepared-c.cpp +10 -10
  353. package/src/duckdb/src/main/capi/replacement_scan-c.cpp +6 -6
  354. package/src/duckdb/src/main/capi/result-c.cpp +23 -23
  355. package/src/duckdb/src/main/capi/table_function-c.cpp +1 -1
  356. package/src/duckdb/src/main/client_context.cpp +3 -3
  357. package/src/duckdb/src/main/database_manager.cpp +1 -1
  358. package/src/duckdb/src/main/error_manager.cpp +1 -1
  359. package/src/duckdb/src/main/extension/extension_load.cpp +1 -1
  360. package/src/duckdb/src/main/relation/create_table_relation.cpp +1 -1
  361. package/src/duckdb/src/main/relation/create_view_relation.cpp +1 -1
  362. package/src/duckdb/src/main/relation/delete_relation.cpp +1 -1
  363. package/src/duckdb/src/main/relation/explain_relation.cpp +1 -1
  364. package/src/duckdb/src/main/relation/insert_relation.cpp +1 -1
  365. package/src/duckdb/src/main/relation/update_relation.cpp +1 -1
  366. package/src/duckdb/src/main/relation/write_csv_relation.cpp +1 -1
  367. package/src/duckdb/src/main/relation/write_parquet_relation.cpp +1 -1
  368. package/src/duckdb/src/main/relation.cpp +1 -1
  369. package/src/duckdb/src/optimizer/deliminator.cpp +12 -12
  370. package/src/duckdb/src/optimizer/expression_heuristics.cpp +1 -0
  371. package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -3
  372. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +10 -10
  373. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +4 -7
  374. package/src/duckdb/src/optimizer/matcher/expression_matcher.cpp +1 -1
  375. package/src/duckdb/src/optimizer/pullup/pullup_projection.cpp +2 -2
  376. package/src/duckdb/src/optimizer/regex_range_filter.cpp +2 -4
  377. package/src/duckdb/src/optimizer/rule/distributivity.cpp +2 -2
  378. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +6 -6
  379. package/src/duckdb/src/optimizer/statistics/operator/propagate_get.cpp +2 -2
  380. package/src/duckdb/src/parallel/executor.cpp +1 -1
  381. package/src/duckdb/src/parser/base_expression.cpp +2 -5
  382. package/src/duckdb/src/parser/expression/between_expression.cpp +4 -4
  383. package/src/duckdb/src/parser/expression/case_expression.cpp +6 -6
  384. package/src/duckdb/src/parser/expression/cast_expression.cpp +4 -4
  385. package/src/duckdb/src/parser/expression/collate_expression.cpp +3 -3
  386. package/src/duckdb/src/parser/expression/columnref_expression.cpp +4 -4
  387. package/src/duckdb/src/parser/expression/comparison_expression.cpp +3 -3
  388. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +2 -2
  389. package/src/duckdb/src/parser/expression/constant_expression.cpp +2 -2
  390. package/src/duckdb/src/parser/expression/function_expression.cpp +10 -14
  391. package/src/duckdb/src/parser/expression/lambda_expression.cpp +2 -2
  392. package/src/duckdb/src/parser/expression/operator_expression.cpp +4 -4
  393. package/src/duckdb/src/parser/expression/parameter_expression.cpp +2 -2
  394. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +3 -3
  395. package/src/duckdb/src/parser/expression/star_expression.cpp +9 -9
  396. package/src/duckdb/src/parser/expression/subquery_expression.cpp +5 -5
  397. package/src/duckdb/src/parser/expression/window_expression.cpp +13 -24
  398. package/src/duckdb/src/parser/parsed_expression.cpp +34 -18
  399. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +4 -4
  400. package/src/duckdb/src/parser/parser.cpp +3 -3
  401. package/src/duckdb/src/parser/query_node/select_node.cpp +6 -13
  402. package/src/duckdb/src/parser/query_node.cpp +7 -6
  403. package/src/duckdb/src/parser/result_modifier.cpp +25 -18
  404. package/src/duckdb/src/parser/statement/select_statement.cpp +3 -3
  405. package/src/duckdb/src/parser/tableref/basetableref.cpp +4 -4
  406. package/src/duckdb/src/parser/tableref/emptytableref.cpp +1 -1
  407. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +5 -5
  408. package/src/duckdb/src/parser/tableref/joinref.cpp +6 -6
  409. package/src/duckdb/src/parser/tableref/pivotref.cpp +10 -15
  410. package/src/duckdb/src/parser/tableref/subqueryref.cpp +3 -3
  411. package/src/duckdb/src/parser/tableref/table_function.cpp +3 -3
  412. package/src/duckdb/src/parser/tableref.cpp +12 -3
  413. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +7 -7
  414. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +4 -4
  415. package/src/duckdb/src/parser/transform/expression/transform_boolean_test.cpp +4 -4
  416. package/src/duckdb/src/parser/transform/expression/transform_case.cpp +8 -10
  417. package/src/duckdb/src/parser/transform/expression/transform_cast.cpp +7 -9
  418. package/src/duckdb/src/parser/transform/expression/transform_coalesce.cpp +3 -5
  419. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +22 -22
  420. package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +2 -2
  421. package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +42 -44
  422. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +70 -75
  423. package/src/duckdb/src/parser/transform/expression/transform_grouping_function.cpp +4 -4
  424. package/src/duckdb/src/parser/transform/expression/transform_interval.cpp +7 -7
  425. package/src/duckdb/src/parser/transform/expression/transform_is_null.cpp +4 -5
  426. package/src/duckdb/src/parser/transform/expression/transform_lambda.cpp +5 -6
  427. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +28 -29
  428. package/src/duckdb/src/parser/transform/expression/transform_param_ref.cpp +13 -14
  429. package/src/duckdb/src/parser/transform/expression/transform_positional_reference.cpp +4 -4
  430. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +9 -10
  431. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +28 -32
  432. package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +18 -18
  433. package/src/duckdb/src/parser/transform/helpers/transform_sample.cpp +3 -3
  434. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +27 -26
  435. package/src/duckdb/src/parser/transform/statement/transform_alter_sequence.cpp +11 -14
  436. package/src/duckdb/src/parser/transform/statement/transform_alter_table.cpp +14 -16
  437. package/src/duckdb/src/parser/transform/statement/transform_attach.cpp +8 -9
  438. package/src/duckdb/src/parser/transform/statement/transform_call.cpp +2 -5
  439. package/src/duckdb/src/parser/transform/statement/transform_checkpoint.cpp +4 -6
  440. package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +22 -23
  441. package/src/duckdb/src/parser/transform/statement/transform_create_database.cpp +3 -4
  442. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +14 -18
  443. package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +13 -15
  444. package/src/duckdb/src/parser/transform/statement/transform_create_schema.cpp +8 -10
  445. package/src/duckdb/src/parser/transform/statement/transform_create_sequence.cpp +8 -10
  446. package/src/duckdb/src/parser/transform/statement/transform_create_table.cpp +26 -28
  447. package/src/duckdb/src/parser/transform/statement/transform_create_table_as.cpp +8 -10
  448. package/src/duckdb/src/parser/transform/statement/transform_create_type.cpp +12 -15
  449. package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +13 -18
  450. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +11 -13
  451. package/src/duckdb/src/parser/transform/statement/transform_detach.cpp +3 -4
  452. package/src/duckdb/src/parser/transform/statement/transform_drop.cpp +20 -22
  453. package/src/duckdb/src/parser/transform/statement/transform_explain.cpp +5 -7
  454. package/src/duckdb/src/parser/transform/statement/transform_export.cpp +5 -6
  455. package/src/duckdb/src/parser/transform/statement/transform_import.cpp +2 -3
  456. package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +21 -24
  457. package/src/duckdb/src/parser/transform/statement/transform_load.cpp +4 -5
  458. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -7
  459. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +7 -9
  460. package/src/duckdb/src/parser/transform/statement/transform_prepare.cpp +11 -19
  461. package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +12 -14
  462. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +12 -9
  463. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +34 -34
  464. package/src/duckdb/src/parser/transform/statement/transform_set.cpp +18 -19
  465. package/src/duckdb/src/parser/transform/statement/transform_show.cpp +5 -7
  466. package/src/duckdb/src/parser/transform/statement/transform_show_select.cpp +4 -5
  467. package/src/duckdb/src/parser/transform/statement/transform_transaction.cpp +3 -5
  468. package/src/duckdb/src/parser/transform/statement/transform_update.cpp +10 -13
  469. package/src/duckdb/src/parser/transform/statement/transform_upsert.cpp +4 -4
  470. package/src/duckdb/src/parser/transform/statement/transform_use.cpp +2 -3
  471. package/src/duckdb/src/parser/transform/statement/transform_vacuum.cpp +6 -10
  472. package/src/duckdb/src/parser/transform/tableref/transform_base_tableref.cpp +18 -18
  473. package/src/duckdb/src/parser/transform/tableref/transform_from.cpp +5 -5
  474. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +11 -11
  475. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +27 -27
  476. package/src/duckdb/src/parser/transform/tableref/transform_subquery.cpp +5 -5
  477. package/src/duckdb/src/parser/transform/tableref/transform_table_function.cpp +13 -12
  478. package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +8 -8
  479. package/src/duckdb/src/parser/transformer.cpp +46 -46
  480. package/src/duckdb/src/planner/bind_context.cpp +6 -6
  481. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +1 -1
  482. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +1 -1
  483. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +1 -1
  484. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +6 -3
  485. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +8 -8
  486. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +4 -4
  487. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +13 -5
  488. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +2 -2
  489. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +1 -1
  490. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +1 -1
  491. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +14 -7
  492. package/src/duckdb/src/planner/binder.cpp +1 -1
  493. package/src/duckdb/src/planner/bound_result_modifier.cpp +16 -11
  494. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +5 -5
  495. package/src/duckdb/src/planner/expression/bound_between_expression.cpp +5 -5
  496. package/src/duckdb/src/planner/expression/bound_case_expression.cpp +5 -5
  497. package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +3 -3
  498. package/src/duckdb/src/planner/expression/bound_columnref_expression.cpp +2 -2
  499. package/src/duckdb/src/planner/expression/bound_comparison_expression.cpp +4 -4
  500. package/src/duckdb/src/planner/expression/bound_conjunction_expression.cpp +2 -2
  501. package/src/duckdb/src/planner/expression/bound_constant_expression.cpp +2 -2
  502. package/src/duckdb/src/planner/expression/bound_expression.cpp +1 -1
  503. package/src/duckdb/src/planner/expression/bound_function_expression.cpp +3 -4
  504. package/src/duckdb/src/planner/expression/bound_lambda_expression.cpp +4 -5
  505. package/src/duckdb/src/planner/expression/bound_lambdaref_expression.cpp +2 -2
  506. package/src/duckdb/src/planner/expression/bound_operator_expression.cpp +3 -4
  507. package/src/duckdb/src/planner/expression/bound_parameter_expression.cpp +2 -2
  508. package/src/duckdb/src/planner/expression/bound_reference_expression.cpp +2 -2
  509. package/src/duckdb/src/planner/expression/bound_subquery_expression.cpp +1 -1
  510. package/src/duckdb/src/planner/expression/bound_unnest_expression.cpp +3 -3
  511. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +8 -21
  512. package/src/duckdb/src/planner/expression.cpp +15 -0
  513. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +2 -2
  514. package/src/duckdb/src/planner/expression_iterator.cpp +2 -2
  515. package/src/duckdb/src/planner/filter/conjunction_filter.cpp +2 -2
  516. package/src/duckdb/src/planner/filter/constant_filter.cpp +1 -1
  517. package/src/duckdb/src/planner/logical_operator.cpp +3 -4
  518. package/src/duckdb/src/planner/logical_operator_visitor.cpp +1 -1
  519. package/src/duckdb/src/planner/table_filter.cpp +1 -1
  520. package/src/duckdb/src/storage/arena_allocator.cpp +2 -2
  521. package/src/duckdb/src/storage/buffer/block_handle.cpp +1 -1
  522. package/src/duckdb/src/storage/checkpoint/write_overflow_strings_to_disk.cpp +2 -2
  523. package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -3
  524. package/src/duckdb/src/storage/compression/bitpacking.cpp +8 -8
  525. package/src/duckdb/src/storage/compression/dictionary_compression.cpp +36 -36
  526. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +11 -11
  527. package/src/duckdb/src/storage/compression/fsst.cpp +34 -34
  528. package/src/duckdb/src/storage/compression/rle.cpp +8 -8
  529. package/src/duckdb/src/storage/compression/string_uncompressed.cpp +13 -13
  530. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +11 -11
  531. package/src/duckdb/src/storage/data_table.cpp +2 -2
  532. package/src/duckdb/src/storage/index.cpp +1 -3
  533. package/src/duckdb/src/storage/local_storage.cpp +2 -1
  534. package/src/duckdb/src/storage/magic_bytes.cpp +1 -1
  535. package/src/duckdb/src/storage/single_file_block_manager.cpp +3 -3
  536. package/src/duckdb/src/storage/standard_buffer_manager.cpp +3 -3
  537. package/src/duckdb/src/storage/statistics/list_stats.cpp +1 -1
  538. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +1 -1
  539. package/src/duckdb/src/storage/statistics/string_stats.cpp +15 -14
  540. package/src/duckdb/src/storage/table/chunk_info.cpp +2 -2
  541. package/src/duckdb/src/storage/table/column_segment.cpp +3 -3
  542. package/src/duckdb/src/storage/table/list_column_data.cpp +8 -7
  543. package/src/duckdb/src/storage/table/row_group.cpp +4 -4
  544. package/src/duckdb/src/storage/table/standard_column_data.cpp +1 -1
  545. package/src/duckdb/src/storage/table/update_segment.cpp +12 -12
  546. package/src/duckdb/src/storage/wal_replay.cpp +1 -1
  547. package/src/duckdb/src/transaction/cleanup_state.cpp +3 -3
  548. package/src/duckdb/src/transaction/commit_state.cpp +8 -8
  549. package/src/duckdb/src/transaction/duck_transaction.cpp +9 -7
  550. package/src/duckdb/src/transaction/duck_transaction_manager.cpp +16 -16
  551. package/src/duckdb/src/transaction/rollback_state.cpp +3 -3
  552. package/src/duckdb/src/verification/prepared_statement_verifier.cpp +1 -1
  553. package/src/duckdb/src/verification/statement_verifier.cpp +3 -4
  554. package/src/duckdb/third_party/hyperloglog/hyperloglog.hpp +2 -2
  555. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +13479 -13564
  556. package/src/duckdb/third_party/pcg/pcg_extras.hpp +1 -1
@@ -451,34 +451,34 @@ struct QuantileBindData : public FunctionData {
451
451
 
452
452
  struct QuantileOperation {
453
453
  template <class STATE>
454
- static void Initialize(STATE *state) {
455
- new (state) STATE;
454
+ static void Initialize(STATE &state) {
455
+ new (&state) STATE();
456
456
  }
457
457
 
458
458
  template <class INPUT_TYPE, class STATE, class OP>
459
- static void ConstantOperation(STATE *state, AggregateInputData &aggr_input_data, INPUT_TYPE *input,
460
- ValidityMask &mask, idx_t count) {
459
+ static void ConstantOperation(STATE &state, const INPUT_TYPE &input, AggregateUnaryInput &unary_input,
460
+ idx_t count) {
461
461
  for (idx_t i = 0; i < count; i++) {
462
- Operation<INPUT_TYPE, STATE, OP>(state, aggr_input_data, input, mask, 0);
462
+ Operation<INPUT_TYPE, STATE, OP>(state, input, unary_input);
463
463
  }
464
464
  }
465
465
 
466
466
  template <class INPUT_TYPE, class STATE, class OP>
467
- static void Operation(STATE *state, AggregateInputData &, INPUT_TYPE *data, ValidityMask &mask, idx_t idx) {
468
- state->v.emplace_back(data[idx]);
467
+ static void Operation(STATE &state, const INPUT_TYPE &input, AggregateUnaryInput &) {
468
+ state.v.emplace_back(input);
469
469
  }
470
470
 
471
471
  template <class STATE, class OP>
472
- static void Combine(const STATE &source, STATE *target, AggregateInputData &) {
472
+ static void Combine(const STATE &source, STATE &target, AggregateInputData &) {
473
473
  if (source.v.empty()) {
474
474
  return;
475
475
  }
476
- target->v.insert(target->v.end(), source.v.begin(), source.v.end());
476
+ target.v.insert(target.v.end(), source.v.begin(), source.v.end());
477
477
  }
478
478
 
479
479
  template <class STATE>
480
- static void Destroy(AggregateInputData &aggr_input_data, STATE *state) {
481
- state->~STATE();
480
+ static void Destroy(STATE &state, AggregateInputData &aggr_input_data) {
481
+ state.~STATE();
482
482
  }
483
483
 
484
484
  static bool IgnoreNull() {
@@ -486,69 +486,35 @@ struct QuantileOperation {
486
486
  }
487
487
  };
488
488
 
489
- template <class STATE_TYPE, class RESULT_TYPE, class OP>
490
- static void ExecuteListFinalize(Vector &states, AggregateInputData &aggr_input_data, Vector &result,
491
- idx_t count, // NOLINT
492
- idx_t offset) {
493
- D_ASSERT(result.GetType().id() == LogicalTypeId::LIST);
494
-
495
- D_ASSERT(aggr_input_data.bind_data);
496
- auto bind_data = (QuantileBindData *)aggr_input_data.bind_data;
497
-
498
- if (states.GetVectorType() == VectorType::CONSTANT_VECTOR) {
499
- result.SetVectorType(VectorType::CONSTANT_VECTOR);
500
- ListVector::Reserve(result, bind_data->quantiles.size());
501
-
502
- auto sdata = ConstantVector::GetData<STATE_TYPE *>(states);
503
- auto rdata = ConstantVector::GetData<RESULT_TYPE>(result);
504
- auto &mask = ConstantVector::Validity(result);
505
- OP::template Finalize<RESULT_TYPE, STATE_TYPE>(result, aggr_input_data, sdata[0], rdata, mask, 0);
506
- } else {
507
- D_ASSERT(states.GetVectorType() == VectorType::FLAT_VECTOR);
508
- result.SetVectorType(VectorType::FLAT_VECTOR);
509
- ListVector::Reserve(result, (offset + count) * bind_data->quantiles.size());
510
-
511
- auto sdata = FlatVector::GetData<STATE_TYPE *>(states);
512
- auto rdata = FlatVector::GetData<RESULT_TYPE>(result);
513
- auto &mask = FlatVector::Validity(result);
514
- for (idx_t i = 0; i < count; i++) {
515
- OP::template Finalize<RESULT_TYPE, STATE_TYPE>(result, aggr_input_data, sdata[i], rdata, mask, i + offset);
516
- }
517
- }
518
-
519
- result.Verify(count);
520
- }
521
-
522
489
  template <class STATE, class INPUT_TYPE, class RESULT_TYPE, class OP>
523
490
  static AggregateFunction QuantileListAggregate(const LogicalType &input_type, const LogicalType &child_type) { // NOLINT
524
491
  LogicalType result_type = LogicalType::LIST(child_type);
525
492
  return AggregateFunction(
526
493
  {input_type}, result_type, AggregateFunction::StateSize<STATE>, AggregateFunction::StateInitialize<STATE, OP>,
527
494
  AggregateFunction::UnaryScatterUpdate<STATE, INPUT_TYPE, OP>, AggregateFunction::StateCombine<STATE, OP>,
528
- ExecuteListFinalize<STATE, RESULT_TYPE, OP>, AggregateFunction::UnaryUpdate<STATE, INPUT_TYPE, OP>, nullptr,
529
- AggregateFunction::StateDestroy<STATE, OP>);
495
+ AggregateFunction::StateFinalize<STATE, RESULT_TYPE, OP>, AggregateFunction::UnaryUpdate<STATE, INPUT_TYPE, OP>,
496
+ nullptr, AggregateFunction::StateDestroy<STATE, OP>);
530
497
  }
531
498
 
532
499
  template <bool DISCRETE>
533
500
  struct QuantileScalarOperation : public QuantileOperation {
534
501
 
535
- template <class RESULT_TYPE, class STATE>
536
- static void Finalize(Vector &result, AggregateInputData &aggr_input_data, STATE *state, RESULT_TYPE *target,
537
- ValidityMask &mask, idx_t idx) {
538
- if (state->v.empty()) {
539
- mask.SetInvalid(idx);
502
+ template <class T, class STATE>
503
+ static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) {
504
+ if (state.v.empty()) {
505
+ finalize_data.ReturnNull();
540
506
  return;
541
507
  }
542
- D_ASSERT(aggr_input_data.bind_data);
543
- auto bind_data = (QuantileBindData *)aggr_input_data.bind_data;
544
- D_ASSERT(bind_data->quantiles.size() == 1);
545
- Interpolator<DISCRETE> interp(bind_data->quantiles[0], state->v.size(), bind_data->desc);
546
- target[idx] = interp.template Operation<typename STATE::SaveType, RESULT_TYPE>(state->v.data(), result);
508
+ D_ASSERT(finalize_data.input.bind_data);
509
+ auto &bind_data = finalize_data.input.bind_data->Cast<QuantileBindData>();
510
+ D_ASSERT(bind_data.quantiles.size() == 1);
511
+ Interpolator<DISCRETE> interp(bind_data.quantiles[0], state.v.size(), bind_data.desc);
512
+ target = interp.template Operation<typename STATE::SaveType, T>(state.v.data(), finalize_data.result);
547
513
  }
548
514
 
549
515
  template <class STATE, class INPUT_TYPE, class RESULT_TYPE>
550
516
  static void Window(const INPUT_TYPE *data, const ValidityMask &fmask, const ValidityMask &dmask,
551
- AggregateInputData &aggr_input_data, STATE *state, const FrameBounds &frame,
517
+ AggregateInputData &aggr_input_data, STATE &state, const FrameBounds &frame,
552
518
  const FrameBounds &prev, Vector &result, idx_t ridx, idx_t bias) {
553
519
  auto rdata = FlatVector::GetData<RESULT_TYPE>(result);
554
520
  auto &rmask = FlatVector::Validity(result);
@@ -556,17 +522,17 @@ struct QuantileScalarOperation : public QuantileOperation {
556
522
  QuantileIncluded included(fmask, dmask, bias);
557
523
 
558
524
  // Lazily initialise frame state
559
- auto prev_pos = state->pos;
560
- state->SetPos(frame.second - frame.first);
525
+ auto prev_pos = state.pos;
526
+ state.SetPos(frame.second - frame.first);
561
527
 
562
- auto index = state->w.data();
528
+ auto index = state.w.data();
563
529
  D_ASSERT(index);
564
530
 
565
531
  D_ASSERT(aggr_input_data.bind_data);
566
- auto bind_data = (QuantileBindData *)aggr_input_data.bind_data;
532
+ auto &bind_data = aggr_input_data.bind_data->Cast<QuantileBindData>();
567
533
 
568
534
  // Find the two positions needed
569
- const auto q = bind_data->quantiles[0];
535
+ const auto q = bind_data.quantiles[0];
570
536
 
571
537
  bool replace = false;
572
538
  if (frame.first == prev.first + 1 && frame.second == prev.second + 1) {
@@ -577,7 +543,7 @@ struct QuantileScalarOperation : public QuantileOperation {
577
543
  Interpolator<DISCRETE> interp(q, prev_pos, false);
578
544
  replace = CanReplace(index, data, j, interp.FRN, interp.CRN, included);
579
545
  if (replace) {
580
- state->pos = prev_pos;
546
+ state.pos = prev_pos;
581
547
  }
582
548
  }
583
549
  } else {
@@ -586,10 +552,10 @@ struct QuantileScalarOperation : public QuantileOperation {
586
552
 
587
553
  if (!replace && !included.AllValid()) {
588
554
  // Remove the NULLs
589
- state->pos = std::partition(index, index + state->pos, included) - index;
555
+ state.pos = std::partition(index, index + state.pos, included) - index;
590
556
  }
591
- if (state->pos) {
592
- Interpolator<DISCRETE> interp(q, state->pos, false);
557
+ if (state.pos) {
558
+ Interpolator<DISCRETE> interp(q, state.pos, false);
593
559
 
594
560
  using ID = QuantileIndirect<INPUT_TYPE>;
595
561
  ID indirect(data);
@@ -661,46 +627,45 @@ AggregateFunction GetDiscreteQuantileAggregateFunction(const LogicalType &type)
661
627
  template <class CHILD_TYPE, bool DISCRETE>
662
628
  struct QuantileListOperation : public QuantileOperation {
663
629
 
664
- template <class RESULT_TYPE, class STATE>
665
- static void Finalize(Vector &result_list, AggregateInputData &aggr_input_data, STATE *state, RESULT_TYPE *target,
666
- ValidityMask &mask, idx_t idx) {
667
- if (state->v.empty()) {
668
- mask.SetInvalid(idx);
630
+ template <class T, class STATE>
631
+ static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) {
632
+ if (state.v.empty()) {
633
+ finalize_data.ReturnNull();
669
634
  return;
670
635
  }
671
636
 
672
- D_ASSERT(aggr_input_data.bind_data);
673
- auto bind_data = (QuantileBindData *)aggr_input_data.bind_data;
637
+ D_ASSERT(finalize_data.input.bind_data);
638
+ auto &bind_data = finalize_data.input.bind_data->Cast<QuantileBindData>();
674
639
 
675
- auto &result = ListVector::GetEntry(result_list);
676
- auto ridx = ListVector::GetListSize(result_list);
677
- ListVector::Reserve(result_list, ridx + bind_data->quantiles.size());
640
+ auto &result = ListVector::GetEntry(finalize_data.result);
641
+ auto ridx = ListVector::GetListSize(finalize_data.result);
642
+ ListVector::Reserve(finalize_data.result, ridx + bind_data.quantiles.size());
678
643
  auto rdata = FlatVector::GetData<CHILD_TYPE>(result);
679
644
 
680
- auto v_t = state->v.data();
645
+ auto v_t = state.v.data();
681
646
  D_ASSERT(v_t);
682
647
 
683
- auto &entry = target[idx];
648
+ auto &entry = target;
684
649
  entry.offset = ridx;
685
650
  idx_t lower = 0;
686
- for (const auto &q : bind_data->order) {
687
- const auto &quantile = bind_data->quantiles[q];
688
- Interpolator<DISCRETE> interp(quantile, state->v.size(), bind_data->desc);
651
+ for (const auto &q : bind_data.order) {
652
+ const auto &quantile = bind_data.quantiles[q];
653
+ Interpolator<DISCRETE> interp(quantile, state.v.size(), bind_data.desc);
689
654
  interp.begin = lower;
690
655
  rdata[ridx + q] = interp.template Operation<typename STATE::SaveType, CHILD_TYPE>(v_t, result);
691
656
  lower = interp.FRN;
692
657
  }
693
- entry.length = bind_data->quantiles.size();
658
+ entry.length = bind_data.quantiles.size();
694
659
 
695
- ListVector::SetListSize(result_list, entry.offset + entry.length);
660
+ ListVector::SetListSize(finalize_data.result, entry.offset + entry.length);
696
661
  }
697
662
 
698
663
  template <class STATE, class INPUT_TYPE, class RESULT_TYPE>
699
664
  static void Window(const INPUT_TYPE *data, const ValidityMask &fmask, const ValidityMask &dmask,
700
- AggregateInputData &aggr_input_data, STATE *state, const FrameBounds &frame,
665
+ AggregateInputData &aggr_input_data, STATE &state, const FrameBounds &frame,
701
666
  const FrameBounds &prev, Vector &list, idx_t lidx, idx_t bias) {
702
667
  D_ASSERT(aggr_input_data.bind_data);
703
- auto bind_data = (QuantileBindData *)aggr_input_data.bind_data;
668
+ auto &bind_data = aggr_input_data.bind_data->Cast<QuantileBindData>();
704
669
 
705
670
  QuantileIncluded included(fmask, dmask, bias);
706
671
 
@@ -709,7 +674,7 @@ struct QuantileListOperation : public QuantileOperation {
709
674
  auto &lmask = FlatVector::Validity(list);
710
675
  auto &lentry = ldata[lidx];
711
676
  lentry.offset = ListVector::GetListSize(list);
712
- lentry.length = bind_data->quantiles.size();
677
+ lentry.length = bind_data.quantiles.size();
713
678
 
714
679
  ListVector::Reserve(list, lentry.offset + lentry.length);
715
680
  ListVector::SetListSize(list, lentry.offset + lentry.length);
@@ -717,10 +682,10 @@ struct QuantileListOperation : public QuantileOperation {
717
682
  auto rdata = FlatVector::GetData<CHILD_TYPE>(result);
718
683
 
719
684
  // Lazily initialise frame state
720
- auto prev_pos = state->pos;
721
- state->SetPos(frame.second - frame.first);
685
+ auto prev_pos = state.pos;
686
+ state.SetPos(frame.second - frame.first);
722
687
 
723
- auto index = state->w.data();
688
+ auto index = state.w.data();
724
689
 
725
690
  // We can generalise replacement for quantile lists by observing that when a replacement is
726
691
  // valid for a single quantile, it is valid for all quantiles greater/less than that quantile
@@ -728,14 +693,14 @@ struct QuantileListOperation : public QuantileOperation {
728
693
  // So if a replaced index in an IQR is located between Q25 and Q50, but has a value below Q25,
729
694
  // then Q25 must be recomputed, but Q50 and Q75 are unaffected.
730
695
  // For a single element list, this reduces to the scalar case.
731
- std::pair<idx_t, idx_t> replaceable {state->pos, 0};
696
+ std::pair<idx_t, idx_t> replaceable {state.pos, 0};
732
697
  if (frame.first == prev.first + 1 && frame.second == prev.second + 1) {
733
698
  // Fixed frame size
734
699
  const auto j = ReplaceIndex(index, frame, prev);
735
700
  // We can only replace if the number of NULLs has not changed
736
701
  if (included.AllValid() || included(prev.first) == included(prev.second)) {
737
- for (const auto &q : bind_data->order) {
738
- const auto &quantile = bind_data->quantiles[q];
702
+ for (const auto &q : bind_data.order) {
703
+ const auto &quantile = bind_data.quantiles[q];
739
704
  Interpolator<DISCRETE> interp(quantile, prev_pos, false);
740
705
  const auto replace = CanReplace(index, data, j, interp.FRN, interp.CRN, included);
741
706
  if (replace < 0) {
@@ -750,7 +715,7 @@ struct QuantileListOperation : public QuantileOperation {
750
715
  }
751
716
  }
752
717
  if (replaceable.first < replaceable.second) {
753
- state->pos = prev_pos;
718
+ state.pos = prev_pos;
754
719
  }
755
720
  }
756
721
  } else {
@@ -759,15 +724,15 @@ struct QuantileListOperation : public QuantileOperation {
759
724
 
760
725
  if (replaceable.first >= replaceable.second && !included.AllValid()) {
761
726
  // Remove the NULLs
762
- state->pos = std::partition(index, index + state->pos, included) - index;
727
+ state.pos = std::partition(index, index + state.pos, included) - index;
763
728
  }
764
729
 
765
- if (state->pos) {
730
+ if (state.pos) {
766
731
  using ID = QuantileIndirect<INPUT_TYPE>;
767
732
  ID indirect(data);
768
- for (const auto &q : bind_data->order) {
769
- const auto &quantile = bind_data->quantiles[q];
770
- Interpolator<DISCRETE> interp(quantile, state->pos, false);
733
+ for (const auto &q : bind_data.order) {
734
+ const auto &quantile = bind_data.quantiles[q];
735
+ Interpolator<DISCRETE> interp(quantile, state.pos, false);
771
736
  if (replaceable.first <= interp.FRN && interp.CRN <= replaceable.second) {
772
737
  rdata[lentry.offset + q] = interp.template Replace<idx_t, CHILD_TYPE, ID>(index, result, indirect);
773
738
  } else {
@@ -1035,24 +1000,23 @@ struct MadAccessor<dtime_t, interval_t, dtime_t> {
1035
1000
  template <typename MEDIAN_TYPE>
1036
1001
  struct MedianAbsoluteDeviationOperation : public QuantileOperation {
1037
1002
 
1038
- template <class RESULT_TYPE, class STATE>
1039
- static void Finalize(Vector &result, AggregateInputData &, STATE *state, RESULT_TYPE *target, ValidityMask &mask,
1040
- idx_t idx) {
1041
- if (state->v.empty()) {
1042
- mask.SetInvalid(idx);
1003
+ template <class T, class STATE>
1004
+ static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) {
1005
+ if (state.v.empty()) {
1006
+ finalize_data.ReturnNull();
1043
1007
  return;
1044
1008
  }
1045
1009
  using SAVE_TYPE = typename STATE::SaveType;
1046
- Interpolator<false> interp(0.5, state->v.size(), false);
1047
- const auto med = interp.template Operation<SAVE_TYPE, MEDIAN_TYPE>(state->v.data(), result);
1010
+ Interpolator<false> interp(0.5, state.v.size(), false);
1011
+ const auto med = interp.template Operation<SAVE_TYPE, MEDIAN_TYPE>(state.v.data(), finalize_data.result);
1048
1012
 
1049
- MadAccessor<SAVE_TYPE, RESULT_TYPE, MEDIAN_TYPE> accessor(med);
1050
- target[idx] = interp.template Operation<SAVE_TYPE, RESULT_TYPE>(state->v.data(), result, accessor);
1013
+ MadAccessor<SAVE_TYPE, T, MEDIAN_TYPE> accessor(med);
1014
+ target = interp.template Operation<SAVE_TYPE, T>(state.v.data(), finalize_data.result, accessor);
1051
1015
  }
1052
1016
 
1053
1017
  template <class STATE, class INPUT_TYPE, class RESULT_TYPE>
1054
1018
  static void Window(const INPUT_TYPE *data, const ValidityMask &fmask, const ValidityMask &dmask,
1055
- AggregateInputData &, STATE *state, const FrameBounds &frame, const FrameBounds &prev,
1019
+ AggregateInputData &, STATE &state, const FrameBounds &frame, const FrameBounds &prev,
1056
1020
  Vector &result, idx_t ridx, idx_t bias) {
1057
1021
  auto rdata = FlatVector::GetData<RESULT_TYPE>(result);
1058
1022
  auto &rmask = FlatVector::Validity(result);
@@ -1060,25 +1024,25 @@ struct MedianAbsoluteDeviationOperation : public QuantileOperation {
1060
1024
  QuantileIncluded included(fmask, dmask, bias);
1061
1025
 
1062
1026
  // Lazily initialise frame state
1063
- auto prev_pos = state->pos;
1064
- state->SetPos(frame.second - frame.first);
1027
+ auto prev_pos = state.pos;
1028
+ state.SetPos(frame.second - frame.first);
1065
1029
 
1066
- auto index = state->w.data();
1030
+ auto index = state.w.data();
1067
1031
  D_ASSERT(index);
1068
1032
 
1069
1033
  // We need a second index for the second pass.
1070
- if (state->pos > state->m.size()) {
1071
- state->m.resize(state->pos);
1034
+ if (state.pos > state.m.size()) {
1035
+ state.m.resize(state.pos);
1072
1036
  }
1073
1037
 
1074
- auto index2 = state->m.data();
1038
+ auto index2 = state.m.data();
1075
1039
  D_ASSERT(index2);
1076
1040
 
1077
1041
  // The replacement trick does not work on the second index because if
1078
1042
  // the median has changed, the previous order is not correct.
1079
1043
  // It is probably close, however, and so reuse is helpful.
1080
1044
  ReuseIndexes(index2, frame, prev);
1081
- std::partition(index2, index2 + state->pos, included);
1045
+ std::partition(index2, index2 + state.pos, included);
1082
1046
 
1083
1047
  // Find the two positions needed for the median
1084
1048
  const float q = 0.5;
@@ -1092,7 +1056,7 @@ struct MedianAbsoluteDeviationOperation : public QuantileOperation {
1092
1056
  Interpolator<false> interp(q, prev_pos, false);
1093
1057
  replace = CanReplace(index, data, j, interp.FRN, interp.CRN, included);
1094
1058
  if (replace) {
1095
- state->pos = prev_pos;
1059
+ state.pos = prev_pos;
1096
1060
  }
1097
1061
  }
1098
1062
  } else {
@@ -1101,11 +1065,11 @@ struct MedianAbsoluteDeviationOperation : public QuantileOperation {
1101
1065
 
1102
1066
  if (!replace && !included.AllValid()) {
1103
1067
  // Remove the NULLs
1104
- state->pos = std::partition(index, index + state->pos, included) - index;
1068
+ state.pos = std::partition(index, index + state.pos, included) - index;
1105
1069
  }
1106
1070
 
1107
- if (state->pos) {
1108
- Interpolator<false> interp(q, state->pos, false);
1071
+ if (state.pos) {
1072
+ Interpolator<false> interp(q, state.pos, false);
1109
1073
 
1110
1074
  // Compute or replace median from the first index
1111
1075
  using ID = QuantileIndirect<INPUT_TYPE>;
@@ -66,9 +66,9 @@ struct ReservoirQuantileBindData : public FunctionData {
66
66
 
67
67
  static void Serialize(FieldWriter &writer, const FunctionData *bind_data_p, const AggregateFunction &function) {
68
68
  D_ASSERT(bind_data_p);
69
- auto bind_data = (ReservoirQuantileBindData *)bind_data_p;
70
- writer.WriteList<double>(bind_data->quantiles);
71
- writer.WriteField<int32_t>(bind_data->sample_size);
69
+ auto &bind_data = bind_data_p->Cast<ReservoirQuantileBindData>();
70
+ writer.WriteList<double>(bind_data.quantiles);
71
+ writer.WriteField<int32_t>(bind_data.sample_size);
72
72
  }
73
73
 
74
74
  static unique_ptr<FunctionData> Deserialize(ClientContext &context, FieldReader &reader,
@@ -84,61 +84,59 @@ struct ReservoirQuantileBindData : public FunctionData {
84
84
 
85
85
  struct ReservoirQuantileOperation {
86
86
  template <class STATE>
87
- static void Initialize(STATE *state) {
88
- state->v = nullptr;
89
- state->len = 0;
90
- state->pos = 0;
91
- state->r_samp = nullptr;
87
+ static void Initialize(STATE &state) {
88
+ state.v = nullptr;
89
+ state.len = 0;
90
+ state.pos = 0;
91
+ state.r_samp = nullptr;
92
92
  }
93
93
 
94
94
  template <class INPUT_TYPE, class STATE, class OP>
95
- static void ConstantOperation(STATE *state, AggregateInputData &aggr_input_data, INPUT_TYPE *input,
96
- ValidityMask &mask, idx_t count) {
95
+ static void ConstantOperation(STATE &state, const INPUT_TYPE &input, AggregateUnaryInput &unary_input,
96
+ idx_t count) {
97
97
  for (idx_t i = 0; i < count; i++) {
98
- Operation<INPUT_TYPE, STATE, OP>(state, aggr_input_data, input, mask, 0);
98
+ Operation<INPUT_TYPE, STATE, OP>(state, input, unary_input);
99
99
  }
100
100
  }
101
101
 
102
102
  template <class INPUT_TYPE, class STATE, class OP>
103
- static void Operation(STATE *state, AggregateInputData &aggr_input_data, INPUT_TYPE *data, ValidityMask &mask,
104
- idx_t idx) {
105
- auto bind_data = (ReservoirQuantileBindData *)aggr_input_data.bind_data;
106
- D_ASSERT(bind_data);
107
- if (state->pos == 0) {
108
- state->Resize(bind_data->sample_size);
103
+ static void Operation(STATE &state, const INPUT_TYPE &input, AggregateUnaryInput &unary_input) {
104
+ auto &bind_data = unary_input.input.bind_data->template Cast<ReservoirQuantileBindData>();
105
+ if (state.pos == 0) {
106
+ state.Resize(bind_data.sample_size);
109
107
  }
110
- if (!state->r_samp) {
111
- state->r_samp = new BaseReservoirSampling();
108
+ if (!state.r_samp) {
109
+ state.r_samp = new BaseReservoirSampling();
112
110
  }
113
- D_ASSERT(state->v);
114
- state->FillReservoir(bind_data->sample_size, data[idx]);
111
+ D_ASSERT(state.v);
112
+ state.FillReservoir(bind_data.sample_size, input);
115
113
  }
116
114
 
117
115
  template <class STATE, class OP>
118
- static void Combine(const STATE &source, STATE *target, AggregateInputData &) {
116
+ static void Combine(const STATE &source, STATE &target, AggregateInputData &) {
119
117
  if (source.pos == 0) {
120
118
  return;
121
119
  }
122
- if (target->pos == 0) {
123
- target->Resize(source.len);
120
+ if (target.pos == 0) {
121
+ target.Resize(source.len);
124
122
  }
125
- if (!target->r_samp) {
126
- target->r_samp = new BaseReservoirSampling();
123
+ if (!target.r_samp) {
124
+ target.r_samp = new BaseReservoirSampling();
127
125
  }
128
126
  for (idx_t src_idx = 0; src_idx < source.pos; src_idx++) {
129
- target->FillReservoir(target->len, source.v[src_idx]);
127
+ target.FillReservoir(target.len, source.v[src_idx]);
130
128
  }
131
129
  }
132
130
 
133
131
  template <class STATE>
134
- static void Destroy(AggregateInputData &aggr_input_data, STATE *state) {
135
- if (state->v) {
136
- free(state->v);
137
- state->v = nullptr;
132
+ static void Destroy(STATE &state, AggregateInputData &aggr_input_data) {
133
+ if (state.v) {
134
+ free(state.v);
135
+ state.v = nullptr;
138
136
  }
139
- if (state->r_samp) {
140
- delete state->r_samp;
141
- state->r_samp = nullptr;
137
+ if (state.r_samp) {
138
+ delete state.r_samp;
139
+ state.r_samp = nullptr;
142
140
  }
143
141
  }
144
142
 
@@ -148,21 +146,20 @@ struct ReservoirQuantileOperation {
148
146
  };
149
147
 
150
148
  struct ReservoirQuantileScalarOperation : public ReservoirQuantileOperation {
151
- template <class TARGET_TYPE, class STATE>
152
- static void Finalize(Vector &result, AggregateInputData &aggr_input_data, STATE *state, TARGET_TYPE *target,
153
- ValidityMask &mask, idx_t idx) {
154
- if (state->pos == 0) {
155
- mask.SetInvalid(idx);
149
+ template <class T, class STATE>
150
+ static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) {
151
+ if (state.pos == 0) {
152
+ finalize_data.ReturnNull();
156
153
  return;
157
154
  }
158
- D_ASSERT(state->v);
159
- D_ASSERT(aggr_input_data.bind_data);
160
- auto bind_data = (ReservoirQuantileBindData *)aggr_input_data.bind_data;
161
- auto v_t = state->v;
162
- D_ASSERT(bind_data->quantiles.size() == 1);
163
- auto offset = (idx_t)((double)(state->pos - 1) * bind_data->quantiles[0]);
164
- std::nth_element(v_t, v_t + offset, v_t + state->pos);
165
- target[idx] = v_t[offset];
155
+ D_ASSERT(state.v);
156
+ D_ASSERT(finalize_data.input.bind_data);
157
+ auto &bind_data = finalize_data.input.bind_data->template Cast<ReservoirQuantileBindData>();
158
+ auto v_t = state.v;
159
+ D_ASSERT(bind_data.quantiles.size() == 1);
160
+ auto offset = (idx_t)((double)(state.pos - 1) * bind_data.quantiles[0]);
161
+ std::nth_element(v_t, v_t + offset, v_t + state.pos);
162
+ target = v_t[offset];
166
163
  }
167
164
  };
168
165
 
@@ -207,69 +204,35 @@ AggregateFunction GetReservoirQuantileAggregateFunction(PhysicalType type) {
207
204
 
208
205
  template <class CHILD_TYPE>
209
206
  struct ReservoirQuantileListOperation : public ReservoirQuantileOperation {
210
-
211
- template <class RESULT_TYPE, class STATE>
212
- static void Finalize(Vector &result_list, AggregateInputData &aggr_input_data, STATE *state, RESULT_TYPE *target,
213
- ValidityMask &mask, idx_t idx) {
214
- if (state->pos == 0) {
215
- mask.SetInvalid(idx);
207
+ template <class T, class STATE>
208
+ static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) {
209
+ if (state.pos == 0) {
210
+ finalize_data.ReturnNull();
216
211
  return;
217
212
  }
218
213
 
219
- D_ASSERT(aggr_input_data.bind_data);
220
- auto bind_data = (ReservoirQuantileBindData *)aggr_input_data.bind_data;
214
+ D_ASSERT(finalize_data.input.bind_data);
215
+ auto &bind_data = finalize_data.input.bind_data->template Cast<ReservoirQuantileBindData>();
221
216
 
222
- auto &result = ListVector::GetEntry(result_list);
223
- auto ridx = ListVector::GetListSize(result_list);
224
- ListVector::Reserve(result_list, ridx + bind_data->quantiles.size());
217
+ auto &result = ListVector::GetEntry(finalize_data.result);
218
+ auto ridx = ListVector::GetListSize(finalize_data.result);
219
+ ListVector::Reserve(finalize_data.result, ridx + bind_data.quantiles.size());
225
220
  auto rdata = FlatVector::GetData<CHILD_TYPE>(result);
226
221
 
227
- auto v_t = state->v;
222
+ auto v_t = state.v;
228
223
  D_ASSERT(v_t);
229
224
 
230
- auto &entry = target[idx];
225
+ auto &entry = target;
231
226
  entry.offset = ridx;
232
- entry.length = bind_data->quantiles.size();
227
+ entry.length = bind_data.quantiles.size();
233
228
  for (size_t q = 0; q < entry.length; ++q) {
234
- const auto &quantile = bind_data->quantiles[q];
235
- auto offset = (idx_t)((double)(state->pos - 1) * quantile);
236
- std::nth_element(v_t, v_t + offset, v_t + state->pos);
229
+ const auto &quantile = bind_data.quantiles[q];
230
+ auto offset = (idx_t)((double)(state.pos - 1) * quantile);
231
+ std::nth_element(v_t, v_t + offset, v_t + state.pos);
237
232
  rdata[ridx + q] = v_t[offset];
238
233
  }
239
234
 
240
- ListVector::SetListSize(result_list, entry.offset + entry.length);
241
- }
242
-
243
- template <class STATE_TYPE, class RESULT_TYPE>
244
- static void FinalizeList(Vector &states, AggregateInputData &aggr_input_data, Vector &result, idx_t count, // NOLINT
245
- idx_t offset) {
246
- D_ASSERT(result.GetType().id() == LogicalTypeId::LIST);
247
-
248
- D_ASSERT(aggr_input_data.bind_data);
249
- auto bind_data = (ReservoirQuantileBindData *)aggr_input_data.bind_data;
250
-
251
- if (states.GetVectorType() == VectorType::CONSTANT_VECTOR) {
252
- result.SetVectorType(VectorType::CONSTANT_VECTOR);
253
- ListVector::Reserve(result, bind_data->quantiles.size());
254
-
255
- auto sdata = ConstantVector::GetData<STATE_TYPE *>(states);
256
- auto rdata = ConstantVector::GetData<RESULT_TYPE>(result);
257
- auto &mask = ConstantVector::Validity(result);
258
- Finalize<RESULT_TYPE, STATE_TYPE>(result, aggr_input_data, sdata[0], rdata, mask, 0);
259
- } else {
260
- D_ASSERT(states.GetVectorType() == VectorType::FLAT_VECTOR);
261
- result.SetVectorType(VectorType::FLAT_VECTOR);
262
- ListVector::Reserve(result, (offset + count) * bind_data->quantiles.size());
263
-
264
- auto sdata = FlatVector::GetData<STATE_TYPE *>(states);
265
- auto rdata = FlatVector::GetData<RESULT_TYPE>(result);
266
- auto &mask = FlatVector::Validity(result);
267
- for (idx_t i = 0; i < count; i++) {
268
- Finalize<RESULT_TYPE, STATE_TYPE>(result, aggr_input_data, sdata[i], rdata, mask, i + offset);
269
- }
270
- }
271
-
272
- result.Verify(count);
235
+ ListVector::SetListSize(finalize_data.result, entry.offset + entry.length);
273
236
  }
274
237
  };
275
238
 
@@ -279,8 +242,8 @@ static AggregateFunction ReservoirQuantileListAggregate(const LogicalType &input
279
242
  return AggregateFunction(
280
243
  {input_type}, result_type, AggregateFunction::StateSize<STATE>, AggregateFunction::StateInitialize<STATE, OP>,
281
244
  AggregateFunction::UnaryScatterUpdate<STATE, INPUT_TYPE, OP>, AggregateFunction::StateCombine<STATE, OP>,
282
- OP::template FinalizeList<STATE, RESULT_TYPE>, AggregateFunction::UnaryUpdate<STATE, INPUT_TYPE, OP>, nullptr,
283
- AggregateFunction::StateDestroy<STATE, OP>);
245
+ AggregateFunction::StateFinalize<STATE, RESULT_TYPE, OP>, AggregateFunction::UnaryUpdate<STATE, INPUT_TYPE, OP>,
246
+ nullptr, AggregateFunction::StateDestroy<STATE, OP>);
284
247
  }
285
248
 
286
249
  template <typename INPUT_TYPE, typename SAVE_TYPE>