duckdb 0.8.1-dev23.0 → 0.8.1-dev253.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 (596) hide show
  1. package/package.json +1 -1
  2. package/src/duckdb/extension/icu/icu-datepart.cpp +1 -1
  3. package/src/duckdb/extension/icu/icu-makedate.cpp +5 -4
  4. package/src/duckdb/extension/json/include/json_common.hpp +1 -1
  5. package/src/duckdb/extension/json/include/json_executors.hpp +1 -1
  6. package/src/duckdb/extension/json/json_functions/json_create.cpp +6 -6
  7. package/src/duckdb/extension/json/json_functions/json_merge_patch.cpp +1 -1
  8. package/src/duckdb/extension/json/json_functions/json_transform.cpp +1 -1
  9. package/src/duckdb/extension/json/json_functions.cpp +3 -0
  10. package/src/duckdb/extension/parquet/column_reader.cpp +57 -52
  11. package/src/duckdb/extension/parquet/column_writer.cpp +57 -45
  12. package/src/duckdb/extension/parquet/include/cast_column_reader.hpp +1 -1
  13. package/src/duckdb/extension/parquet/include/column_reader.hpp +5 -4
  14. package/src/duckdb/extension/parquet/include/column_writer.hpp +24 -0
  15. package/src/duckdb/extension/parquet/include/decode_utils.hpp +6 -0
  16. package/src/duckdb/extension/parquet/include/list_column_reader.hpp +1 -1
  17. package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +4 -4
  18. package/src/duckdb/extension/parquet/include/parquet_rle_bp_decoder.hpp +4 -5
  19. package/src/duckdb/extension/parquet/include/resizable_buffer.hpp +4 -4
  20. package/src/duckdb/extension/parquet/include/row_number_column_reader.hpp +1 -1
  21. package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +1 -1
  22. package/src/duckdb/extension/parquet/parquet-extension.cpp +1 -1
  23. package/src/duckdb/extension/parquet/parquet_metadata.cpp +1 -1
  24. package/src/duckdb/extension/parquet/parquet_reader.cpp +18 -18
  25. package/src/duckdb/extension/parquet/parquet_statistics.cpp +23 -26
  26. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +2 -2
  27. package/src/duckdb/extension/parquet/parquet_writer.cpp +3 -3
  28. package/src/duckdb/extension/parquet/zstd_file_system.cpp +3 -3
  29. package/src/duckdb/src/catalog/catalog.cpp +5 -17
  30. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +113 -0
  31. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +7 -0
  32. package/src/duckdb/src/catalog/catalog_entry.cpp +4 -4
  33. package/src/duckdb/src/catalog/catalog_search_path.cpp +49 -12
  34. package/src/duckdb/src/catalog/catalog_set.cpp +1 -1
  35. package/src/duckdb/src/catalog/default/default_types.cpp +9 -84
  36. package/src/duckdb/src/catalog/dependency_manager.cpp +2 -2
  37. package/src/duckdb/src/catalog/duck_catalog.cpp +1 -0
  38. package/src/duckdb/src/common/adbc/adbc.cpp +301 -106
  39. package/src/duckdb/src/common/adbc/driver_manager.cpp +10 -22
  40. package/src/duckdb/src/common/arrow/arrow_appender.cpp +12 -12
  41. package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +7 -7
  42. package/src/duckdb/src/common/checksum.cpp +1 -1
  43. package/src/duckdb/src/common/compressed_file_system.cpp +6 -6
  44. package/src/duckdb/src/common/crypto/md5.cpp +9 -9
  45. package/src/duckdb/src/common/exception.cpp +4 -1
  46. package/src/duckdb/src/common/exception_format_value.cpp +19 -14
  47. package/src/duckdb/src/common/field_writer.cpp +1 -1
  48. package/src/duckdb/src/common/file_system.cpp +15 -2
  49. package/src/duckdb/src/common/fsst.cpp +11 -6
  50. package/src/duckdb/src/common/gzip_file_system.cpp +8 -8
  51. package/src/duckdb/src/common/hive_partitioning.cpp +1 -1
  52. package/src/duckdb/src/common/local_file_system.cpp +11 -11
  53. package/src/duckdb/src/common/multi_file_reader.cpp +3 -0
  54. package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
  55. package/src/duckdb/src/common/pipe_file_system.cpp +2 -2
  56. package/src/duckdb/src/common/radix_partitioning.cpp +2 -2
  57. package/src/duckdb/src/common/row_operations/row_heap_gather.cpp +1 -1
  58. package/src/duckdb/src/common/row_operations/row_heap_scatter.cpp +5 -5
  59. package/src/duckdb/src/common/row_operations/row_match.cpp +1 -1
  60. package/src/duckdb/src/common/row_operations/row_radix_scatter.cpp +2 -2
  61. package/src/duckdb/src/common/row_operations/row_scatter.cpp +4 -4
  62. package/src/duckdb/src/common/serializer/binary_deserializer.cpp +1 -1
  63. package/src/duckdb/src/common/serializer/binary_serializer.cpp +3 -3
  64. package/src/duckdb/src/common/serializer.cpp +1 -1
  65. package/src/duckdb/src/common/sort/comparators.cpp +1 -1
  66. package/src/duckdb/src/common/sort/merge_sorter.cpp +7 -2
  67. package/src/duckdb/src/common/sort/partition_state.cpp +2 -2
  68. package/src/duckdb/src/common/types/bit.cpp +5 -5
  69. package/src/duckdb/src/common/types/blob.cpp +8 -8
  70. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +4 -4
  71. package/src/duckdb/src/common/types/column/column_data_collection.cpp +3 -3
  72. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +1 -1
  73. package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
  74. package/src/duckdb/src/common/types/hash.cpp +2 -2
  75. package/src/duckdb/src/common/types/hyperloglog.cpp +22 -21
  76. package/src/duckdb/src/common/types/list_segment.cpp +77 -49
  77. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +1 -1
  78. package/src/duckdb/src/common/types/row/row_data_collection_scanner.cpp +5 -4
  79. package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +5 -3
  80. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +61 -24
  81. package/src/duckdb/src/common/types/string_heap.cpp +1 -1
  82. package/src/duckdb/src/common/types/value.cpp +3 -2
  83. package/src/duckdb/src/common/types/vector.cpp +98 -101
  84. package/src/duckdb/src/common/types/vector_cache.cpp +6 -6
  85. package/src/duckdb/src/common/types/vector_constants.cpp +2 -1
  86. package/src/duckdb/src/common/types.cpp +44 -33
  87. package/src/duckdb/src/common/vector_operations/boolean_operators.cpp +2 -2
  88. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +12 -12
  89. package/src/duckdb/src/common/vector_operations/vector_hash.cpp +13 -11
  90. package/src/duckdb/src/common/vector_operations/vector_storage.cpp +1 -1
  91. package/src/duckdb/src/core_functions/aggregate/algebraic/avg.cpp +30 -33
  92. package/src/duckdb/src/core_functions/aggregate/algebraic/covar.cpp +0 -4
  93. package/src/duckdb/src/core_functions/aggregate/distributive/approx_count.cpp +32 -36
  94. package/src/duckdb/src/core_functions/aggregate/distributive/arg_min_max.cpp +53 -66
  95. package/src/duckdb/src/core_functions/aggregate/distributive/bitagg.cpp +48 -48
  96. package/src/duckdb/src/core_functions/aggregate/distributive/bitstring_agg.cpp +44 -44
  97. package/src/duckdb/src/core_functions/aggregate/distributive/bool.cpp +32 -32
  98. package/src/duckdb/src/core_functions/aggregate/distributive/entropy.cpp +34 -34
  99. package/src/duckdb/src/core_functions/aggregate/distributive/kurtosis.cpp +30 -31
  100. package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +91 -103
  101. package/src/duckdb/src/core_functions/aggregate/distributive/product.cpp +17 -17
  102. package/src/duckdb/src/core_functions/aggregate/distributive/skew.cpp +25 -27
  103. package/src/duckdb/src/core_functions/aggregate/distributive/string_agg.cpp +36 -37
  104. package/src/duckdb/src/core_functions/aggregate/distributive/sum.cpp +22 -22
  105. package/src/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp +48 -84
  106. package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +49 -51
  107. package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +97 -121
  108. package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +62 -99
  109. package/src/duckdb/src/core_functions/aggregate/nested/histogram.cpp +24 -26
  110. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +22 -23
  111. package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +16 -18
  112. package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +22 -25
  113. package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +19 -24
  114. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +18 -23
  115. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +14 -18
  116. package/src/duckdb/src/core_functions/function_list.cpp +1 -0
  117. package/src/duckdb/src/core_functions/scalar/blob/base64.cpp +1 -1
  118. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +45 -45
  119. package/src/duckdb/src/core_functions/scalar/date/strftime.cpp +2 -2
  120. package/src/duckdb/src/core_functions/scalar/generic/current_setting.cpp +1 -1
  121. package/src/duckdb/src/core_functions/scalar/generic/least.cpp +2 -2
  122. package/src/duckdb/src/core_functions/scalar/generic/stats.cpp +1 -1
  123. package/src/duckdb/src/core_functions/scalar/generic/system_functions.cpp +14 -0
  124. package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +3 -3
  125. package/src/duckdb/src/core_functions/scalar/list/flatten.cpp +2 -4
  126. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +3 -3
  127. package/src/duckdb/src/core_functions/scalar/list/list_lambdas.cpp +6 -7
  128. package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +1 -1
  129. package/src/duckdb/src/core_functions/scalar/map/cardinality.cpp +1 -1
  130. package/src/duckdb/src/core_functions/scalar/map/map.cpp +2 -2
  131. package/src/duckdb/src/core_functions/scalar/map/map_concat.cpp +4 -1
  132. package/src/duckdb/src/core_functions/scalar/map/map_extract.cpp +5 -9
  133. package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +3 -3
  134. package/src/duckdb/src/core_functions/scalar/string/starts_with.cpp +3 -2
  135. package/src/duckdb/src/core_functions/scalar/string/string_split.cpp +4 -4
  136. package/src/duckdb/src/core_functions/scalar/string/trim.cpp +1 -1
  137. package/src/duckdb/src/core_functions/scalar/union/union_extract.cpp +1 -1
  138. package/src/duckdb/src/execution/adaptive_filter.cpp +1 -1
  139. package/src/duckdb/src/execution/expression_executor/execute_case.cpp +10 -10
  140. package/src/duckdb/src/execution/expression_executor/execute_conjunction.cpp +7 -7
  141. package/src/duckdb/src/execution/expression_executor.cpp +28 -28
  142. package/src/duckdb/src/execution/index/art/art.cpp +30 -32
  143. package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +3 -4
  144. package/src/duckdb/src/execution/join_hashtable.cpp +4 -4
  145. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_inner.cpp +4 -4
  146. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_mark.cpp +2 -2
  147. package/src/duckdb/src/execution/operator/aggregate/distinct_aggregate_data.cpp +1 -1
  148. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +1 -1
  149. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +2 -2
  150. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +4 -4
  151. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +7 -5
  152. package/src/duckdb/src/execution/operator/filter/physical_filter.cpp +1 -1
  153. package/src/duckdb/src/execution/operator/helper/physical_reset.cpp +5 -2
  154. package/src/duckdb/src/execution/operator/helper/physical_set.cpp +5 -1
  155. package/src/duckdb/src/execution/operator/join/outer_join_marker.cpp +1 -1
  156. package/src/duckdb/src/execution/operator/join/perfect_hash_join_executor.cpp +1 -1
  157. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +2 -2
  158. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +4 -4
  159. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +3 -3
  160. package/src/duckdb/src/execution/operator/join/physical_nested_loop_join.cpp +3 -3
  161. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +3 -3
  162. package/src/duckdb/src/execution/operator/order/physical_top_n.cpp +1 -1
  163. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +2 -2
  164. package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +2 -2
  165. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -3
  166. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
  167. package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -2
  168. package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +1 -1
  169. package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +3 -3
  170. package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +2 -1
  171. package/src/duckdb/src/execution/operator/scan/physical_expression_scan.cpp +1 -1
  172. package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +2 -2
  173. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +1 -1
  174. package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +1 -1
  175. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +1 -1
  176. package/src/duckdb/src/execution/physical_plan/plan_create_table.cpp +1 -1
  177. package/src/duckdb/src/execution/physical_plan_generator.cpp +2 -2
  178. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +1 -1
  179. package/src/duckdb/src/execution/reservoir_sample.cpp +2 -2
  180. package/src/duckdb/src/execution/window_segment_tree.cpp +8 -6
  181. package/src/duckdb/src/function/aggregate/distributive/count.cpp +158 -20
  182. package/src/duckdb/src/function/aggregate/distributive/first.cpp +66 -74
  183. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +13 -13
  184. package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
  185. package/src/duckdb/src/function/cast/decimal_cast.cpp +1 -1
  186. package/src/duckdb/src/function/cast/enum_casts.cpp +2 -2
  187. package/src/duckdb/src/function/cast/list_casts.cpp +2 -4
  188. package/src/duckdb/src/function/cast/string_cast.cpp +11 -11
  189. package/src/duckdb/src/function/cast/union_casts.cpp +2 -2
  190. package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +3 -2
  191. package/src/duckdb/src/function/pragma/pragma_queries.cpp +33 -23
  192. package/src/duckdb/src/function/scalar/generic/constant_or_null.cpp +1 -1
  193. package/src/duckdb/src/function/scalar/list/list_concat.cpp +2 -2
  194. package/src/duckdb/src/function/scalar/list/list_extract.cpp +3 -3
  195. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +2 -3
  196. package/src/duckdb/src/function/scalar/string/concat.cpp +8 -7
  197. package/src/duckdb/src/function/scalar/string/contains.cpp +4 -4
  198. package/src/duckdb/src/function/scalar/string/like.cpp +5 -5
  199. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +4 -4
  200. package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +6 -2
  201. package/src/duckdb/src/function/scalar/string/regexp.cpp +3 -3
  202. package/src/duckdb/src/function/scalar/string/strip_accents.cpp +1 -1
  203. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +1 -1
  204. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +25 -23
  205. package/src/duckdb/src/function/scalar_function.cpp +3 -3
  206. package/src/duckdb/src/function/table/arrow.cpp +6 -6
  207. package/src/duckdb/src/function/table/arrow_conversion.cpp +67 -61
  208. package/src/duckdb/src/function/table/checkpoint.cpp +1 -1
  209. package/src/duckdb/src/function/table/copy_csv.cpp +11 -7
  210. package/src/duckdb/src/function/table/glob.cpp +1 -1
  211. package/src/duckdb/src/function/table/pragma_last_profiling_output.cpp +1 -1
  212. package/src/duckdb/src/function/table/range.cpp +4 -4
  213. package/src/duckdb/src/function/table/read_csv.cpp +15 -20
  214. package/src/duckdb/src/function/table/repeat.cpp +2 -2
  215. package/src/duckdb/src/function/table/repeat_row.cpp +10 -3
  216. package/src/duckdb/src/function/table/system/duckdb_functions.cpp +1 -1
  217. package/src/duckdb/src/function/table/system/test_vector_types.cpp +1 -1
  218. package/src/duckdb/src/function/table/table_scan.cpp +2 -2
  219. package/src/duckdb/src/function/table/unnest.cpp +1 -1
  220. package/src/duckdb/src/function/table/version/pragma_version.cpp +3 -3
  221. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +2 -5
  222. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +2 -0
  223. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_catalog_entry.hpp +6 -0
  224. package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +2 -2
  225. package/src/duckdb/src/include/duckdb/catalog/catalog_search_path.hpp +8 -2
  226. package/src/duckdb/src/include/duckdb/catalog/default/builtin_types/types.hpp +97 -0
  227. package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +5 -0
  228. package/src/duckdb/src/include/duckdb/common/allocator.hpp +15 -4
  229. package/src/duckdb/src/include/duckdb/common/arrow/arrow_buffer.hpp +7 -2
  230. package/src/duckdb/src/include/duckdb/common/crypto/md5.hpp +2 -2
  231. package/src/duckdb/src/include/duckdb/common/exception.hpp +5 -2
  232. package/src/duckdb/src/include/duckdb/common/field_writer.hpp +3 -3
  233. package/src/duckdb/src/include/duckdb/common/file_system.hpp +11 -0
  234. package/src/duckdb/src/include/duckdb/common/fsst.hpp +2 -3
  235. package/src/duckdb/src/include/duckdb/common/radix.hpp +3 -3
  236. package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +1 -1
  237. package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +4 -1
  238. package/src/duckdb/src/include/duckdb/common/serializer.hpp +4 -4
  239. package/src/duckdb/src/include/duckdb/common/typedefs.hpp +30 -0
  240. package/src/duckdb/src/include/duckdb/common/types/column/partitioned_column_data.hpp +12 -0
  241. package/src/duckdb/src/include/duckdb/common/types/hyperloglog.hpp +6 -2
  242. package/src/duckdb/src/include/duckdb/common/types/null_value.hpp +1 -1
  243. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +12 -0
  244. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +10 -10
  245. package/src/duckdb/src/include/duckdb/common/types/value.hpp +1 -1
  246. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +9 -0
  247. package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +18 -6
  248. package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +112 -76
  249. package/src/duckdb/src/include/duckdb/common/vector_operations/binary_executor.hpp +16 -15
  250. package/src/duckdb/src/include/duckdb/common/vector_operations/generic_executor.hpp +11 -11
  251. package/src/duckdb/src/include/duckdb/common/vector_operations/ternary_executor.hpp +23 -19
  252. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +3 -3
  253. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +20 -24
  254. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +36 -39
  255. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/stddev.hpp +57 -53
  256. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +8 -9
  257. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +16 -18
  258. package/src/duckdb/src/include/duckdb/core_functions/aggregate/sum_helpers.hpp +7 -8
  259. package/src/duckdb/src/include/duckdb/core_functions/scalar/generic_functions.hpp +9 -0
  260. package/src/duckdb/src/include/duckdb/core_functions/scalar/map_functions.hpp +2 -6
  261. package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +16 -36
  262. package/src/duckdb/src/include/duckdb/execution/expression_executor_state.hpp +14 -2
  263. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -3
  264. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_result_collector.hpp +3 -0
  265. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_buffer.hpp +1 -1
  266. package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +5 -2
  267. package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +12 -12
  268. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +8 -29
  269. package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +95 -0
  270. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +13 -2
  271. package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +4 -4
  272. package/src/duckdb/src/include/duckdb/function/compression_function.hpp +44 -0
  273. package/src/duckdb/src/include/duckdb/function/copy_function.hpp +6 -6
  274. package/src/duckdb/src/include/duckdb/function/function.hpp +3 -3
  275. package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +3 -1
  276. package/src/duckdb/src/include/duckdb/function/macro_function.hpp +2 -2
  277. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +3 -3
  278. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
  279. package/src/duckdb/src/include/duckdb/function/table_function.hpp +8 -7
  280. package/src/duckdb/src/include/duckdb/main/capi/cast/utils.hpp +1 -1
  281. package/src/duckdb/src/include/duckdb/main/config.hpp +2 -0
  282. package/src/duckdb/src/include/duckdb/main/materialized_query_result.hpp +3 -0
  283. package/src/duckdb/src/include/duckdb/main/pending_query_result.hpp +3 -0
  284. package/src/duckdb/src/include/duckdb/main/query_result.hpp +17 -0
  285. package/src/duckdb/src/include/duckdb/main/relation.hpp +12 -0
  286. package/src/duckdb/src/include/duckdb/main/settings.hpp +9 -0
  287. package/src/duckdb/src/include/duckdb/main/stream_query_result.hpp +3 -0
  288. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  289. package/src/duckdb/src/include/duckdb/parser/base_expression.hpp +6 -12
  290. package/src/duckdb/src/include/duckdb/parser/constraint.hpp +2 -2
  291. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +1 -1
  292. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +1 -1
  293. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +1 -1
  294. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +1 -1
  295. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +1 -1
  296. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +1 -1
  297. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +1 -1
  298. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +1 -1
  299. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +1 -1
  300. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +1 -1
  301. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +1 -1
  302. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +1 -1
  303. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +1 -1
  304. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +1 -1
  305. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +1 -1
  306. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +1 -1
  307. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +1 -1
  308. package/src/duckdb/src/include/duckdb/parser/expression_map.hpp +1 -1
  309. package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +2 -2
  310. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -1
  311. package/src/duckdb/src/include/duckdb/parser/parser.hpp +2 -0
  312. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -2
  313. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +36 -5
  314. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +7 -4
  315. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +1 -1
  316. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +1 -1
  317. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -2
  318. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +1 -1
  319. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +1 -1
  320. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +1 -1
  321. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +1 -1
  322. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +1 -1
  323. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +4 -3
  324. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +107 -91
  325. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -2
  326. package/src/duckdb/src/include/duckdb/planner/bound_constraint.hpp +2 -2
  327. package/src/duckdb/src/include/duckdb/planner/bound_query_node.hpp +2 -2
  328. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +34 -1
  329. package/src/duckdb/src/include/duckdb/planner/bound_tableref.hpp +2 -2
  330. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +1 -1
  331. package/src/duckdb/src/include/duckdb/planner/expression/bound_between_expression.hpp +1 -1
  332. package/src/duckdb/src/include/duckdb/planner/expression/bound_case_expression.hpp +1 -1
  333. package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +1 -1
  334. package/src/duckdb/src/include/duckdb/planner/expression/bound_columnref_expression.hpp +1 -1
  335. package/src/duckdb/src/include/duckdb/planner/expression/bound_comparison_expression.hpp +1 -1
  336. package/src/duckdb/src/include/duckdb/planner/expression/bound_conjunction_expression.hpp +1 -1
  337. package/src/duckdb/src/include/duckdb/planner/expression/bound_constant_expression.hpp +1 -1
  338. package/src/duckdb/src/include/duckdb/planner/expression/bound_function_expression.hpp +1 -1
  339. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambda_expression.hpp +1 -1
  340. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambdaref_expression.hpp +1 -1
  341. package/src/duckdb/src/include/duckdb/planner/expression/bound_operator_expression.hpp +1 -1
  342. package/src/duckdb/src/include/duckdb/planner/expression/bound_parameter_expression.hpp +1 -1
  343. package/src/duckdb/src/include/duckdb/planner/expression/bound_reference_expression.hpp +1 -1
  344. package/src/duckdb/src/include/duckdb/planner/expression/bound_subquery_expression.hpp +1 -1
  345. package/src/duckdb/src/include/duckdb/planner/expression/bound_unnest_expression.hpp +1 -1
  346. package/src/duckdb/src/include/duckdb/planner/expression/bound_window_expression.hpp +1 -1
  347. package/src/duckdb/src/include/duckdb/planner/expression.hpp +5 -7
  348. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
  349. package/src/duckdb/src/include/duckdb/planner/filter/conjunction_filter.hpp +6 -0
  350. package/src/duckdb/src/include/duckdb/planner/filter/constant_filter.hpp +3 -0
  351. package/src/duckdb/src/include/duckdb/planner/filter/null_filter.hpp +6 -0
  352. package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +7 -2
  353. package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_to_file.hpp +6 -2
  354. package/src/duckdb/src/include/duckdb/planner/operator/logical_execute.hpp +4 -0
  355. package/src/duckdb/src/include/duckdb/planner/operator/logical_explain.hpp +5 -1
  356. package/src/duckdb/src/include/duckdb/planner/operator/logical_get.hpp +5 -1
  357. package/src/duckdb/src/include/duckdb/planner/operator/logical_pivot.hpp +3 -0
  358. package/src/duckdb/src/include/duckdb/planner/operator/logical_pragma.hpp +6 -2
  359. package/src/duckdb/src/include/duckdb/planner/operator/logical_prepare.hpp +4 -0
  360. package/src/duckdb/src/include/duckdb/planner/table_binding.hpp +26 -0
  361. package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +17 -0
  362. package/src/duckdb/src/include/duckdb/planner/tableref/bound_pivotref.hpp +3 -0
  363. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_analyze.hpp +1 -1
  364. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
  365. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_analyze.hpp +2 -2
  366. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
  367. package/src/duckdb/src/include/duckdb/storage/index.hpp +2 -2
  368. package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +1 -1
  369. package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +12 -0
  370. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +1 -1
  371. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +25 -2
  372. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +12 -0
  373. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +22 -0
  374. package/src/duckdb/src/include/duckdb/transaction/duck_transaction_manager.hpp +2 -2
  375. package/src/duckdb/src/include/duckdb/transaction/transaction.hpp +2 -2
  376. package/src/duckdb/src/main/capi/appender-c.cpp +5 -5
  377. package/src/duckdb/src/main/capi/arrow-c.cpp +10 -10
  378. package/src/duckdb/src/main/capi/cast/from_decimal-c.cpp +1 -1
  379. package/src/duckdb/src/main/capi/cast/utils-c.cpp +1 -1
  380. package/src/duckdb/src/main/capi/config-c.cpp +1 -1
  381. package/src/duckdb/src/main/capi/data_chunk-c.cpp +17 -17
  382. package/src/duckdb/src/main/capi/duckdb-c.cpp +4 -4
  383. package/src/duckdb/src/main/capi/duckdb_value-c.cpp +4 -4
  384. package/src/duckdb/src/main/capi/logical_types-c.cpp +22 -21
  385. package/src/duckdb/src/main/capi/pending-c.cpp +6 -6
  386. package/src/duckdb/src/main/capi/prepared-c.cpp +10 -10
  387. package/src/duckdb/src/main/capi/replacement_scan-c.cpp +6 -6
  388. package/src/duckdb/src/main/capi/result-c.cpp +23 -23
  389. package/src/duckdb/src/main/capi/table_function-c.cpp +1 -1
  390. package/src/duckdb/src/main/client_context.cpp +3 -3
  391. package/src/duckdb/src/main/config.cpp +1 -0
  392. package/src/duckdb/src/main/database_manager.cpp +1 -1
  393. package/src/duckdb/src/main/error_manager.cpp +1 -1
  394. package/src/duckdb/src/main/extension/extension_load.cpp +1 -1
  395. package/src/duckdb/src/main/relation/create_table_relation.cpp +1 -1
  396. package/src/duckdb/src/main/relation/create_view_relation.cpp +1 -1
  397. package/src/duckdb/src/main/relation/delete_relation.cpp +1 -1
  398. package/src/duckdb/src/main/relation/explain_relation.cpp +1 -1
  399. package/src/duckdb/src/main/relation/insert_relation.cpp +1 -1
  400. package/src/duckdb/src/main/relation/update_relation.cpp +1 -1
  401. package/src/duckdb/src/main/relation/write_csv_relation.cpp +1 -1
  402. package/src/duckdb/src/main/relation/write_parquet_relation.cpp +1 -1
  403. package/src/duckdb/src/main/relation.cpp +1 -1
  404. package/src/duckdb/src/main/settings/settings.cpp +22 -6
  405. package/src/duckdb/src/optimizer/deliminator.cpp +12 -12
  406. package/src/duckdb/src/optimizer/expression_heuristics.cpp +1 -0
  407. package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -3
  408. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +10 -10
  409. package/src/duckdb/src/optimizer/matcher/expression_matcher.cpp +1 -1
  410. package/src/duckdb/src/optimizer/pullup/pullup_projection.cpp +2 -2
  411. package/src/duckdb/src/optimizer/regex_range_filter.cpp +2 -4
  412. package/src/duckdb/src/optimizer/rule/distributivity.cpp +2 -2
  413. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +6 -6
  414. package/src/duckdb/src/optimizer/statistics/operator/propagate_get.cpp +2 -2
  415. package/src/duckdb/src/parallel/executor.cpp +1 -1
  416. package/src/duckdb/src/parser/base_expression.cpp +2 -5
  417. package/src/duckdb/src/parser/column_definition.cpp +5 -8
  418. package/src/duckdb/src/parser/expression/between_expression.cpp +4 -4
  419. package/src/duckdb/src/parser/expression/case_expression.cpp +6 -6
  420. package/src/duckdb/src/parser/expression/cast_expression.cpp +4 -4
  421. package/src/duckdb/src/parser/expression/collate_expression.cpp +3 -3
  422. package/src/duckdb/src/parser/expression/columnref_expression.cpp +4 -4
  423. package/src/duckdb/src/parser/expression/comparison_expression.cpp +3 -3
  424. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +2 -2
  425. package/src/duckdb/src/parser/expression/constant_expression.cpp +2 -2
  426. package/src/duckdb/src/parser/expression/function_expression.cpp +10 -14
  427. package/src/duckdb/src/parser/expression/lambda_expression.cpp +2 -2
  428. package/src/duckdb/src/parser/expression/operator_expression.cpp +4 -4
  429. package/src/duckdb/src/parser/expression/parameter_expression.cpp +2 -2
  430. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +3 -3
  431. package/src/duckdb/src/parser/expression/star_expression.cpp +9 -9
  432. package/src/duckdb/src/parser/expression/subquery_expression.cpp +5 -5
  433. package/src/duckdb/src/parser/expression/window_expression.cpp +13 -24
  434. package/src/duckdb/src/parser/parsed_expression.cpp +34 -18
  435. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +4 -4
  436. package/src/duckdb/src/parser/parser.cpp +4 -4
  437. package/src/duckdb/src/parser/query_node/select_node.cpp +6 -13
  438. package/src/duckdb/src/parser/query_node.cpp +7 -6
  439. package/src/duckdb/src/parser/result_modifier.cpp +25 -18
  440. package/src/duckdb/src/parser/statement/select_statement.cpp +3 -3
  441. package/src/duckdb/src/parser/tableref/basetableref.cpp +4 -4
  442. package/src/duckdb/src/parser/tableref/emptytableref.cpp +1 -1
  443. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +5 -5
  444. package/src/duckdb/src/parser/tableref/joinref.cpp +6 -6
  445. package/src/duckdb/src/parser/tableref/pivotref.cpp +10 -15
  446. package/src/duckdb/src/parser/tableref/subqueryref.cpp +3 -3
  447. package/src/duckdb/src/parser/tableref/table_function.cpp +3 -3
  448. package/src/duckdb/src/parser/tableref.cpp +12 -3
  449. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +7 -7
  450. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +4 -4
  451. package/src/duckdb/src/parser/transform/expression/transform_boolean_test.cpp +4 -4
  452. package/src/duckdb/src/parser/transform/expression/transform_case.cpp +8 -10
  453. package/src/duckdb/src/parser/transform/expression/transform_cast.cpp +7 -9
  454. package/src/duckdb/src/parser/transform/expression/transform_coalesce.cpp +3 -5
  455. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +22 -22
  456. package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +2 -2
  457. package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +42 -44
  458. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +70 -75
  459. package/src/duckdb/src/parser/transform/expression/transform_grouping_function.cpp +4 -4
  460. package/src/duckdb/src/parser/transform/expression/transform_interval.cpp +7 -7
  461. package/src/duckdb/src/parser/transform/expression/transform_is_null.cpp +4 -5
  462. package/src/duckdb/src/parser/transform/expression/transform_lambda.cpp +5 -6
  463. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +28 -29
  464. package/src/duckdb/src/parser/transform/expression/transform_param_ref.cpp +13 -14
  465. package/src/duckdb/src/parser/transform/expression/transform_positional_reference.cpp +4 -4
  466. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +9 -10
  467. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +28 -32
  468. package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +18 -18
  469. package/src/duckdb/src/parser/transform/helpers/transform_sample.cpp +3 -3
  470. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +27 -26
  471. package/src/duckdb/src/parser/transform/statement/transform_alter_sequence.cpp +11 -14
  472. package/src/duckdb/src/parser/transform/statement/transform_alter_table.cpp +14 -16
  473. package/src/duckdb/src/parser/transform/statement/transform_attach.cpp +8 -9
  474. package/src/duckdb/src/parser/transform/statement/transform_call.cpp +2 -5
  475. package/src/duckdb/src/parser/transform/statement/transform_checkpoint.cpp +4 -6
  476. package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +22 -23
  477. package/src/duckdb/src/parser/transform/statement/transform_create_database.cpp +3 -4
  478. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +14 -18
  479. package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +13 -15
  480. package/src/duckdb/src/parser/transform/statement/transform_create_schema.cpp +8 -10
  481. package/src/duckdb/src/parser/transform/statement/transform_create_sequence.cpp +8 -10
  482. package/src/duckdb/src/parser/transform/statement/transform_create_table.cpp +26 -28
  483. package/src/duckdb/src/parser/transform/statement/transform_create_table_as.cpp +8 -10
  484. package/src/duckdb/src/parser/transform/statement/transform_create_type.cpp +12 -15
  485. package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +13 -18
  486. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +11 -13
  487. package/src/duckdb/src/parser/transform/statement/transform_detach.cpp +3 -4
  488. package/src/duckdb/src/parser/transform/statement/transform_drop.cpp +20 -22
  489. package/src/duckdb/src/parser/transform/statement/transform_explain.cpp +5 -7
  490. package/src/duckdb/src/parser/transform/statement/transform_export.cpp +5 -6
  491. package/src/duckdb/src/parser/transform/statement/transform_import.cpp +2 -3
  492. package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +21 -24
  493. package/src/duckdb/src/parser/transform/statement/transform_load.cpp +4 -5
  494. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -7
  495. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +7 -9
  496. package/src/duckdb/src/parser/transform/statement/transform_prepare.cpp +11 -19
  497. package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +12 -14
  498. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +12 -9
  499. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +34 -34
  500. package/src/duckdb/src/parser/transform/statement/transform_set.cpp +18 -19
  501. package/src/duckdb/src/parser/transform/statement/transform_show.cpp +5 -7
  502. package/src/duckdb/src/parser/transform/statement/transform_show_select.cpp +4 -5
  503. package/src/duckdb/src/parser/transform/statement/transform_transaction.cpp +3 -5
  504. package/src/duckdb/src/parser/transform/statement/transform_update.cpp +10 -13
  505. package/src/duckdb/src/parser/transform/statement/transform_upsert.cpp +4 -4
  506. package/src/duckdb/src/parser/transform/statement/transform_use.cpp +2 -3
  507. package/src/duckdb/src/parser/transform/statement/transform_vacuum.cpp +6 -10
  508. package/src/duckdb/src/parser/transform/tableref/transform_base_tableref.cpp +18 -18
  509. package/src/duckdb/src/parser/transform/tableref/transform_from.cpp +5 -5
  510. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +11 -11
  511. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +30 -27
  512. package/src/duckdb/src/parser/transform/tableref/transform_subquery.cpp +5 -5
  513. package/src/duckdb/src/parser/transform/tableref/transform_table_function.cpp +13 -12
  514. package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +8 -8
  515. package/src/duckdb/src/parser/transformer.cpp +46 -46
  516. package/src/duckdb/src/planner/bind_context.cpp +9 -10
  517. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +1 -1
  518. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +1 -1
  519. package/src/duckdb/src/planner/binder/expression/bind_positional_reference_expression.cpp +8 -3
  520. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +1 -1
  521. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +6 -3
  522. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +8 -8
  523. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +4 -4
  524. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +1 -1
  525. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +18 -1
  526. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +2 -2
  527. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +2 -114
  528. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +4 -2
  529. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +17 -7
  530. package/src/duckdb/src/planner/binder.cpp +1 -1
  531. package/src/duckdb/src/planner/bound_result_modifier.cpp +16 -11
  532. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +5 -5
  533. package/src/duckdb/src/planner/expression/bound_between_expression.cpp +5 -5
  534. package/src/duckdb/src/planner/expression/bound_case_expression.cpp +5 -5
  535. package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +3 -3
  536. package/src/duckdb/src/planner/expression/bound_columnref_expression.cpp +2 -2
  537. package/src/duckdb/src/planner/expression/bound_comparison_expression.cpp +4 -4
  538. package/src/duckdb/src/planner/expression/bound_conjunction_expression.cpp +2 -2
  539. package/src/duckdb/src/planner/expression/bound_constant_expression.cpp +2 -2
  540. package/src/duckdb/src/planner/expression/bound_expression.cpp +1 -1
  541. package/src/duckdb/src/planner/expression/bound_function_expression.cpp +3 -4
  542. package/src/duckdb/src/planner/expression/bound_lambda_expression.cpp +4 -5
  543. package/src/duckdb/src/planner/expression/bound_lambdaref_expression.cpp +2 -2
  544. package/src/duckdb/src/planner/expression/bound_operator_expression.cpp +3 -4
  545. package/src/duckdb/src/planner/expression/bound_parameter_expression.cpp +2 -2
  546. package/src/duckdb/src/planner/expression/bound_reference_expression.cpp +2 -2
  547. package/src/duckdb/src/planner/expression/bound_subquery_expression.cpp +1 -1
  548. package/src/duckdb/src/planner/expression/bound_unnest_expression.cpp +3 -3
  549. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +8 -21
  550. package/src/duckdb/src/planner/expression.cpp +15 -0
  551. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +2 -2
  552. package/src/duckdb/src/planner/expression_binder.cpp +3 -2
  553. package/src/duckdb/src/planner/expression_iterator.cpp +2 -2
  554. package/src/duckdb/src/planner/filter/conjunction_filter.cpp +2 -2
  555. package/src/duckdb/src/planner/filter/constant_filter.cpp +1 -1
  556. package/src/duckdb/src/planner/logical_operator.cpp +3 -4
  557. package/src/duckdb/src/planner/logical_operator_visitor.cpp +1 -1
  558. package/src/duckdb/src/planner/planner.cpp +5 -15
  559. package/src/duckdb/src/planner/table_filter.cpp +1 -1
  560. package/src/duckdb/src/storage/arena_allocator.cpp +2 -2
  561. package/src/duckdb/src/storage/buffer/block_handle.cpp +1 -1
  562. package/src/duckdb/src/storage/checkpoint/write_overflow_strings_to_disk.cpp +2 -2
  563. package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -3
  564. package/src/duckdb/src/storage/compression/bitpacking.cpp +8 -8
  565. package/src/duckdb/src/storage/compression/dictionary_compression.cpp +36 -36
  566. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +11 -11
  567. package/src/duckdb/src/storage/compression/fsst.cpp +34 -34
  568. package/src/duckdb/src/storage/compression/rle.cpp +8 -8
  569. package/src/duckdb/src/storage/compression/string_uncompressed.cpp +13 -13
  570. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +11 -11
  571. package/src/duckdb/src/storage/data_table.cpp +8 -7
  572. package/src/duckdb/src/storage/index.cpp +1 -3
  573. package/src/duckdb/src/storage/local_storage.cpp +2 -1
  574. package/src/duckdb/src/storage/magic_bytes.cpp +1 -1
  575. package/src/duckdb/src/storage/single_file_block_manager.cpp +3 -3
  576. package/src/duckdb/src/storage/standard_buffer_manager.cpp +3 -3
  577. package/src/duckdb/src/storage/statistics/list_stats.cpp +1 -1
  578. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +1 -1
  579. package/src/duckdb/src/storage/statistics/string_stats.cpp +15 -14
  580. package/src/duckdb/src/storage/table/chunk_info.cpp +2 -2
  581. package/src/duckdb/src/storage/table/column_segment.cpp +3 -3
  582. package/src/duckdb/src/storage/table/list_column_data.cpp +3 -3
  583. package/src/duckdb/src/storage/table/row_group.cpp +4 -4
  584. package/src/duckdb/src/storage/table/standard_column_data.cpp +1 -1
  585. package/src/duckdb/src/storage/table/update_segment.cpp +12 -12
  586. package/src/duckdb/src/storage/wal_replay.cpp +5 -6
  587. package/src/duckdb/src/transaction/cleanup_state.cpp +3 -3
  588. package/src/duckdb/src/transaction/commit_state.cpp +8 -8
  589. package/src/duckdb/src/transaction/duck_transaction.cpp +9 -7
  590. package/src/duckdb/src/transaction/duck_transaction_manager.cpp +16 -16
  591. package/src/duckdb/src/transaction/rollback_state.cpp +3 -3
  592. package/src/duckdb/src/verification/prepared_statement_verifier.cpp +1 -1
  593. package/src/duckdb/src/verification/statement_verifier.cpp +3 -4
  594. package/src/duckdb/third_party/hyperloglog/hyperloglog.hpp +2 -2
  595. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +11391 -11442
  596. package/src/duckdb/third_party/pcg/pcg_extras.hpp +1 -1
@@ -42,7 +42,7 @@ inline string_t NullValue() {
42
42
 
43
43
  template <>
44
44
  inline char *NullValue() {
45
- return (char *)NullValue<const char *>();
45
+ return (char *)NullValue<const char *>(); // NOLINT
46
46
  }
47
47
 
48
48
  template <>
@@ -135,6 +135,18 @@ protected:
135
135
  mutex lock;
136
136
  shared_ptr<PartitionTupleDataAllocators> allocators;
137
137
  vector<unique_ptr<TupleDataCollection>> partitions;
138
+
139
+ public:
140
+ template <class TARGET>
141
+ TARGET &Cast() {
142
+ D_ASSERT(dynamic_cast<TARGET *>(this));
143
+ return reinterpret_cast<TARGET &>(*this);
144
+ }
145
+ template <class TARGET>
146
+ const TARGET &Cast() const {
147
+ D_ASSERT(dynamic_cast<const TARGET *>(this));
148
+ return reinterpret_cast<const TARGET &>(*this);
149
+ }
138
150
  };
139
151
 
140
152
  } // namespace duckdb
@@ -55,7 +55,7 @@ public:
55
55
  #else
56
56
  memset(value.pointer.prefix, 0, PREFIX_BYTES);
57
57
  #endif
58
- value.pointer.ptr = (char *)data;
58
+ value.pointer.ptr = (char *)data; // NOLINT
59
59
  }
60
60
  }
61
61
  string_t(const char *data) : string_t(data, strlen(data)) { // NOLINT: Allow implicit conversion from `const char*`
@@ -69,14 +69,14 @@ public:
69
69
  }
70
70
 
71
71
  const char *GetData() const {
72
- return IsInlined() ? (const char *)value.inlined.inlined : value.pointer.ptr;
72
+ return IsInlined() ? const_char_ptr_cast(value.inlined.inlined) : value.pointer.ptr;
73
73
  }
74
74
  const char *GetDataUnsafe() const {
75
75
  return GetData();
76
76
  }
77
77
 
78
78
  char *GetDataWriteable() const {
79
- return IsInlined() ? (char *)value.inlined.inlined : value.pointer.ptr;
79
+ return IsInlined() ? (char *)value.inlined.inlined : value.pointer.ptr; // NOLINT
80
80
  }
81
81
 
82
82
  const char *GetPrefix() const {
@@ -110,7 +110,7 @@ public:
110
110
  } else {
111
111
  // copy the data into the prefix
112
112
  #ifndef DUCKDB_DEBUG_NO_INLINE
113
- auto dataptr = (char *)GetData();
113
+ auto dataptr = GetData();
114
114
  memcpy(value.pointer.prefix, dataptr, PREFIX_LENGTH);
115
115
  #else
116
116
  memset(value.pointer.prefix, 0, PREFIX_BYTES);
@@ -128,15 +128,15 @@ public:
128
128
  return false;
129
129
  return (memcmp(a.GetData(), b.GetData(), a.GetSize()) == 0);
130
130
  #endif
131
- uint64_t A = Load<uint64_t>((const_data_ptr_t)&a);
132
- uint64_t B = Load<uint64_t>((const_data_ptr_t)&b);
131
+ uint64_t A = Load<uint64_t>(const_data_ptr_cast(&a));
132
+ uint64_t B = Load<uint64_t>(const_data_ptr_cast(&b));
133
133
  if (A != B) {
134
134
  // Either length or prefix are different -> not equal
135
135
  return false;
136
136
  }
137
137
  // they have the same length and same prefix!
138
- A = Load<uint64_t>((const_data_ptr_t)&a + 8u);
139
- B = Load<uint64_t>((const_data_ptr_t)&b + 8u);
138
+ A = Load<uint64_t>(const_data_ptr_cast(&a) + 8u);
139
+ B = Load<uint64_t>(const_data_ptr_cast(&b) + 8u);
140
140
  if (A == B) {
141
141
  // either they are both inlined (so compare equal) or point to the same string (so compare equal)
142
142
  return true;
@@ -159,8 +159,8 @@ public:
159
159
  const uint32_t min_length = std::min<uint32_t>(left_length, right_length);
160
160
 
161
161
  #ifndef DUCKDB_DEBUG_NO_INLINE
162
- uint32_t A = Load<uint32_t>((const_data_ptr_t)left.GetPrefix());
163
- uint32_t B = Load<uint32_t>((const_data_ptr_t)right.GetPrefix());
162
+ uint32_t A = Load<uint32_t>(const_data_ptr_cast(left.GetPrefix()));
163
+ uint32_t B = Load<uint32_t>(const_data_ptr_cast(right.GetPrefix()));
164
164
 
165
165
  // Utility to move 0xa1b2c3d4 into 0xd4c3b2a1, basically inverting the order byte-a-byte
166
166
  auto bswap = [](uint32_t v) -> uint32_t {
@@ -166,7 +166,7 @@ public:
166
166
  //! Create a blob Value from a data pointer and a length: no bytes are interpreted
167
167
  DUCKDB_API static Value BLOB(const_data_ptr_t data, idx_t len);
168
168
  static Value BLOB_RAW(const string &data) { // NOLINT
169
- return Value::BLOB((const_data_ptr_t)data.c_str(), data.size());
169
+ return Value::BLOB(const_data_ptr_cast(data.c_str()), data.size());
170
170
  }
171
171
  //! Creates a blob by casting a specified string to a blob (i.e. interpreting \x characters)
172
172
  DUCKDB_API static Value BLOB(const string &data);
@@ -24,6 +24,15 @@ struct UnifiedVectorFormat {
24
24
  data_ptr_t data;
25
25
  ValidityMask validity;
26
26
  SelectionVector owned_sel;
27
+
28
+ template <class T>
29
+ static inline const T *GetData(const UnifiedVectorFormat &format) {
30
+ return reinterpret_cast<const T *>(format.data);
31
+ }
32
+ template <class T>
33
+ static inline T *GetDataNoConst(UnifiedVectorFormat &format) {
34
+ return reinterpret_cast<T *>(format.data);
35
+ }
27
36
  };
28
37
 
29
38
  class VectorCache;
@@ -52,7 +52,7 @@ public:
52
52
  if (type != TARGET::TYPE) {
53
53
  throw InternalException("Failed to cast vector auxiliary data to type - type mismatch");
54
54
  }
55
- return (TARGET &)*this;
55
+ return reinterpret_cast<TARGET &>(*this);
56
56
  }
57
57
 
58
58
  template <class TARGET>
@@ -60,7 +60,7 @@ public:
60
60
  if (type != TARGET::TYPE) {
61
61
  throw InternalException("Failed to cast vector auxiliary data to type - type mismatch");
62
62
  }
63
- return (const TARGET &)*this;
63
+ return reinterpret_cast<const TARGET &>(*this);
64
64
  }
65
65
  };
66
66
 
@@ -121,6 +121,18 @@ protected:
121
121
  VectorBufferType buffer_type;
122
122
  unique_ptr<VectorAuxiliaryData> aux_data;
123
123
  unsafe_unique_array<data_t> data;
124
+
125
+ public:
126
+ template <class TARGET>
127
+ TARGET &Cast() {
128
+ D_ASSERT(dynamic_cast<TARGET *>(this));
129
+ return reinterpret_cast<TARGET &>(*this);
130
+ }
131
+ template <class TARGET>
132
+ const TARGET &Cast() const {
133
+ D_ASSERT(dynamic_cast<const TARGET *>(this));
134
+ return reinterpret_cast<const TARGET &>(*this);
135
+ }
124
136
  };
125
137
 
126
138
  //! The DictionaryBuffer holds a selection vector
@@ -154,7 +166,7 @@ private:
154
166
  class VectorStringBuffer : public VectorBuffer {
155
167
  public:
156
168
  VectorStringBuffer();
157
- VectorStringBuffer(VectorBufferType type);
169
+ explicit VectorStringBuffer(VectorBufferType type);
158
170
 
159
171
  public:
160
172
  string_t AddString(const char *data, idx_t len) {
@@ -207,7 +219,7 @@ private:
207
219
  class VectorStructBuffer : public VectorBuffer {
208
220
  public:
209
221
  VectorStructBuffer();
210
- VectorStructBuffer(const LogicalType &struct_type, idx_t capacity = STANDARD_VECTOR_SIZE);
222
+ explicit VectorStructBuffer(const LogicalType &struct_type, idx_t capacity = STANDARD_VECTOR_SIZE);
211
223
  VectorStructBuffer(Vector &other, const SelectionVector &sel, idx_t count);
212
224
  ~VectorStructBuffer() override;
213
225
 
@@ -226,8 +238,8 @@ private:
226
238
 
227
239
  class VectorListBuffer : public VectorBuffer {
228
240
  public:
229
- VectorListBuffer(unique_ptr<Vector> vector, idx_t initial_capacity = STANDARD_VECTOR_SIZE);
230
- VectorListBuffer(const LogicalType &list_type, idx_t initial_capacity = STANDARD_VECTOR_SIZE);
241
+ explicit VectorListBuffer(unique_ptr<Vector> vector, idx_t initial_capacity = STANDARD_VECTOR_SIZE);
242
+ explicit VectorListBuffer(const LogicalType &list_type, idx_t initial_capacity = STANDARD_VECTOR_SIZE);
231
243
  ~VectorListBuffer() override;
232
244
 
233
245
  public:
@@ -11,6 +11,7 @@
11
11
  #include "duckdb/common/exception.hpp"
12
12
  #include "duckdb/common/types/vector.hpp"
13
13
  #include "duckdb/common/vector_operations/vector_operations.hpp"
14
+ #include "duckdb/function/aggregate_state.hpp"
14
15
 
15
16
  namespace duckdb {
16
17
 
@@ -24,7 +25,7 @@ private:
24
25
  static inline void NullaryFlatLoop(STATE_TYPE **__restrict states, AggregateInputData &aggr_input_data,
25
26
  idx_t count) {
26
27
  for (idx_t i = 0; i < count; i++) {
27
- OP::template Operation<STATE_TYPE, OP>(states[i], aggr_input_data, i);
28
+ OP::template Operation<STATE_TYPE, OP>(*states[i], aggr_input_data, i);
28
29
  }
29
30
  }
30
31
 
@@ -34,24 +35,25 @@ private:
34
35
 
35
36
  for (idx_t i = 0; i < count; i++) {
36
37
  auto sidx = ssel.get_index(i);
37
- OP::template Operation<STATE_TYPE, OP>(states[sidx], aggr_input_data, sidx);
38
+ OP::template Operation<STATE_TYPE, OP>(*states[sidx], aggr_input_data, sidx);
38
39
  }
39
40
  }
40
41
 
41
42
  template <class STATE_TYPE, class INPUT_TYPE, class OP>
42
- static inline void UnaryFlatLoop(INPUT_TYPE *__restrict idata, AggregateInputData &aggr_input_data,
43
+ static inline void UnaryFlatLoop(const INPUT_TYPE *__restrict idata, AggregateInputData &aggr_input_data,
43
44
  STATE_TYPE **__restrict states, ValidityMask &mask, idx_t count) {
44
- if (!mask.AllValid()) {
45
- idx_t base_idx = 0;
45
+ if (OP::IgnoreNull() && !mask.AllValid()) {
46
+ AggregateUnaryInput input(aggr_input_data, mask);
47
+ auto &base_idx = input.input_idx;
48
+ base_idx = 0;
46
49
  auto entry_count = ValidityMask::EntryCount(count);
47
50
  for (idx_t entry_idx = 0; entry_idx < entry_count; entry_idx++) {
48
51
  auto validity_entry = mask.GetValidityEntry(entry_idx);
49
52
  idx_t next = MinValue<idx_t>(base_idx + ValidityMask::BITS_PER_VALUE, count);
50
- if (!OP::IgnoreNull() || ValidityMask::AllValid(validity_entry)) {
53
+ if (ValidityMask::AllValid(validity_entry)) {
51
54
  // all valid: perform operation
52
55
  for (; base_idx < next; base_idx++) {
53
- OP::template Operation<INPUT_TYPE, STATE_TYPE, OP>(states[base_idx], aggr_input_data, idata,
54
- mask, base_idx);
56
+ OP::template Operation<INPUT_TYPE, STATE_TYPE, OP>(*states[base_idx], idata[base_idx], input);
55
57
  }
56
58
  } else if (ValidityMask::NoneValid(validity_entry)) {
57
59
  // nothing valid: skip all
@@ -62,46 +64,52 @@ private:
62
64
  idx_t start = base_idx;
63
65
  for (; base_idx < next; base_idx++) {
64
66
  if (ValidityMask::RowIsValid(validity_entry, base_idx - start)) {
65
- OP::template Operation<INPUT_TYPE, STATE_TYPE, OP>(states[base_idx], aggr_input_data, idata,
66
- mask, base_idx);
67
+ OP::template Operation<INPUT_TYPE, STATE_TYPE, OP>(*states[base_idx], idata[base_idx],
68
+ input);
67
69
  }
68
70
  }
69
71
  }
70
72
  }
71
73
  } else {
72
- for (idx_t i = 0; i < count; i++) {
73
- OP::template Operation<INPUT_TYPE, STATE_TYPE, OP>(states[i], aggr_input_data, idata, mask, i);
74
+ AggregateUnaryInput input(aggr_input_data, mask);
75
+ auto &i = input.input_idx;
76
+ for (i = 0; i < count; i++) {
77
+ OP::template Operation<INPUT_TYPE, STATE_TYPE, OP>(*states[i], idata[i], input);
74
78
  }
75
79
  }
76
80
  }
77
81
 
78
82
  template <class STATE_TYPE, class INPUT_TYPE, class OP>
79
- static inline void UnaryScatterLoop(INPUT_TYPE *__restrict idata, AggregateInputData &aggr_input_data,
83
+ static inline void UnaryScatterLoop(const INPUT_TYPE *__restrict idata, AggregateInputData &aggr_input_data,
80
84
  STATE_TYPE **__restrict states, const SelectionVector &isel,
81
85
  const SelectionVector &ssel, ValidityMask &mask, idx_t count) {
82
86
  if (OP::IgnoreNull() && !mask.AllValid()) {
83
87
  // potential NULL values and NULL values are ignored
88
+ AggregateUnaryInput input(aggr_input_data, mask);
84
89
  for (idx_t i = 0; i < count; i++) {
85
- auto idx = isel.get_index(i);
90
+ input.input_idx = isel.get_index(i);
86
91
  auto sidx = ssel.get_index(i);
87
- if (mask.RowIsValid(idx)) {
88
- OP::template Operation<INPUT_TYPE, STATE_TYPE, OP>(states[sidx], aggr_input_data, idata, mask, idx);
92
+ if (mask.RowIsValid(input.input_idx)) {
93
+ OP::template Operation<INPUT_TYPE, STATE_TYPE, OP>(*states[sidx], idata[input.input_idx], input);
89
94
  }
90
95
  }
91
96
  } else {
92
97
  // quick path: no NULL values or NULL values are not ignored
98
+ AggregateUnaryInput input(aggr_input_data, mask);
93
99
  for (idx_t i = 0; i < count; i++) {
94
- auto idx = isel.get_index(i);
100
+ input.input_idx = isel.get_index(i);
95
101
  auto sidx = ssel.get_index(i);
96
- OP::template Operation<INPUT_TYPE, STATE_TYPE, OP>(states[sidx], aggr_input_data, idata, mask, idx);
102
+ OP::template Operation<INPUT_TYPE, STATE_TYPE, OP>(*states[sidx], idata[input.input_idx], input);
97
103
  }
98
104
  }
99
105
  }
100
106
 
101
107
  template <class STATE_TYPE, class INPUT_TYPE, class OP>
102
- static inline void UnaryFlatUpdateLoop(INPUT_TYPE *__restrict idata, AggregateInputData &aggr_input_data,
108
+ static inline void UnaryFlatUpdateLoop(const INPUT_TYPE *__restrict idata, AggregateInputData &aggr_input_data,
103
109
  STATE_TYPE *__restrict state, idx_t count, ValidityMask &mask) {
104
- idx_t base_idx = 0;
110
+ AggregateUnaryInput input(aggr_input_data, mask);
111
+ auto &base_idx = input.input_idx;
112
+ base_idx = 0;
105
113
  auto entry_count = ValidityMask::EntryCount(count);
106
114
  for (idx_t entry_idx = 0; entry_idx < entry_count; entry_idx++) {
107
115
  auto validity_entry = mask.GetValidityEntry(entry_idx);
@@ -109,7 +117,7 @@ private:
109
117
  if (!OP::IgnoreNull() || ValidityMask::AllValid(validity_entry)) {
110
118
  // all valid: perform operation
111
119
  for (; base_idx < next; base_idx++) {
112
- OP::template Operation<INPUT_TYPE, STATE_TYPE, OP>(state, aggr_input_data, idata, mask, base_idx);
120
+ OP::template Operation<INPUT_TYPE, STATE_TYPE, OP>(*state, idata[base_idx], input);
113
121
  }
114
122
  } else if (ValidityMask::NoneValid(validity_entry)) {
115
123
  // nothing valid: skip all
@@ -120,8 +128,7 @@ private:
120
128
  idx_t start = base_idx;
121
129
  for (; base_idx < next; base_idx++) {
122
130
  if (ValidityMask::RowIsValid(validity_entry, base_idx - start)) {
123
- OP::template Operation<INPUT_TYPE, STATE_TYPE, OP>(state, aggr_input_data, idata, mask,
124
- base_idx);
131
+ OP::template Operation<INPUT_TYPE, STATE_TYPE, OP>(*state, idata[base_idx], input);
125
132
  }
126
133
  }
127
134
  }
@@ -129,77 +136,80 @@ private:
129
136
  }
130
137
 
131
138
  template <class STATE_TYPE, class INPUT_TYPE, class OP>
132
- static inline void UnaryUpdateLoop(INPUT_TYPE *__restrict idata, AggregateInputData &aggr_input_data,
139
+ static inline void UnaryUpdateLoop(const INPUT_TYPE *__restrict idata, AggregateInputData &aggr_input_data,
133
140
  STATE_TYPE *__restrict state, idx_t count, ValidityMask &mask,
134
141
  const SelectionVector &__restrict sel_vector) {
142
+ AggregateUnaryInput input(aggr_input_data, mask);
135
143
  if (OP::IgnoreNull() && !mask.AllValid()) {
136
144
  // potential NULL values and NULL values are ignored
137
145
  for (idx_t i = 0; i < count; i++) {
138
- auto idx = sel_vector.get_index(i);
139
- if (mask.RowIsValid(idx)) {
140
- OP::template Operation<INPUT_TYPE, STATE_TYPE, OP>(state, aggr_input_data, idata, mask, idx);
146
+ input.input_idx = sel_vector.get_index(i);
147
+ if (mask.RowIsValid(input.input_idx)) {
148
+ OP::template Operation<INPUT_TYPE, STATE_TYPE, OP>(*state, idata[input.input_idx], input);
141
149
  }
142
150
  }
143
151
  } else {
144
152
  // quick path: no NULL values or NULL values are not ignored
145
153
  for (idx_t i = 0; i < count; i++) {
146
- auto idx = sel_vector.get_index(i);
147
- OP::template Operation<INPUT_TYPE, STATE_TYPE, OP>(state, aggr_input_data, idata, mask, idx);
154
+ input.input_idx = sel_vector.get_index(i);
155
+ OP::template Operation<INPUT_TYPE, STATE_TYPE, OP>(*state, idata[input.input_idx], input);
148
156
  }
149
157
  }
150
158
  }
151
159
 
152
160
  template <class STATE_TYPE, class A_TYPE, class B_TYPE, class OP>
153
- static inline void BinaryScatterLoop(A_TYPE *__restrict adata, AggregateInputData &aggr_input_data,
154
- B_TYPE *__restrict bdata, STATE_TYPE **__restrict states, idx_t count,
161
+ static inline void BinaryScatterLoop(const A_TYPE *__restrict adata, AggregateInputData &aggr_input_data,
162
+ const B_TYPE *__restrict bdata, STATE_TYPE **__restrict states, idx_t count,
155
163
  const SelectionVector &asel, const SelectionVector &bsel,
156
164
  const SelectionVector &ssel, ValidityMask &avalidity,
157
165
  ValidityMask &bvalidity) {
166
+ AggregateBinaryInput input(aggr_input_data, avalidity, bvalidity);
158
167
  if (OP::IgnoreNull() && (!avalidity.AllValid() || !bvalidity.AllValid())) {
159
168
  // potential NULL values and NULL values are ignored
160
169
  for (idx_t i = 0; i < count; i++) {
161
- auto aidx = asel.get_index(i);
162
- auto bidx = bsel.get_index(i);
170
+ input.lidx = asel.get_index(i);
171
+ input.ridx = bsel.get_index(i);
163
172
  auto sidx = ssel.get_index(i);
164
- if (avalidity.RowIsValid(aidx) && bvalidity.RowIsValid(bidx)) {
165
- OP::template Operation<A_TYPE, B_TYPE, STATE_TYPE, OP>(states[sidx], aggr_input_data, adata, bdata,
166
- avalidity, bvalidity, aidx, bidx);
173
+ if (avalidity.RowIsValid(input.lidx) && bvalidity.RowIsValid(input.ridx)) {
174
+ OP::template Operation<A_TYPE, B_TYPE, STATE_TYPE, OP>(*states[sidx], adata[input.lidx],
175
+ bdata[input.ridx], input);
167
176
  }
168
177
  }
169
178
  } else {
170
179
  // quick path: no NULL values or NULL values are not ignored
171
180
  for (idx_t i = 0; i < count; i++) {
172
- auto aidx = asel.get_index(i);
173
- auto bidx = bsel.get_index(i);
181
+ input.lidx = asel.get_index(i);
182
+ input.ridx = bsel.get_index(i);
174
183
  auto sidx = ssel.get_index(i);
175
- OP::template Operation<A_TYPE, B_TYPE, STATE_TYPE, OP>(states[sidx], aggr_input_data, adata, bdata,
176
- avalidity, bvalidity, aidx, bidx);
184
+ OP::template Operation<A_TYPE, B_TYPE, STATE_TYPE, OP>(*states[sidx], adata[input.lidx],
185
+ bdata[input.ridx], input);
177
186
  }
178
187
  }
179
188
  }
180
189
 
181
190
  template <class STATE_TYPE, class A_TYPE, class B_TYPE, class OP>
182
- static inline void BinaryUpdateLoop(A_TYPE *__restrict adata, AggregateInputData &aggr_input_data,
183
- B_TYPE *__restrict bdata, STATE_TYPE *__restrict state, idx_t count,
191
+ static inline void BinaryUpdateLoop(const A_TYPE *__restrict adata, AggregateInputData &aggr_input_data,
192
+ const B_TYPE *__restrict bdata, STATE_TYPE *__restrict state, idx_t count,
184
193
  const SelectionVector &asel, const SelectionVector &bsel,
185
194
  ValidityMask &avalidity, ValidityMask &bvalidity) {
195
+ AggregateBinaryInput input(aggr_input_data, avalidity, bvalidity);
186
196
  if (OP::IgnoreNull() && (!avalidity.AllValid() || !bvalidity.AllValid())) {
187
197
  // potential NULL values and NULL values are ignored
188
198
  for (idx_t i = 0; i < count; i++) {
189
- auto aidx = asel.get_index(i);
190
- auto bidx = bsel.get_index(i);
191
- if (avalidity.RowIsValid(aidx) && bvalidity.RowIsValid(bidx)) {
192
- OP::template Operation<A_TYPE, B_TYPE, STATE_TYPE, OP>(state, aggr_input_data, adata, bdata,
193
- avalidity, bvalidity, aidx, bidx);
199
+ input.lidx = asel.get_index(i);
200
+ input.ridx = bsel.get_index(i);
201
+ if (avalidity.RowIsValid(input.lidx) && bvalidity.RowIsValid(input.ridx)) {
202
+ OP::template Operation<A_TYPE, B_TYPE, STATE_TYPE, OP>(*state, adata[input.lidx], bdata[input.ridx],
203
+ input);
194
204
  }
195
205
  }
196
206
  } else {
197
207
  // quick path: no NULL values or NULL values are not ignored
198
208
  for (idx_t i = 0; i < count; i++) {
199
- auto aidx = asel.get_index(i);
200
- auto bidx = bsel.get_index(i);
201
- OP::template Operation<A_TYPE, B_TYPE, STATE_TYPE, OP>(state, aggr_input_data, adata, bdata, avalidity,
202
- bvalidity, aidx, bidx);
209
+ input.lidx = asel.get_index(i);
210
+ input.ridx = bsel.get_index(i);
211
+ OP::template Operation<A_TYPE, B_TYPE, STATE_TYPE, OP>(*state, adata[input.lidx], bdata[input.ridx],
212
+ input);
203
213
  }
204
214
  }
205
215
  }
@@ -209,7 +219,7 @@ public:
209
219
  static void NullaryScatter(Vector &states, AggregateInputData &aggr_input_data, idx_t count) {
210
220
  if (states.GetVectorType() == VectorType::CONSTANT_VECTOR) {
211
221
  auto sdata = ConstantVector::GetData<STATE_TYPE *>(states);
212
- OP::template ConstantOperation<STATE_TYPE, OP>(*sdata, aggr_input_data, count);
222
+ OP::template ConstantOperation<STATE_TYPE, OP>(**sdata, aggr_input_data, count);
213
223
  } else if (states.GetVectorType() == VectorType::FLAT_VECTOR) {
214
224
  auto sdata = FlatVector::GetData<STATE_TYPE *>(states);
215
225
  NullaryFlatLoop<STATE_TYPE, OP>(sdata, aggr_input_data, count);
@@ -222,7 +232,7 @@ public:
222
232
 
223
233
  template <class STATE_TYPE, class OP>
224
234
  static void NullaryUpdate(data_ptr_t state, AggregateInputData &aggr_input_data, idx_t count) {
225
- OP::template ConstantOperation<STATE_TYPE, OP>((STATE_TYPE *)state, aggr_input_data, count);
235
+ OP::template ConstantOperation<STATE_TYPE, OP>(*reinterpret_cast<STATE_TYPE *>(state), aggr_input_data, count);
226
236
  }
227
237
 
228
238
  template <class STATE_TYPE, class INPUT_TYPE, class OP>
@@ -236,8 +246,8 @@ public:
236
246
  // regular constant: get first state
237
247
  auto idata = ConstantVector::GetData<INPUT_TYPE>(input);
238
248
  auto sdata = ConstantVector::GetData<STATE_TYPE *>(states);
239
- OP::template ConstantOperation<INPUT_TYPE, STATE_TYPE, OP>(*sdata, aggr_input_data, idata,
240
- ConstantVector::Validity(input), count);
249
+ AggregateUnaryInput input_data(aggr_input_data, ConstantVector::Validity(input));
250
+ OP::template ConstantOperation<INPUT_TYPE, STATE_TYPE, OP>(**sdata, *idata, input_data, count);
241
251
  } else if (input.GetVectorType() == VectorType::FLAT_VECTOR &&
242
252
  states.GetVectorType() == VectorType::FLAT_VECTOR) {
243
253
  auto idata = FlatVector::GetData<INPUT_TYPE>(input);
@@ -248,9 +258,9 @@ public:
248
258
  UnifiedVectorFormat idata, sdata;
249
259
  input.ToUnifiedFormat(count, idata);
250
260
  states.ToUnifiedFormat(count, sdata);
251
- UnaryScatterLoop<STATE_TYPE, INPUT_TYPE, OP>((INPUT_TYPE *)idata.data, aggr_input_data,
252
- (STATE_TYPE **)sdata.data, *idata.sel, *sdata.sel,
253
- idata.validity, count);
261
+ UnaryScatterLoop<STATE_TYPE, INPUT_TYPE, OP>(UnifiedVectorFormat::GetData<INPUT_TYPE>(idata),
262
+ aggr_input_data, (STATE_TYPE **)sdata.data, *idata.sel,
263
+ *sdata.sel, idata.validity, count);
254
264
  }
255
265
  }
256
266
 
@@ -262,8 +272,9 @@ public:
262
272
  return;
263
273
  }
264
274
  auto idata = ConstantVector::GetData<INPUT_TYPE>(input);
265
- OP::template ConstantOperation<INPUT_TYPE, STATE_TYPE, OP>((STATE_TYPE *)state, aggr_input_data, idata,
266
- ConstantVector::Validity(input), count);
275
+ AggregateUnaryInput input_data(aggr_input_data, ConstantVector::Validity(input));
276
+ OP::template ConstantOperation<INPUT_TYPE, STATE_TYPE, OP>(*reinterpret_cast<STATE_TYPE *>(state), *idata,
277
+ input_data, count);
267
278
  break;
268
279
  }
269
280
  case VectorType::FLAT_VECTOR: {
@@ -275,8 +286,9 @@ public:
275
286
  default: {
276
287
  UnifiedVectorFormat idata;
277
288
  input.ToUnifiedFormat(count, idata);
278
- UnaryUpdateLoop<STATE_TYPE, INPUT_TYPE, OP>((INPUT_TYPE *)idata.data, aggr_input_data, (STATE_TYPE *)state,
279
- count, idata.validity, *idata.sel);
289
+ UnaryUpdateLoop<STATE_TYPE, INPUT_TYPE, OP>(UnifiedVectorFormat::GetData<INPUT_TYPE>(idata),
290
+ aggr_input_data, (STATE_TYPE *)state, count, idata.validity,
291
+ *idata.sel);
280
292
  break;
281
293
  }
282
294
  }
@@ -290,9 +302,9 @@ public:
290
302
  b.ToUnifiedFormat(count, bdata);
291
303
  states.ToUnifiedFormat(count, sdata);
292
304
 
293
- BinaryScatterLoop<STATE_TYPE, A_TYPE, B_TYPE, OP>((A_TYPE *)adata.data, aggr_input_data, (B_TYPE *)bdata.data,
294
- (STATE_TYPE **)sdata.data, count, *adata.sel, *bdata.sel,
295
- *sdata.sel, adata.validity, bdata.validity);
305
+ BinaryScatterLoop<STATE_TYPE, A_TYPE, B_TYPE, OP>(
306
+ UnifiedVectorFormat::GetData<A_TYPE>(adata), aggr_input_data, UnifiedVectorFormat::GetData<B_TYPE>(bdata),
307
+ (STATE_TYPE **)sdata.data, count, *adata.sel, *bdata.sel, *sdata.sel, adata.validity, bdata.validity);
296
308
  }
297
309
 
298
310
  template <class STATE_TYPE, class A_TYPE, class B_TYPE, class OP>
@@ -302,9 +314,9 @@ public:
302
314
  a.ToUnifiedFormat(count, adata);
303
315
  b.ToUnifiedFormat(count, bdata);
304
316
 
305
- BinaryUpdateLoop<STATE_TYPE, A_TYPE, B_TYPE, OP>((A_TYPE *)adata.data, aggr_input_data, (B_TYPE *)bdata.data,
306
- (STATE_TYPE *)state, count, *adata.sel, *bdata.sel,
307
- adata.validity, bdata.validity);
317
+ BinaryUpdateLoop<STATE_TYPE, A_TYPE, B_TYPE, OP>(
318
+ UnifiedVectorFormat::GetData<A_TYPE>(adata), aggr_input_data, UnifiedVectorFormat::GetData<B_TYPE>(bdata),
319
+ (STATE_TYPE *)state, count, *adata.sel, *bdata.sel, adata.validity, bdata.validity);
308
320
  }
309
321
 
310
322
  template <class STATE_TYPE, class OP>
@@ -314,7 +326,7 @@ public:
314
326
  auto tdata = FlatVector::GetData<STATE_TYPE *>(target);
315
327
 
316
328
  for (idx_t i = 0; i < count; i++) {
317
- OP::template Combine<STATE_TYPE, OP>(*sdata[i], tdata[i], aggr_input_data);
329
+ OP::template Combine<STATE_TYPE, OP>(*sdata[i], *tdata[i], aggr_input_data);
318
330
  }
319
331
  }
320
332
 
@@ -326,17 +338,41 @@ public:
326
338
 
327
339
  auto sdata = ConstantVector::GetData<STATE_TYPE *>(states);
328
340
  auto rdata = ConstantVector::GetData<RESULT_TYPE>(result);
329
- OP::template Finalize<RESULT_TYPE, STATE_TYPE>(result, aggr_input_data, *sdata, rdata,
330
- ConstantVector::Validity(result), 0);
341
+ AggregateFinalizeData finalize_data(result, aggr_input_data);
342
+ OP::template Finalize<RESULT_TYPE, STATE_TYPE>(**sdata, *rdata, finalize_data);
331
343
  } else {
332
344
  D_ASSERT(states.GetVectorType() == VectorType::FLAT_VECTOR);
333
345
  result.SetVectorType(VectorType::FLAT_VECTOR);
334
346
 
335
347
  auto sdata = FlatVector::GetData<STATE_TYPE *>(states);
336
348
  auto rdata = FlatVector::GetData<RESULT_TYPE>(result);
349
+ AggregateFinalizeData finalize_data(result, aggr_input_data);
350
+ for (idx_t i = 0; i < count; i++) {
351
+ finalize_data.result_idx = i + offset;
352
+ OP::template Finalize<RESULT_TYPE, STATE_TYPE>(*sdata[i], rdata[finalize_data.result_idx],
353
+ finalize_data);
354
+ }
355
+ }
356
+ }
357
+
358
+ template <class STATE_TYPE, class OP>
359
+ static void VoidFinalize(Vector &states, AggregateInputData &aggr_input_data, Vector &result, idx_t count,
360
+ idx_t offset) {
361
+ if (states.GetVectorType() == VectorType::CONSTANT_VECTOR) {
362
+ result.SetVectorType(VectorType::CONSTANT_VECTOR);
363
+
364
+ auto sdata = ConstantVector::GetData<STATE_TYPE *>(states);
365
+ AggregateFinalizeData finalize_data(result, aggr_input_data);
366
+ OP::template Finalize<STATE_TYPE>(**sdata, finalize_data);
367
+ } else {
368
+ D_ASSERT(states.GetVectorType() == VectorType::FLAT_VECTOR);
369
+ result.SetVectorType(VectorType::FLAT_VECTOR);
370
+
371
+ auto sdata = FlatVector::GetData<STATE_TYPE *>(states);
372
+ AggregateFinalizeData finalize_data(result, aggr_input_data);
337
373
  for (idx_t i = 0; i < count; i++) {
338
- OP::template Finalize<RESULT_TYPE, STATE_TYPE>(result, aggr_input_data, sdata[i], rdata,
339
- FlatVector::Validity(result), i + offset);
374
+ finalize_data.result_idx = i + offset;
375
+ OP::template Finalize<STATE_TYPE>(*sdata[i], finalize_data);
340
376
  }
341
377
  }
342
378
  }
@@ -348,15 +384,15 @@ public:
348
384
 
349
385
  auto idata = FlatVector::GetData<const INPUT_TYPE>(input) - bias;
350
386
  const auto &ivalid = FlatVector::Validity(input);
351
- OP::template Window<STATE, INPUT_TYPE, RESULT_TYPE>(idata, ifilter, ivalid, aggr_input_data, (STATE *)state,
352
- frame, prev, result, rid, bias);
387
+ OP::template Window<STATE, INPUT_TYPE, RESULT_TYPE>(
388
+ idata, ifilter, ivalid, aggr_input_data, *reinterpret_cast<STATE *>(state), frame, prev, result, rid, bias);
353
389
  }
354
390
 
355
391
  template <class STATE_TYPE, class OP>
356
392
  static void Destroy(Vector &states, AggregateInputData &aggr_input_data, idx_t count) {
357
393
  auto sdata = FlatVector::GetData<STATE_TYPE *>(states);
358
394
  for (idx_t i = 0; i < count; i++) {
359
- OP::template Destroy<STATE_TYPE>(aggr_input_data, sdata[i]);
395
+ OP::template Destroy<STATE_TYPE>(*sdata[i], aggr_input_data);
360
396
  }
361
397
  }
362
398
  };