duckdb 0.8.1-dev2.0 → 0.8.1-dev219.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 (586) hide show
  1. package/binding.gyp +8 -8
  2. package/package.json +1 -1
  3. package/src/duckdb/extension/icu/icu-datepart.cpp +1 -1
  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/parquet/column_reader.cpp +57 -52
  10. package/src/duckdb/extension/parquet/column_writer.cpp +57 -45
  11. package/src/duckdb/extension/parquet/include/cast_column_reader.hpp +1 -1
  12. package/src/duckdb/extension/parquet/include/column_reader.hpp +5 -4
  13. package/src/duckdb/extension/parquet/include/column_writer.hpp +24 -0
  14. package/src/duckdb/extension/parquet/include/decode_utils.hpp +6 -0
  15. package/src/duckdb/extension/parquet/include/list_column_reader.hpp +1 -1
  16. package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +4 -4
  17. package/src/duckdb/extension/parquet/include/parquet_rle_bp_decoder.hpp +4 -5
  18. package/src/duckdb/extension/parquet/include/resizable_buffer.hpp +4 -4
  19. package/src/duckdb/extension/parquet/include/row_number_column_reader.hpp +1 -1
  20. package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +1 -1
  21. package/src/duckdb/extension/parquet/parquet-extension.cpp +1 -1
  22. package/src/duckdb/extension/parquet/parquet_metadata.cpp +1 -1
  23. package/src/duckdb/extension/parquet/parquet_reader.cpp +18 -18
  24. package/src/duckdb/extension/parquet/parquet_statistics.cpp +23 -26
  25. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +2 -2
  26. package/src/duckdb/extension/parquet/parquet_writer.cpp +3 -3
  27. package/src/duckdb/extension/parquet/zstd_file_system.cpp +3 -3
  28. package/src/duckdb/src/catalog/catalog.cpp +5 -21
  29. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +113 -0
  30. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +7 -0
  31. package/src/duckdb/src/catalog/catalog_entry.cpp +4 -4
  32. package/src/duckdb/src/catalog/catalog_search_path.cpp +49 -12
  33. package/src/duckdb/src/catalog/catalog_set.cpp +1 -1
  34. package/src/duckdb/src/catalog/default/default_types.cpp +9 -84
  35. package/src/duckdb/src/catalog/dependency_manager.cpp +2 -2
  36. package/src/duckdb/src/catalog/duck_catalog.cpp +1 -0
  37. package/src/duckdb/src/common/adbc/adbc.cpp +301 -106
  38. package/src/duckdb/src/common/adbc/driver_manager.cpp +10 -22
  39. package/src/duckdb/src/common/arrow/arrow_appender.cpp +12 -12
  40. package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +7 -7
  41. package/src/duckdb/src/common/checksum.cpp +1 -1
  42. package/src/duckdb/src/common/compressed_file_system.cpp +6 -6
  43. package/src/duckdb/src/common/crypto/md5.cpp +9 -9
  44. package/src/duckdb/src/common/exception.cpp +4 -1
  45. package/src/duckdb/src/common/exception_format_value.cpp +19 -14
  46. package/src/duckdb/src/common/field_writer.cpp +1 -1
  47. package/src/duckdb/src/common/file_system.cpp +15 -2
  48. package/src/duckdb/src/common/fsst.cpp +11 -6
  49. package/src/duckdb/src/common/gzip_file_system.cpp +8 -8
  50. package/src/duckdb/src/common/hive_partitioning.cpp +1 -1
  51. package/src/duckdb/src/common/local_file_system.cpp +11 -11
  52. package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
  53. package/src/duckdb/src/common/pipe_file_system.cpp +2 -2
  54. package/src/duckdb/src/common/radix_partitioning.cpp +2 -2
  55. package/src/duckdb/src/common/row_operations/row_heap_gather.cpp +1 -1
  56. package/src/duckdb/src/common/row_operations/row_heap_scatter.cpp +5 -5
  57. package/src/duckdb/src/common/row_operations/row_match.cpp +1 -1
  58. package/src/duckdb/src/common/row_operations/row_radix_scatter.cpp +2 -2
  59. package/src/duckdb/src/common/row_operations/row_scatter.cpp +4 -4
  60. package/src/duckdb/src/common/serializer/binary_deserializer.cpp +1 -1
  61. package/src/duckdb/src/common/serializer/binary_serializer.cpp +3 -3
  62. package/src/duckdb/src/common/serializer.cpp +1 -1
  63. package/src/duckdb/src/common/sort/comparators.cpp +1 -1
  64. package/src/duckdb/src/common/sort/merge_sorter.cpp +7 -2
  65. package/src/duckdb/src/common/sort/partition_state.cpp +2 -2
  66. package/src/duckdb/src/common/types/bit.cpp +5 -5
  67. package/src/duckdb/src/common/types/blob.cpp +8 -8
  68. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +4 -4
  69. package/src/duckdb/src/common/types/column/column_data_collection.cpp +3 -3
  70. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +1 -1
  71. package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
  72. package/src/duckdb/src/common/types/hash.cpp +2 -2
  73. package/src/duckdb/src/common/types/hyperloglog.cpp +22 -21
  74. package/src/duckdb/src/common/types/list_segment.cpp +77 -49
  75. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +1 -1
  76. package/src/duckdb/src/common/types/row/row_data_collection_scanner.cpp +5 -4
  77. package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +5 -3
  78. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +59 -24
  79. package/src/duckdb/src/common/types/string_heap.cpp +1 -1
  80. package/src/duckdb/src/common/types/value.cpp +3 -2
  81. package/src/duckdb/src/common/types/vector.cpp +101 -101
  82. package/src/duckdb/src/common/types/vector_cache.cpp +6 -6
  83. package/src/duckdb/src/common/types/vector_constants.cpp +2 -1
  84. package/src/duckdb/src/common/types.cpp +44 -33
  85. package/src/duckdb/src/common/vector_operations/boolean_operators.cpp +2 -2
  86. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +12 -12
  87. package/src/duckdb/src/common/vector_operations/vector_hash.cpp +13 -11
  88. package/src/duckdb/src/common/vector_operations/vector_storage.cpp +1 -1
  89. package/src/duckdb/src/core_functions/aggregate/algebraic/avg.cpp +30 -33
  90. package/src/duckdb/src/core_functions/aggregate/algebraic/covar.cpp +0 -4
  91. package/src/duckdb/src/core_functions/aggregate/distributive/approx_count.cpp +32 -36
  92. package/src/duckdb/src/core_functions/aggregate/distributive/arg_min_max.cpp +53 -66
  93. package/src/duckdb/src/core_functions/aggregate/distributive/bitagg.cpp +48 -48
  94. package/src/duckdb/src/core_functions/aggregate/distributive/bitstring_agg.cpp +44 -44
  95. package/src/duckdb/src/core_functions/aggregate/distributive/bool.cpp +32 -32
  96. package/src/duckdb/src/core_functions/aggregate/distributive/entropy.cpp +34 -34
  97. package/src/duckdb/src/core_functions/aggregate/distributive/kurtosis.cpp +30 -31
  98. package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +91 -103
  99. package/src/duckdb/src/core_functions/aggregate/distributive/product.cpp +17 -17
  100. package/src/duckdb/src/core_functions/aggregate/distributive/skew.cpp +25 -27
  101. package/src/duckdb/src/core_functions/aggregate/distributive/string_agg.cpp +36 -37
  102. package/src/duckdb/src/core_functions/aggregate/distributive/sum.cpp +22 -22
  103. package/src/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp +48 -84
  104. package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +49 -51
  105. package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +97 -121
  106. package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +62 -99
  107. package/src/duckdb/src/core_functions/aggregate/nested/histogram.cpp +24 -26
  108. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +22 -23
  109. package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +16 -18
  110. package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +22 -25
  111. package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +19 -24
  112. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +18 -23
  113. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +14 -18
  114. package/src/duckdb/src/core_functions/function_list.cpp +1 -0
  115. package/src/duckdb/src/core_functions/scalar/blob/base64.cpp +1 -1
  116. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +45 -45
  117. package/src/duckdb/src/core_functions/scalar/date/strftime.cpp +2 -2
  118. package/src/duckdb/src/core_functions/scalar/generic/current_setting.cpp +1 -1
  119. package/src/duckdb/src/core_functions/scalar/generic/least.cpp +2 -2
  120. package/src/duckdb/src/core_functions/scalar/generic/stats.cpp +1 -1
  121. package/src/duckdb/src/core_functions/scalar/generic/system_functions.cpp +14 -0
  122. package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +3 -3
  123. package/src/duckdb/src/core_functions/scalar/list/flatten.cpp +2 -4
  124. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +3 -3
  125. package/src/duckdb/src/core_functions/scalar/list/list_lambdas.cpp +6 -7
  126. package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +1 -1
  127. package/src/duckdb/src/core_functions/scalar/map/cardinality.cpp +1 -1
  128. package/src/duckdb/src/core_functions/scalar/map/map.cpp +2 -2
  129. package/src/duckdb/src/core_functions/scalar/map/map_concat.cpp +4 -1
  130. package/src/duckdb/src/core_functions/scalar/map/map_extract.cpp +5 -9
  131. package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +3 -3
  132. package/src/duckdb/src/core_functions/scalar/string/starts_with.cpp +3 -2
  133. package/src/duckdb/src/core_functions/scalar/string/string_split.cpp +4 -4
  134. package/src/duckdb/src/core_functions/scalar/string/trim.cpp +1 -1
  135. package/src/duckdb/src/core_functions/scalar/union/union_extract.cpp +1 -1
  136. package/src/duckdb/src/execution/adaptive_filter.cpp +1 -1
  137. package/src/duckdb/src/execution/expression_executor/execute_case.cpp +10 -10
  138. package/src/duckdb/src/execution/expression_executor/execute_conjunction.cpp +7 -7
  139. package/src/duckdb/src/execution/expression_executor.cpp +33 -28
  140. package/src/duckdb/src/execution/index/art/art.cpp +30 -32
  141. package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +3 -4
  142. package/src/duckdb/src/execution/join_hashtable.cpp +4 -4
  143. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_inner.cpp +4 -4
  144. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_mark.cpp +2 -2
  145. package/src/duckdb/src/execution/operator/aggregate/distinct_aggregate_data.cpp +1 -1
  146. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +1 -1
  147. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +2 -2
  148. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +4 -4
  149. package/src/duckdb/src/execution/operator/filter/physical_filter.cpp +1 -1
  150. package/src/duckdb/src/execution/operator/helper/physical_reset.cpp +5 -2
  151. package/src/duckdb/src/execution/operator/helper/physical_set.cpp +5 -1
  152. package/src/duckdb/src/execution/operator/join/outer_join_marker.cpp +1 -1
  153. package/src/duckdb/src/execution/operator/join/perfect_hash_join_executor.cpp +1 -1
  154. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +2 -2
  155. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +4 -4
  156. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +3 -3
  157. package/src/duckdb/src/execution/operator/join/physical_nested_loop_join.cpp +3 -3
  158. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +3 -3
  159. package/src/duckdb/src/execution/operator/order/physical_top_n.cpp +1 -1
  160. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +2 -2
  161. package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +2 -2
  162. package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +2 -0
  163. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -3
  164. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
  165. package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -2
  166. package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +1 -1
  167. package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +3 -3
  168. package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +2 -1
  169. package/src/duckdb/src/execution/operator/scan/physical_expression_scan.cpp +1 -1
  170. package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +2 -2
  171. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +1 -1
  172. package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +1 -1
  173. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +1 -1
  174. package/src/duckdb/src/execution/physical_plan/plan_create_table.cpp +1 -1
  175. package/src/duckdb/src/execution/physical_plan_generator.cpp +2 -2
  176. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +1 -1
  177. package/src/duckdb/src/execution/reservoir_sample.cpp +2 -2
  178. package/src/duckdb/src/execution/window_segment_tree.cpp +8 -6
  179. package/src/duckdb/src/function/aggregate/distributive/count.cpp +158 -20
  180. package/src/duckdb/src/function/aggregate/distributive/first.cpp +66 -74
  181. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +13 -13
  182. package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
  183. package/src/duckdb/src/function/cast/decimal_cast.cpp +1 -1
  184. package/src/duckdb/src/function/cast/enum_casts.cpp +2 -2
  185. package/src/duckdb/src/function/cast/string_cast.cpp +11 -11
  186. package/src/duckdb/src/function/cast/union_casts.cpp +2 -2
  187. package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +3 -2
  188. package/src/duckdb/src/function/pragma/pragma_queries.cpp +33 -23
  189. package/src/duckdb/src/function/scalar/generic/constant_or_null.cpp +1 -1
  190. package/src/duckdb/src/function/scalar/list/list_concat.cpp +2 -2
  191. package/src/duckdb/src/function/scalar/list/list_extract.cpp +3 -3
  192. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +2 -3
  193. package/src/duckdb/src/function/scalar/string/concat.cpp +8 -7
  194. package/src/duckdb/src/function/scalar/string/contains.cpp +4 -4
  195. package/src/duckdb/src/function/scalar/string/like.cpp +5 -5
  196. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +4 -4
  197. package/src/duckdb/src/function/scalar/string/regexp.cpp +3 -3
  198. package/src/duckdb/src/function/scalar/string/strip_accents.cpp +1 -1
  199. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +1 -1
  200. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +25 -23
  201. package/src/duckdb/src/function/scalar_function.cpp +3 -3
  202. package/src/duckdb/src/function/table/arrow.cpp +6 -6
  203. package/src/duckdb/src/function/table/arrow_conversion.cpp +67 -61
  204. package/src/duckdb/src/function/table/checkpoint.cpp +1 -1
  205. package/src/duckdb/src/function/table/copy_csv.cpp +11 -7
  206. package/src/duckdb/src/function/table/glob.cpp +1 -1
  207. package/src/duckdb/src/function/table/pragma_last_profiling_output.cpp +1 -1
  208. package/src/duckdb/src/function/table/range.cpp +4 -4
  209. package/src/duckdb/src/function/table/read_csv.cpp +15 -23
  210. package/src/duckdb/src/function/table/repeat.cpp +2 -2
  211. package/src/duckdb/src/function/table/repeat_row.cpp +10 -3
  212. package/src/duckdb/src/function/table/system/duckdb_functions.cpp +1 -1
  213. package/src/duckdb/src/function/table/system/test_vector_types.cpp +1 -1
  214. package/src/duckdb/src/function/table/table_scan.cpp +2 -2
  215. package/src/duckdb/src/function/table/unnest.cpp +1 -1
  216. package/src/duckdb/src/function/table/version/pragma_version.cpp +3 -3
  217. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +2 -5
  218. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +2 -0
  219. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_catalog_entry.hpp +6 -0
  220. package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +2 -2
  221. package/src/duckdb/src/include/duckdb/catalog/catalog_search_path.hpp +8 -2
  222. package/src/duckdb/src/include/duckdb/catalog/default/builtin_types/types.hpp +97 -0
  223. package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +5 -0
  224. package/src/duckdb/src/include/duckdb/common/allocator.hpp +15 -4
  225. package/src/duckdb/src/include/duckdb/common/arrow/arrow_buffer.hpp +7 -2
  226. package/src/duckdb/src/include/duckdb/common/crypto/md5.hpp +2 -2
  227. package/src/duckdb/src/include/duckdb/common/exception.hpp +5 -2
  228. package/src/duckdb/src/include/duckdb/common/field_writer.hpp +3 -3
  229. package/src/duckdb/src/include/duckdb/common/file_system.hpp +11 -0
  230. package/src/duckdb/src/include/duckdb/common/fsst.hpp +2 -3
  231. package/src/duckdb/src/include/duckdb/common/radix.hpp +3 -3
  232. package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +1 -1
  233. package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +4 -1
  234. package/src/duckdb/src/include/duckdb/common/serializer.hpp +4 -4
  235. package/src/duckdb/src/include/duckdb/common/typedefs.hpp +30 -0
  236. package/src/duckdb/src/include/duckdb/common/types/column/partitioned_column_data.hpp +12 -0
  237. package/src/duckdb/src/include/duckdb/common/types/hyperloglog.hpp +6 -2
  238. package/src/duckdb/src/include/duckdb/common/types/null_value.hpp +1 -1
  239. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +12 -0
  240. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +10 -10
  241. package/src/duckdb/src/include/duckdb/common/types/value.hpp +1 -1
  242. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +9 -0
  243. package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +18 -6
  244. package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +112 -76
  245. package/src/duckdb/src/include/duckdb/common/vector_operations/binary_executor.hpp +16 -15
  246. package/src/duckdb/src/include/duckdb/common/vector_operations/generic_executor.hpp +11 -11
  247. package/src/duckdb/src/include/duckdb/common/vector_operations/ternary_executor.hpp +23 -19
  248. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +3 -3
  249. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +20 -24
  250. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +36 -39
  251. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/stddev.hpp +57 -53
  252. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +8 -9
  253. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +16 -18
  254. package/src/duckdb/src/include/duckdb/core_functions/aggregate/sum_helpers.hpp +7 -8
  255. package/src/duckdb/src/include/duckdb/core_functions/scalar/generic_functions.hpp +9 -0
  256. package/src/duckdb/src/include/duckdb/core_functions/scalar/map_functions.hpp +2 -6
  257. package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +16 -36
  258. package/src/duckdb/src/include/duckdb/execution/expression_executor_state.hpp +14 -2
  259. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -3
  260. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_result_collector.hpp +3 -0
  261. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_buffer.hpp +1 -1
  262. package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +5 -2
  263. package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +12 -12
  264. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +8 -29
  265. package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +95 -0
  266. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +13 -2
  267. package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +4 -4
  268. package/src/duckdb/src/include/duckdb/function/compression_function.hpp +44 -0
  269. package/src/duckdb/src/include/duckdb/function/copy_function.hpp +6 -6
  270. package/src/duckdb/src/include/duckdb/function/function.hpp +3 -3
  271. package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +3 -1
  272. package/src/duckdb/src/include/duckdb/function/macro_function.hpp +2 -2
  273. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +3 -3
  274. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
  275. package/src/duckdb/src/include/duckdb/function/table_function.hpp +6 -6
  276. package/src/duckdb/src/include/duckdb/main/capi/cast/utils.hpp +1 -1
  277. package/src/duckdb/src/include/duckdb/main/config.hpp +2 -0
  278. package/src/duckdb/src/include/duckdb/main/materialized_query_result.hpp +3 -0
  279. package/src/duckdb/src/include/duckdb/main/pending_query_result.hpp +3 -0
  280. package/src/duckdb/src/include/duckdb/main/query_result.hpp +17 -0
  281. package/src/duckdb/src/include/duckdb/main/relation.hpp +12 -0
  282. package/src/duckdb/src/include/duckdb/main/settings.hpp +9 -0
  283. package/src/duckdb/src/include/duckdb/main/stream_query_result.hpp +3 -0
  284. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  285. package/src/duckdb/src/include/duckdb/parser/base_expression.hpp +6 -12
  286. package/src/duckdb/src/include/duckdb/parser/constraint.hpp +2 -2
  287. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +1 -1
  288. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +1 -1
  289. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +1 -1
  290. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +1 -1
  291. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +1 -1
  292. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +1 -1
  293. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +1 -1
  294. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +1 -1
  295. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +1 -1
  296. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +1 -1
  297. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +1 -1
  298. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +1 -1
  299. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +1 -1
  300. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +1 -1
  301. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +1 -1
  302. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +1 -1
  303. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +1 -1
  304. package/src/duckdb/src/include/duckdb/parser/expression_map.hpp +1 -1
  305. package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +2 -2
  306. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -1
  307. package/src/duckdb/src/include/duckdb/parser/parser.hpp +2 -0
  308. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -2
  309. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +36 -5
  310. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +7 -4
  311. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +1 -1
  312. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +1 -1
  313. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -2
  314. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +1 -1
  315. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +1 -1
  316. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +1 -1
  317. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +1 -1
  318. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +1 -1
  319. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +4 -3
  320. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +107 -91
  321. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -2
  322. package/src/duckdb/src/include/duckdb/planner/bound_constraint.hpp +2 -2
  323. package/src/duckdb/src/include/duckdb/planner/bound_query_node.hpp +2 -2
  324. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +34 -1
  325. package/src/duckdb/src/include/duckdb/planner/bound_tableref.hpp +2 -2
  326. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +1 -1
  327. package/src/duckdb/src/include/duckdb/planner/expression/bound_between_expression.hpp +1 -1
  328. package/src/duckdb/src/include/duckdb/planner/expression/bound_case_expression.hpp +1 -1
  329. package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +1 -1
  330. package/src/duckdb/src/include/duckdb/planner/expression/bound_columnref_expression.hpp +1 -1
  331. package/src/duckdb/src/include/duckdb/planner/expression/bound_comparison_expression.hpp +1 -1
  332. package/src/duckdb/src/include/duckdb/planner/expression/bound_conjunction_expression.hpp +1 -1
  333. package/src/duckdb/src/include/duckdb/planner/expression/bound_constant_expression.hpp +1 -1
  334. package/src/duckdb/src/include/duckdb/planner/expression/bound_function_expression.hpp +1 -1
  335. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambda_expression.hpp +1 -1
  336. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambdaref_expression.hpp +1 -1
  337. package/src/duckdb/src/include/duckdb/planner/expression/bound_operator_expression.hpp +1 -1
  338. package/src/duckdb/src/include/duckdb/planner/expression/bound_parameter_expression.hpp +1 -1
  339. package/src/duckdb/src/include/duckdb/planner/expression/bound_reference_expression.hpp +1 -1
  340. package/src/duckdb/src/include/duckdb/planner/expression/bound_subquery_expression.hpp +1 -1
  341. package/src/duckdb/src/include/duckdb/planner/expression/bound_unnest_expression.hpp +1 -1
  342. package/src/duckdb/src/include/duckdb/planner/expression/bound_window_expression.hpp +1 -1
  343. package/src/duckdb/src/include/duckdb/planner/expression.hpp +5 -7
  344. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
  345. package/src/duckdb/src/include/duckdb/planner/filter/conjunction_filter.hpp +6 -0
  346. package/src/duckdb/src/include/duckdb/planner/filter/constant_filter.hpp +3 -0
  347. package/src/duckdb/src/include/duckdb/planner/filter/null_filter.hpp +6 -0
  348. package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +2 -2
  349. package/src/duckdb/src/include/duckdb/planner/operator/logical_pivot.hpp +3 -0
  350. package/src/duckdb/src/include/duckdb/planner/table_binding.hpp +26 -0
  351. package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +17 -0
  352. package/src/duckdb/src/include/duckdb/planner/tableref/bound_pivotref.hpp +3 -0
  353. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_analyze.hpp +1 -1
  354. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
  355. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_analyze.hpp +2 -2
  356. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
  357. package/src/duckdb/src/include/duckdb/storage/index.hpp +2 -2
  358. package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +1 -1
  359. package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +12 -0
  360. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +1 -1
  361. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +25 -2
  362. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +12 -0
  363. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +22 -0
  364. package/src/duckdb/src/include/duckdb/transaction/duck_transaction_manager.hpp +2 -2
  365. package/src/duckdb/src/include/duckdb/transaction/transaction.hpp +2 -2
  366. package/src/duckdb/src/main/capi/appender-c.cpp +5 -5
  367. package/src/duckdb/src/main/capi/arrow-c.cpp +10 -10
  368. package/src/duckdb/src/main/capi/cast/from_decimal-c.cpp +1 -1
  369. package/src/duckdb/src/main/capi/cast/utils-c.cpp +1 -1
  370. package/src/duckdb/src/main/capi/config-c.cpp +1 -1
  371. package/src/duckdb/src/main/capi/data_chunk-c.cpp +17 -17
  372. package/src/duckdb/src/main/capi/duckdb-c.cpp +4 -4
  373. package/src/duckdb/src/main/capi/duckdb_value-c.cpp +4 -4
  374. package/src/duckdb/src/main/capi/logical_types-c.cpp +22 -21
  375. package/src/duckdb/src/main/capi/pending-c.cpp +6 -6
  376. package/src/duckdb/src/main/capi/prepared-c.cpp +10 -10
  377. package/src/duckdb/src/main/capi/replacement_scan-c.cpp +6 -6
  378. package/src/duckdb/src/main/capi/result-c.cpp +23 -23
  379. package/src/duckdb/src/main/capi/table_function-c.cpp +1 -1
  380. package/src/duckdb/src/main/client_context.cpp +3 -3
  381. package/src/duckdb/src/main/config.cpp +1 -0
  382. package/src/duckdb/src/main/database_manager.cpp +1 -1
  383. package/src/duckdb/src/main/error_manager.cpp +1 -1
  384. package/src/duckdb/src/main/extension/extension_load.cpp +1 -1
  385. package/src/duckdb/src/main/relation/create_table_relation.cpp +1 -1
  386. package/src/duckdb/src/main/relation/create_view_relation.cpp +1 -1
  387. package/src/duckdb/src/main/relation/delete_relation.cpp +1 -1
  388. package/src/duckdb/src/main/relation/explain_relation.cpp +1 -1
  389. package/src/duckdb/src/main/relation/insert_relation.cpp +1 -1
  390. package/src/duckdb/src/main/relation/update_relation.cpp +1 -1
  391. package/src/duckdb/src/main/relation/write_csv_relation.cpp +1 -1
  392. package/src/duckdb/src/main/relation/write_parquet_relation.cpp +1 -1
  393. package/src/duckdb/src/main/relation.cpp +1 -1
  394. package/src/duckdb/src/main/settings/settings.cpp +22 -6
  395. package/src/duckdb/src/optimizer/deliminator.cpp +12 -12
  396. package/src/duckdb/src/optimizer/expression_heuristics.cpp +1 -0
  397. package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -3
  398. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +10 -10
  399. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +4 -7
  400. package/src/duckdb/src/optimizer/matcher/expression_matcher.cpp +1 -1
  401. package/src/duckdb/src/optimizer/pullup/pullup_projection.cpp +2 -2
  402. package/src/duckdb/src/optimizer/regex_range_filter.cpp +2 -4
  403. package/src/duckdb/src/optimizer/rule/distributivity.cpp +2 -2
  404. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +6 -6
  405. package/src/duckdb/src/optimizer/statistics/operator/propagate_get.cpp +2 -2
  406. package/src/duckdb/src/parallel/executor.cpp +1 -1
  407. package/src/duckdb/src/parser/base_expression.cpp +2 -5
  408. package/src/duckdb/src/parser/column_definition.cpp +5 -8
  409. package/src/duckdb/src/parser/expression/between_expression.cpp +4 -4
  410. package/src/duckdb/src/parser/expression/case_expression.cpp +6 -6
  411. package/src/duckdb/src/parser/expression/cast_expression.cpp +4 -4
  412. package/src/duckdb/src/parser/expression/collate_expression.cpp +3 -3
  413. package/src/duckdb/src/parser/expression/columnref_expression.cpp +4 -4
  414. package/src/duckdb/src/parser/expression/comparison_expression.cpp +3 -3
  415. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +2 -2
  416. package/src/duckdb/src/parser/expression/constant_expression.cpp +2 -2
  417. package/src/duckdb/src/parser/expression/function_expression.cpp +10 -14
  418. package/src/duckdb/src/parser/expression/lambda_expression.cpp +2 -2
  419. package/src/duckdb/src/parser/expression/operator_expression.cpp +4 -4
  420. package/src/duckdb/src/parser/expression/parameter_expression.cpp +2 -2
  421. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +3 -3
  422. package/src/duckdb/src/parser/expression/star_expression.cpp +9 -9
  423. package/src/duckdb/src/parser/expression/subquery_expression.cpp +5 -5
  424. package/src/duckdb/src/parser/expression/window_expression.cpp +13 -24
  425. package/src/duckdb/src/parser/parsed_expression.cpp +34 -18
  426. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +4 -4
  427. package/src/duckdb/src/parser/parser.cpp +4 -4
  428. package/src/duckdb/src/parser/query_node/select_node.cpp +6 -13
  429. package/src/duckdb/src/parser/query_node.cpp +7 -6
  430. package/src/duckdb/src/parser/result_modifier.cpp +25 -18
  431. package/src/duckdb/src/parser/statement/select_statement.cpp +3 -3
  432. package/src/duckdb/src/parser/tableref/basetableref.cpp +4 -4
  433. package/src/duckdb/src/parser/tableref/emptytableref.cpp +1 -1
  434. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +5 -5
  435. package/src/duckdb/src/parser/tableref/joinref.cpp +6 -6
  436. package/src/duckdb/src/parser/tableref/pivotref.cpp +10 -15
  437. package/src/duckdb/src/parser/tableref/subqueryref.cpp +3 -3
  438. package/src/duckdb/src/parser/tableref/table_function.cpp +3 -3
  439. package/src/duckdb/src/parser/tableref.cpp +12 -3
  440. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +7 -7
  441. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +4 -4
  442. package/src/duckdb/src/parser/transform/expression/transform_boolean_test.cpp +4 -4
  443. package/src/duckdb/src/parser/transform/expression/transform_case.cpp +8 -10
  444. package/src/duckdb/src/parser/transform/expression/transform_cast.cpp +7 -9
  445. package/src/duckdb/src/parser/transform/expression/transform_coalesce.cpp +3 -5
  446. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +22 -22
  447. package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +2 -2
  448. package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +42 -44
  449. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +70 -75
  450. package/src/duckdb/src/parser/transform/expression/transform_grouping_function.cpp +4 -4
  451. package/src/duckdb/src/parser/transform/expression/transform_interval.cpp +7 -7
  452. package/src/duckdb/src/parser/transform/expression/transform_is_null.cpp +4 -5
  453. package/src/duckdb/src/parser/transform/expression/transform_lambda.cpp +5 -6
  454. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +28 -29
  455. package/src/duckdb/src/parser/transform/expression/transform_param_ref.cpp +13 -14
  456. package/src/duckdb/src/parser/transform/expression/transform_positional_reference.cpp +4 -4
  457. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +9 -10
  458. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +28 -32
  459. package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +18 -18
  460. package/src/duckdb/src/parser/transform/helpers/transform_sample.cpp +3 -3
  461. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +27 -26
  462. package/src/duckdb/src/parser/transform/statement/transform_alter_sequence.cpp +11 -14
  463. package/src/duckdb/src/parser/transform/statement/transform_alter_table.cpp +14 -16
  464. package/src/duckdb/src/parser/transform/statement/transform_attach.cpp +8 -9
  465. package/src/duckdb/src/parser/transform/statement/transform_call.cpp +2 -5
  466. package/src/duckdb/src/parser/transform/statement/transform_checkpoint.cpp +4 -6
  467. package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +22 -23
  468. package/src/duckdb/src/parser/transform/statement/transform_create_database.cpp +3 -4
  469. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +14 -18
  470. package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +13 -15
  471. package/src/duckdb/src/parser/transform/statement/transform_create_schema.cpp +8 -10
  472. package/src/duckdb/src/parser/transform/statement/transform_create_sequence.cpp +8 -10
  473. package/src/duckdb/src/parser/transform/statement/transform_create_table.cpp +26 -28
  474. package/src/duckdb/src/parser/transform/statement/transform_create_table_as.cpp +8 -10
  475. package/src/duckdb/src/parser/transform/statement/transform_create_type.cpp +12 -15
  476. package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +13 -18
  477. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +11 -13
  478. package/src/duckdb/src/parser/transform/statement/transform_detach.cpp +3 -4
  479. package/src/duckdb/src/parser/transform/statement/transform_drop.cpp +20 -22
  480. package/src/duckdb/src/parser/transform/statement/transform_explain.cpp +5 -7
  481. package/src/duckdb/src/parser/transform/statement/transform_export.cpp +5 -6
  482. package/src/duckdb/src/parser/transform/statement/transform_import.cpp +2 -3
  483. package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +21 -24
  484. package/src/duckdb/src/parser/transform/statement/transform_load.cpp +4 -5
  485. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -7
  486. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +7 -9
  487. package/src/duckdb/src/parser/transform/statement/transform_prepare.cpp +11 -19
  488. package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +12 -14
  489. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +12 -9
  490. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +34 -34
  491. package/src/duckdb/src/parser/transform/statement/transform_set.cpp +18 -19
  492. package/src/duckdb/src/parser/transform/statement/transform_show.cpp +5 -7
  493. package/src/duckdb/src/parser/transform/statement/transform_show_select.cpp +4 -5
  494. package/src/duckdb/src/parser/transform/statement/transform_transaction.cpp +3 -5
  495. package/src/duckdb/src/parser/transform/statement/transform_update.cpp +10 -13
  496. package/src/duckdb/src/parser/transform/statement/transform_upsert.cpp +4 -4
  497. package/src/duckdb/src/parser/transform/statement/transform_use.cpp +2 -3
  498. package/src/duckdb/src/parser/transform/statement/transform_vacuum.cpp +6 -10
  499. package/src/duckdb/src/parser/transform/tableref/transform_base_tableref.cpp +18 -18
  500. package/src/duckdb/src/parser/transform/tableref/transform_from.cpp +5 -5
  501. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +11 -11
  502. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +30 -27
  503. package/src/duckdb/src/parser/transform/tableref/transform_subquery.cpp +5 -5
  504. package/src/duckdb/src/parser/transform/tableref/transform_table_function.cpp +13 -12
  505. package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +8 -8
  506. package/src/duckdb/src/parser/transformer.cpp +46 -46
  507. package/src/duckdb/src/planner/bind_context.cpp +9 -10
  508. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +1 -1
  509. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +1 -1
  510. package/src/duckdb/src/planner/binder/expression/bind_positional_reference_expression.cpp +7 -2
  511. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +1 -1
  512. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +6 -3
  513. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +8 -8
  514. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +4 -4
  515. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +13 -5
  516. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +2 -2
  517. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +2 -114
  518. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +4 -2
  519. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +17 -7
  520. package/src/duckdb/src/planner/binder.cpp +1 -1
  521. package/src/duckdb/src/planner/bound_result_modifier.cpp +16 -11
  522. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +5 -5
  523. package/src/duckdb/src/planner/expression/bound_between_expression.cpp +5 -5
  524. package/src/duckdb/src/planner/expression/bound_case_expression.cpp +5 -5
  525. package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +3 -3
  526. package/src/duckdb/src/planner/expression/bound_columnref_expression.cpp +2 -2
  527. package/src/duckdb/src/planner/expression/bound_comparison_expression.cpp +4 -4
  528. package/src/duckdb/src/planner/expression/bound_conjunction_expression.cpp +2 -2
  529. package/src/duckdb/src/planner/expression/bound_constant_expression.cpp +2 -2
  530. package/src/duckdb/src/planner/expression/bound_expression.cpp +1 -1
  531. package/src/duckdb/src/planner/expression/bound_function_expression.cpp +3 -4
  532. package/src/duckdb/src/planner/expression/bound_lambda_expression.cpp +4 -5
  533. package/src/duckdb/src/planner/expression/bound_lambdaref_expression.cpp +2 -2
  534. package/src/duckdb/src/planner/expression/bound_operator_expression.cpp +3 -4
  535. package/src/duckdb/src/planner/expression/bound_parameter_expression.cpp +2 -2
  536. package/src/duckdb/src/planner/expression/bound_reference_expression.cpp +2 -2
  537. package/src/duckdb/src/planner/expression/bound_subquery_expression.cpp +1 -1
  538. package/src/duckdb/src/planner/expression/bound_unnest_expression.cpp +3 -3
  539. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +8 -21
  540. package/src/duckdb/src/planner/expression.cpp +15 -0
  541. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +2 -2
  542. package/src/duckdb/src/planner/expression_binder.cpp +3 -2
  543. package/src/duckdb/src/planner/expression_iterator.cpp +2 -2
  544. package/src/duckdb/src/planner/filter/conjunction_filter.cpp +2 -2
  545. package/src/duckdb/src/planner/filter/constant_filter.cpp +1 -1
  546. package/src/duckdb/src/planner/logical_operator.cpp +3 -4
  547. package/src/duckdb/src/planner/logical_operator_visitor.cpp +1 -1
  548. package/src/duckdb/src/planner/table_filter.cpp +1 -1
  549. package/src/duckdb/src/storage/arena_allocator.cpp +2 -2
  550. package/src/duckdb/src/storage/buffer/block_handle.cpp +1 -1
  551. package/src/duckdb/src/storage/checkpoint/write_overflow_strings_to_disk.cpp +2 -2
  552. package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -3
  553. package/src/duckdb/src/storage/compression/bitpacking.cpp +8 -8
  554. package/src/duckdb/src/storage/compression/dictionary_compression.cpp +36 -36
  555. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +11 -11
  556. package/src/duckdb/src/storage/compression/fsst.cpp +34 -34
  557. package/src/duckdb/src/storage/compression/rle.cpp +8 -8
  558. package/src/duckdb/src/storage/compression/string_uncompressed.cpp +13 -13
  559. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +11 -11
  560. package/src/duckdb/src/storage/data_table.cpp +8 -7
  561. package/src/duckdb/src/storage/index.cpp +1 -3
  562. package/src/duckdb/src/storage/local_storage.cpp +2 -1
  563. package/src/duckdb/src/storage/magic_bytes.cpp +1 -1
  564. package/src/duckdb/src/storage/single_file_block_manager.cpp +3 -3
  565. package/src/duckdb/src/storage/standard_buffer_manager.cpp +3 -3
  566. package/src/duckdb/src/storage/statistics/list_stats.cpp +1 -1
  567. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +1 -1
  568. package/src/duckdb/src/storage/statistics/string_stats.cpp +15 -14
  569. package/src/duckdb/src/storage/table/chunk_info.cpp +2 -2
  570. package/src/duckdb/src/storage/table/column_segment.cpp +3 -3
  571. package/src/duckdb/src/storage/table/list_column_data.cpp +8 -7
  572. package/src/duckdb/src/storage/table/row_group.cpp +4 -4
  573. package/src/duckdb/src/storage/table/standard_column_data.cpp +1 -1
  574. package/src/duckdb/src/storage/table/update_segment.cpp +12 -12
  575. package/src/duckdb/src/storage/wal_replay.cpp +5 -6
  576. package/src/duckdb/src/transaction/cleanup_state.cpp +3 -3
  577. package/src/duckdb/src/transaction/commit_state.cpp +8 -8
  578. package/src/duckdb/src/transaction/duck_transaction.cpp +9 -7
  579. package/src/duckdb/src/transaction/duck_transaction_manager.cpp +16 -16
  580. package/src/duckdb/src/transaction/rollback_state.cpp +3 -3
  581. package/src/duckdb/src/verification/prepared_statement_verifier.cpp +1 -1
  582. package/src/duckdb/src/verification/statement_verifier.cpp +3 -4
  583. package/src/duckdb/third_party/hyperloglog/hyperloglog.hpp +2 -2
  584. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +13479 -13564
  585. package/src/duckdb/third_party/pcg/pcg_extras.hpp +1 -1
  586. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +5 -5
@@ -12,7 +12,8 @@ namespace duckdb {
12
12
 
13
13
  WindowAggregateState::WindowAggregateState(AggregateObject aggr, const LogicalType &result_type_p)
14
14
  : aggr(std::move(aggr)), result_type(result_type_p), state(aggr.function.state_size()),
15
- statev(Value::POINTER((idx_t)state.data())), statep(Value::POINTER((idx_t)state.data())) {
15
+ statev(Value::POINTER(CastPointerToValue(state.data()))),
16
+ statep(Value::POINTER(CastPointerToValue(state.data()))) {
16
17
  statev.SetVectorType(VectorType::FLAT_VECTOR); // Prevent conversion of results to constants
17
18
  }
18
19
 
@@ -180,11 +181,12 @@ void WindowConstantAggregate::Compute(Vector &target, idx_t rid, idx_t start, id
180
181
  //===--------------------------------------------------------------------===//
181
182
  // WindowSegmentTree
182
183
  //===--------------------------------------------------------------------===//
183
- WindowSegmentTree::WindowSegmentTree(AggregateObject aggr, const LogicalType &result_type_p, DataChunk *input,
184
+ WindowSegmentTree::WindowSegmentTree(AggregateObject aggr_p, const LogicalType &result_type_p, DataChunk *input,
184
185
  const ValidityMask &filter_mask_p, WindowAggregationMode mode_p)
185
- : aggr(std::move(aggr)), result_type(result_type_p), state(aggr.function.state_size()),
186
- statep(Value::POINTER((idx_t)state.data())), frame(0, 0), statev(Value::POINTER((idx_t)state.data())),
187
- internal_nodes(0), input_ref(input), filter_mask(filter_mask_p), mode(mode_p) {
186
+ : aggr(std::move(aggr_p)), result_type(result_type_p), state(aggr.function.state_size()),
187
+ statep(Value::POINTER(CastPointerToValue(state.data()))), frame(0, 0),
188
+ statev(Value::POINTER(CastPointerToValue(state.data()))), internal_nodes(0), input_ref(input),
189
+ filter_mask(filter_mask_p), mode(mode_p) {
188
190
  statep.Flatten(input->size());
189
191
  statev.SetVectorType(VectorType::FLAT_VECTOR); // Prevent conversion of results to constants
190
192
 
@@ -212,7 +214,7 @@ WindowSegmentTree::~WindowSegmentTree() {
212
214
  AggregateInputData aggr_input_data(aggr.GetFunctionData(), Allocator::DefaultAllocator());
213
215
  // call the destructor for all the intermediate states
214
216
  data_ptr_t address_data[STANDARD_VECTOR_SIZE];
215
- Vector addresses(LogicalType::POINTER, (data_ptr_t)address_data);
217
+ Vector addresses(LogicalType::POINTER, data_ptr_cast(address_data));
216
218
  idx_t count = 0;
217
219
  for (idx_t i = 0; i < internal_nodes; i++) {
218
220
  address_data[count++] = data_ptr_t(levels_flat_native.get() + i * state.size());
@@ -7,30 +7,30 @@ namespace duckdb {
7
7
 
8
8
  struct BaseCountFunction {
9
9
  template <class STATE>
10
- static void Initialize(STATE *state) {
11
- *state = 0;
10
+ static void Initialize(STATE &state) {
11
+ state = 0;
12
12
  }
13
13
 
14
14
  template <class STATE, class OP>
15
- static void Combine(const STATE &source, STATE *target, AggregateInputData &) {
16
- *target += source;
15
+ static void Combine(const STATE &source, STATE &target, AggregateInputData &) {
16
+ target += source;
17
17
  }
18
18
 
19
19
  template <class T, class STATE>
20
- static void Finalize(Vector &result, AggregateInputData &, STATE *state, T *target, ValidityMask &mask, idx_t idx) {
21
- target[idx] = *state;
20
+ static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) {
21
+ target = state;
22
22
  }
23
23
  };
24
24
 
25
25
  struct CountStarFunction : public BaseCountFunction {
26
26
  template <class STATE, class OP>
27
- static void Operation(STATE *state, AggregateInputData &, idx_t idx) {
28
- *state += 1;
27
+ static void Operation(STATE &state, AggregateInputData &, idx_t idx) {
28
+ state += 1;
29
29
  }
30
30
 
31
31
  template <class STATE, class OP>
32
- static void ConstantOperation(STATE *state, AggregateInputData &, idx_t count) {
33
- *state += count;
32
+ static void ConstantOperation(STATE &state, AggregateInputData &, idx_t count) {
33
+ state += count;
34
34
  }
35
35
 
36
36
  template <typename RESULT_TYPE>
@@ -55,27 +55,165 @@ struct CountStarFunction : public BaseCountFunction {
55
55
  };
56
56
 
57
57
  struct CountFunction : public BaseCountFunction {
58
- template <class INPUT_TYPE, class STATE, class OP>
59
- static void Operation(STATE *state, AggregateInputData &, INPUT_TYPE *input, ValidityMask &mask, idx_t idx) {
60
- *state += 1;
58
+ using STATE = int64_t;
59
+
60
+ static void Operation(STATE &state) {
61
+ state += 1;
61
62
  }
62
63
 
63
- template <class INPUT_TYPE, class STATE, class OP>
64
- static void ConstantOperation(STATE *state, AggregateInputData &, INPUT_TYPE *input, ValidityMask &mask,
65
- idx_t count) {
66
- *state += count;
64
+ static void ConstantOperation(STATE &state, idx_t count) {
65
+ state += count;
67
66
  }
68
67
 
69
68
  static bool IgnoreNull() {
70
69
  return true;
71
70
  }
71
+
72
+ static inline void CountFlatLoop(STATE **__restrict states, ValidityMask &mask, idx_t count) {
73
+ if (!mask.AllValid()) {
74
+ idx_t base_idx = 0;
75
+ auto entry_count = ValidityMask::EntryCount(count);
76
+ for (idx_t entry_idx = 0; entry_idx < entry_count; entry_idx++) {
77
+ auto validity_entry = mask.GetValidityEntry(entry_idx);
78
+ idx_t next = MinValue<idx_t>(base_idx + ValidityMask::BITS_PER_VALUE, count);
79
+ if (ValidityMask::AllValid(validity_entry)) {
80
+ // all valid: perform operation
81
+ for (; base_idx < next; base_idx++) {
82
+ CountFunction::Operation(*states[base_idx]);
83
+ }
84
+ } else if (ValidityMask::NoneValid(validity_entry)) {
85
+ // nothing valid: skip all
86
+ base_idx = next;
87
+ continue;
88
+ } else {
89
+ // partially valid: need to check individual elements for validity
90
+ idx_t start = base_idx;
91
+ for (; base_idx < next; base_idx++) {
92
+ if (ValidityMask::RowIsValid(validity_entry, base_idx - start)) {
93
+ CountFunction::Operation(*states[base_idx]);
94
+ }
95
+ }
96
+ }
97
+ }
98
+ } else {
99
+ for (idx_t i = 0; i < count; i++) {
100
+ CountFunction::Operation(*states[i]);
101
+ }
102
+ }
103
+ }
104
+
105
+ static inline void CountScatterLoop(STATE **__restrict states, const SelectionVector &isel,
106
+ const SelectionVector &ssel, ValidityMask &mask, idx_t count) {
107
+ if (!mask.AllValid()) {
108
+ // potential NULL values
109
+ for (idx_t i = 0; i < count; i++) {
110
+ auto idx = isel.get_index(i);
111
+ auto sidx = ssel.get_index(i);
112
+ if (mask.RowIsValid(idx)) {
113
+ CountFunction::Operation(*states[sidx]);
114
+ }
115
+ }
116
+ } else {
117
+ // quick path: no NULL values
118
+ for (idx_t i = 0; i < count; i++) {
119
+ auto sidx = ssel.get_index(i);
120
+ CountFunction::Operation(*states[sidx]);
121
+ }
122
+ }
123
+ }
124
+
125
+ static void CountScatter(Vector inputs[], AggregateInputData &aggr_input_data, idx_t input_count, Vector &states,
126
+ idx_t count) {
127
+ auto &input = inputs[0];
128
+ if (input.GetVectorType() == VectorType::FLAT_VECTOR && states.GetVectorType() == VectorType::FLAT_VECTOR) {
129
+ auto sdata = FlatVector::GetData<STATE *>(states);
130
+ CountFlatLoop(sdata, FlatVector::Validity(input), count);
131
+ } else {
132
+ UnifiedVectorFormat idata, sdata;
133
+ input.ToUnifiedFormat(count, idata);
134
+ states.ToUnifiedFormat(count, sdata);
135
+ CountScatterLoop(reinterpret_cast<STATE **>(sdata.data), *idata.sel, *sdata.sel, idata.validity, count);
136
+ }
137
+ }
138
+
139
+ static inline void CountFlatUpdateLoop(STATE &result, ValidityMask &mask, idx_t count) {
140
+ idx_t base_idx = 0;
141
+ auto entry_count = ValidityMask::EntryCount(count);
142
+ for (idx_t entry_idx = 0; entry_idx < entry_count; entry_idx++) {
143
+ auto validity_entry = mask.GetValidityEntry(entry_idx);
144
+ idx_t next = MinValue<idx_t>(base_idx + ValidityMask::BITS_PER_VALUE, count);
145
+ if (ValidityMask::AllValid(validity_entry)) {
146
+ // all valid
147
+ result += next - base_idx;
148
+ base_idx = next;
149
+ } else if (ValidityMask::NoneValid(validity_entry)) {
150
+ // nothing valid: skip all
151
+ base_idx = next;
152
+ continue;
153
+ } else {
154
+ // partially valid: need to check individual elements for validity
155
+ idx_t start = base_idx;
156
+ for (; base_idx < next; base_idx++) {
157
+ if (ValidityMask::RowIsValid(validity_entry, base_idx - start)) {
158
+ result++;
159
+ }
160
+ }
161
+ }
162
+ }
163
+ }
164
+
165
+ static inline void CountUpdateLoop(STATE &result, ValidityMask &mask, idx_t count,
166
+ const SelectionVector &sel_vector) {
167
+ if (mask.AllValid()) {
168
+ // no NULL values
169
+ result += count;
170
+ return;
171
+ }
172
+ for (idx_t i = 0; i < count; i++) {
173
+ auto idx = sel_vector.get_index(i);
174
+ if (mask.RowIsValid(idx)) {
175
+ result++;
176
+ }
177
+ }
178
+ }
179
+
180
+ static void CountUpdate(Vector inputs[], AggregateInputData &, idx_t input_count, data_ptr_t state_p, idx_t count) {
181
+ auto &input = inputs[0];
182
+ auto &result = *reinterpret_cast<STATE *>(state_p);
183
+ switch (input.GetVectorType()) {
184
+ case VectorType::CONSTANT_VECTOR: {
185
+ if (!ConstantVector::IsNull(input)) {
186
+ // if the constant is not null increment the state
187
+ result += count;
188
+ }
189
+ break;
190
+ }
191
+ case VectorType::FLAT_VECTOR: {
192
+ CountFlatUpdateLoop(result, FlatVector::Validity(input), count);
193
+ break;
194
+ }
195
+ case VectorType::SEQUENCE_VECTOR: {
196
+ // sequence vectors cannot have NULL values
197
+ result += count;
198
+ break;
199
+ }
200
+ default: {
201
+ UnifiedVectorFormat idata;
202
+ input.ToUnifiedFormat(count, idata);
203
+ CountUpdateLoop(result, idata.validity, count, *idata.sel);
204
+ break;
205
+ }
206
+ }
207
+ }
72
208
  };
73
209
 
74
210
  AggregateFunction CountFun::GetFunction() {
75
- auto fun = AggregateFunction::UnaryAggregate<int64_t, int64_t, int64_t, CountFunction>(
76
- LogicalType(LogicalTypeId::ANY), LogicalType::BIGINT);
211
+ AggregateFunction fun({LogicalType(LogicalTypeId::ANY)}, LogicalType::BIGINT, AggregateFunction::StateSize<int64_t>,
212
+ AggregateFunction::StateInitialize<int64_t, CountFunction>, CountFunction::CountScatter,
213
+ AggregateFunction::StateCombine<int64_t, CountFunction>,
214
+ AggregateFunction::StateFinalize<int64_t, int64_t, CountFunction>,
215
+ FunctionNullHandling::SPECIAL_HANDLING, CountFunction::CountUpdate);
77
216
  fun.name = "count";
78
- fun.null_handling = FunctionNullHandling::SPECIAL_HANDLING;
79
217
  fun.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
80
218
  return fun;
81
219
  }
@@ -14,9 +14,9 @@ struct FirstState {
14
14
 
15
15
  struct FirstFunctionBase {
16
16
  template <class STATE>
17
- static void Initialize(STATE *state) {
18
- state->is_set = false;
19
- state->is_null = false;
17
+ static void Initialize(STATE &state) {
18
+ state.is_set = false;
19
+ state.is_null = false;
20
20
  }
21
21
 
22
22
  static bool IgnoreNull() {
@@ -27,40 +27,40 @@ struct FirstFunctionBase {
27
27
  template <bool LAST, bool SKIP_NULLS>
28
28
  struct FirstFunction : public FirstFunctionBase {
29
29
  template <class INPUT_TYPE, class STATE, class OP>
30
- static void Operation(STATE *state, AggregateInputData &, INPUT_TYPE *input, ValidityMask &mask, idx_t idx) {
31
- if (LAST || !state->is_set) {
32
- if (!mask.RowIsValid(idx)) {
30
+ static void Operation(STATE &state, const INPUT_TYPE &input, AggregateUnaryInput &unary_input) {
31
+ if (LAST || !state.is_set) {
32
+ if (!unary_input.RowIsValid()) {
33
33
  if (!SKIP_NULLS) {
34
- state->is_set = true;
34
+ state.is_set = true;
35
35
  }
36
- state->is_null = true;
36
+ state.is_null = true;
37
37
  } else {
38
- state->is_set = true;
39
- state->is_null = false;
40
- state->value = input[idx];
38
+ state.is_set = true;
39
+ state.is_null = false;
40
+ state.value = input;
41
41
  }
42
42
  }
43
43
  }
44
44
 
45
45
  template <class INPUT_TYPE, class STATE, class OP>
46
- static void ConstantOperation(STATE *state, AggregateInputData &aggr_input_data, INPUT_TYPE *input,
47
- ValidityMask &mask, idx_t count) {
48
- Operation<INPUT_TYPE, STATE, OP>(state, aggr_input_data, input, mask, 0);
46
+ static void ConstantOperation(STATE &state, const INPUT_TYPE &input, AggregateUnaryInput &unary_input,
47
+ idx_t count) {
48
+ Operation<INPUT_TYPE, STATE, OP>(state, input, unary_input);
49
49
  }
50
50
 
51
51
  template <class STATE, class OP>
52
- static void Combine(const STATE &source, STATE *target, AggregateInputData &) {
53
- if (!target->is_set) {
54
- *target = source;
52
+ static void Combine(const STATE &source, STATE &target, AggregateInputData &) {
53
+ if (!target.is_set) {
54
+ target = source;
55
55
  }
56
56
  }
57
57
 
58
58
  template <class T, class STATE>
59
- static void Finalize(Vector &result, AggregateInputData &, STATE *state, T *target, ValidityMask &mask, idx_t idx) {
60
- if (!state->is_set || state->is_null) {
61
- mask.SetInvalid(idx);
59
+ static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) {
60
+ if (!state.is_set || state.is_null) {
61
+ finalize_data.ReturnNull();
62
62
  } else {
63
- target[idx] = state->value;
63
+ target = state.value;
64
64
  }
65
65
  }
66
66
  };
@@ -68,65 +68,64 @@ struct FirstFunction : public FirstFunctionBase {
68
68
  template <bool LAST, bool SKIP_NULLS>
69
69
  struct FirstFunctionString : public FirstFunctionBase {
70
70
  template <class STATE>
71
- static void SetValue(STATE *state, AggregateInputData &input_data, string_t value, bool is_null) {
72
- if (LAST && state->is_set) {
73
- Destroy(input_data, state);
71
+ static void SetValue(STATE &state, AggregateInputData &input_data, string_t value, bool is_null) {
72
+ if (LAST && state.is_set) {
73
+ Destroy(state, input_data);
74
74
  }
75
75
  if (is_null) {
76
76
  if (!SKIP_NULLS) {
77
- state->is_set = true;
78
- state->is_null = true;
77
+ state.is_set = true;
78
+ state.is_null = true;
79
79
  }
80
80
  } else {
81
- state->is_set = true;
82
- state->is_null = false;
81
+ state.is_set = true;
82
+ state.is_null = false;
83
83
  if (value.IsInlined()) {
84
- state->value = value;
84
+ state.value = value;
85
85
  } else {
86
86
  // non-inlined string, need to allocate space for it
87
87
  auto len = value.GetSize();
88
88
  auto ptr = new char[len];
89
89
  memcpy(ptr, value.GetData(), len);
90
90
 
91
- state->value = string_t(ptr, len);
91
+ state.value = string_t(ptr, len);
92
92
  }
93
93
  }
94
94
  }
95
95
 
96
96
  template <class INPUT_TYPE, class STATE, class OP>
97
- static void Operation(STATE *state, AggregateInputData &input_data, INPUT_TYPE *input, ValidityMask &mask,
98
- idx_t idx) {
99
- if (LAST || !state->is_set) {
100
- SetValue(state, input_data, input[idx], !mask.RowIsValid(idx));
97
+ static void Operation(STATE &state, const INPUT_TYPE &input, AggregateUnaryInput &unary_input) {
98
+ if (LAST || !state.is_set) {
99
+ SetValue(state, unary_input.input, input, !unary_input.RowIsValid());
101
100
  }
102
101
  }
103
102
 
104
103
  template <class INPUT_TYPE, class STATE, class OP>
105
- static void ConstantOperation(STATE *state, AggregateInputData &aggr_input_data, INPUT_TYPE *input,
106
- ValidityMask &mask, idx_t count) {
107
- Operation<INPUT_TYPE, STATE, OP>(state, aggr_input_data, input, mask, 0);
104
+ static void ConstantOperation(STATE &state, const INPUT_TYPE &input, AggregateUnaryInput &unary_input,
105
+ idx_t count) {
106
+ Operation<INPUT_TYPE, STATE, OP>(state, input, unary_input);
108
107
  }
109
108
 
110
109
  template <class STATE, class OP>
111
- static void Combine(const STATE &source, STATE *target, AggregateInputData &input_data) {
112
- if (source.is_set && (LAST || !target->is_set)) {
110
+ static void Combine(const STATE &source, STATE &target, AggregateInputData &input_data) {
111
+ if (source.is_set && (LAST || !target.is_set)) {
113
112
  SetValue(target, input_data, source.value, source.is_null);
114
113
  }
115
114
  }
116
115
 
117
116
  template <class T, class STATE>
118
- static void Finalize(Vector &result, AggregateInputData &, STATE *state, T *target, ValidityMask &mask, idx_t idx) {
119
- if (!state->is_set || state->is_null) {
120
- mask.SetInvalid(idx);
117
+ static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) {
118
+ if (!state.is_set || state.is_null) {
119
+ finalize_data.ReturnNull();
121
120
  } else {
122
- target[idx] = StringVector::AddStringOrBlob(result, state->value);
121
+ target = StringVector::AddStringOrBlob(finalize_data.result, state.value);
123
122
  }
124
123
  }
125
124
 
126
125
  template <class STATE>
127
- static void Destroy(AggregateInputData &aggr_input_data, STATE *state) {
128
- if (state->is_set && !state->is_null && !state->value.IsInlined()) {
129
- delete[] state->value.GetData();
126
+ static void Destroy(STATE &state, AggregateInputData &aggr_input_data) {
127
+ if (state.is_set && !state.is_null && !state.value.IsInlined()) {
128
+ delete[] state.value.GetData();
130
129
  }
131
130
  }
132
131
  };
@@ -138,14 +137,14 @@ struct FirstStateVector {
138
137
  template <bool LAST, bool SKIP_NULLS>
139
138
  struct FirstVectorFunction {
140
139
  template <class STATE>
141
- static void Initialize(STATE *state) {
142
- state->value = nullptr;
140
+ static void Initialize(STATE &state) {
141
+ state.value = nullptr;
143
142
  }
144
143
 
145
144
  template <class STATE>
146
- static void Destroy(AggregateInputData &aggr_input_data, STATE *state) {
147
- if (state->value) {
148
- delete state->value;
145
+ static void Destroy(STATE &state, AggregateInputData &aggr_input_data) {
146
+ if (state.value) {
147
+ delete state.value;
149
148
  }
150
149
  }
151
150
  static bool IgnoreNull() {
@@ -153,14 +152,14 @@ struct FirstVectorFunction {
153
152
  }
154
153
 
155
154
  template <class STATE>
156
- static void SetValue(STATE *state, Vector &input, const idx_t idx) {
157
- if (!state->value) {
158
- state->value = new Vector(input.GetType());
159
- state->value->SetVectorType(VectorType::CONSTANT_VECTOR);
155
+ static void SetValue(STATE &state, Vector &input, const idx_t idx) {
156
+ if (!state.value) {
157
+ state.value = new Vector(input.GetType());
158
+ state.value->SetVectorType(VectorType::CONSTANT_VECTOR);
160
159
  }
161
160
  sel_t selv = idx;
162
161
  SelectionVector sel(&selv);
163
- VectorOperations::Copy(input, *state->value, sel, 1, 0, 0);
162
+ VectorOperations::Copy(input, *state.value, sel, 1, 0, 0);
164
163
  }
165
164
 
166
165
  static void Update(Vector inputs[], AggregateInputData &, idx_t input_count, Vector &state_vector, idx_t count) {
@@ -171,39 +170,32 @@ struct FirstVectorFunction {
171
170
  UnifiedVectorFormat sdata;
172
171
  state_vector.ToUnifiedFormat(count, sdata);
173
172
 
174
- auto states = (FirstStateVector **)sdata.data;
173
+ auto states = UnifiedVectorFormat::GetData<FirstStateVector *>(sdata);
175
174
  for (idx_t i = 0; i < count; i++) {
176
175
  const auto idx = idata.sel->get_index(i);
177
176
  if (SKIP_NULLS && !idata.validity.RowIsValid(idx)) {
178
177
  continue;
179
178
  }
180
- auto state = states[sdata.sel->get_index(i)];
181
- if (LAST || !state->value) {
179
+ auto &state = *states[sdata.sel->get_index(i)];
180
+ if (LAST || !state.value) {
182
181
  SetValue(state, input, i);
183
182
  }
184
183
  }
185
184
  }
186
185
 
187
186
  template <class STATE, class OP>
188
- static void Combine(const STATE &source, STATE *target, AggregateInputData &) {
189
- if (source.value && (LAST || !target->value)) {
187
+ static void Combine(const STATE &source, STATE &target, AggregateInputData &) {
188
+ if (source.value && (LAST || !target.value)) {
190
189
  SetValue(target, *source.value, 0);
191
190
  }
192
191
  }
193
192
 
194
- template <class T, class STATE>
195
- static void Finalize(Vector &result, AggregateInputData &, STATE *state, T *target, ValidityMask &mask, idx_t idx) {
196
- if (!state->value) {
197
- // we need to use FlatVector::SetNull here
198
- // since for STRUCT columns only setting the validity mask of the struct is incorrect
199
- // as for a struct column, we need to also set ALL child columns to NULL
200
- if (result.GetVectorType() == VectorType::CONSTANT_VECTOR) {
201
- ConstantVector::SetNull(result, true);
202
- } else {
203
- FlatVector::SetNull(result, idx, true);
204
- }
193
+ template <class STATE>
194
+ static void Finalize(STATE &state, AggregateFinalizeData &finalize_data) {
195
+ if (!state.value) {
196
+ finalize_data.ReturnNull();
205
197
  } else {
206
- VectorOperations::Copy(*state->value, result, 1, 0, idx);
198
+ VectorOperations::Copy(*state.value, finalize_data.result, 1, 0, finalize_data.result_idx);
207
199
  }
208
200
  }
209
201
 
@@ -289,7 +281,7 @@ static AggregateFunction GetFirstFunction(const LogicalType &type) {
289
281
  return AggregateFunction({type}, type, AggregateFunction::StateSize<FirstStateVector>,
290
282
  AggregateFunction::StateInitialize<FirstStateVector, OP>, OP::Update,
291
283
  AggregateFunction::StateCombine<FirstStateVector, OP>,
292
- AggregateFunction::StateFinalize<FirstStateVector, void, OP>, nullptr, OP::Bind,
284
+ AggregateFunction::StateVoidFinalize<FirstStateVector, OP>, nullptr, OP::Bind,
293
285
  AggregateFunction::StateDestroy<FirstStateVector, OP>, nullptr, nullptr);
294
286
  }
295
287
  }
@@ -28,7 +28,7 @@ struct SortedAggregateBindData : public FunctionData {
28
28
  }
29
29
  sorted_on_args = (children.size() == order_bys.orders.size());
30
30
  for (size_t i = 0; sorted_on_args && i < children.size(); ++i) {
31
- sorted_on_args = children[i]->Equals(order_bys.orders[i].expression.get());
31
+ sorted_on_args = children[i]->Equals(*order_bys.orders[i].expression);
32
32
  }
33
33
  }
34
34
 
@@ -49,7 +49,7 @@ struct SortedAggregateBindData : public FunctionData {
49
49
  }
50
50
 
51
51
  bool Equals(const FunctionData &other_p) const override {
52
- auto &other = (const SortedAggregateBindData &)other_p;
52
+ auto &other = other_p.Cast<SortedAggregateBindData>();
53
53
  if (bind_info && other.bind_info) {
54
54
  if (!bind_info->Equals(*other.bind_info)) {
55
55
  return false;
@@ -253,13 +253,13 @@ struct SortedAggregateState {
253
253
 
254
254
  struct SortedAggregateFunction {
255
255
  template <typename STATE>
256
- static void Initialize(STATE *state) {
257
- new (state) STATE();
256
+ static void Initialize(STATE &state) {
257
+ new (&state) STATE();
258
258
  }
259
259
 
260
260
  template <typename STATE>
261
- static void Destroy(AggregateInputData &aggr_input_data, STATE *state) {
262
- state->~STATE();
261
+ static void Destroy(STATE &state, AggregateInputData &aggr_input_data) {
262
+ state.~STATE();
263
263
  }
264
264
 
265
265
  static void ProjectInputs(Vector inputs[], const SortedAggregateBindData &order_bind, idx_t input_count,
@@ -288,7 +288,7 @@ struct SortedAggregateFunction {
288
288
  DataChunk sort_chunk;
289
289
  ProjectInputs(inputs, order_bind, input_count, count, arg_chunk, sort_chunk);
290
290
 
291
- const auto order_state = (SortedAggregateState *)state;
291
+ const auto order_state = reinterpret_cast<SortedAggregateState *>(state);
292
292
  order_state->Update(order_bind, sort_chunk, arg_chunk);
293
293
  }
294
294
 
@@ -310,7 +310,7 @@ struct SortedAggregateFunction {
310
310
  states.ToUnifiedFormat(count, svdata);
311
311
 
312
312
  // Size the selection vector for each state.
313
- auto sdata = (SortedAggregateState **)svdata.data;
313
+ auto sdata = UnifiedVectorFormat::GetDataNoConst<SortedAggregateState *>(svdata);
314
314
  for (idx_t i = 0; i < count; ++i) {
315
315
  auto sidx = svdata.sel->get_index(i);
316
316
  auto order_state = sdata[sidx];
@@ -345,10 +345,10 @@ struct SortedAggregateFunction {
345
345
  }
346
346
 
347
347
  template <class STATE, class OP>
348
- static void Combine(const STATE &source, STATE *target, AggregateInputData &aggr_input_data) {
349
- const auto order_bind = (SortedAggregateBindData *)aggr_input_data.bind_data;
348
+ static void Combine(const STATE &source, STATE &target, AggregateInputData &aggr_input_data) {
349
+ auto &order_bind = aggr_input_data.bind_data->Cast<SortedAggregateBindData>();
350
350
  auto &other = const_cast<STATE &>(source);
351
- target->Combine(*order_bind, other);
351
+ target.Combine(order_bind, other);
352
352
  }
353
353
 
354
354
  static void Window(Vector inputs[], const ValidityMask &filter_mask, AggregateInputData &aggr_input_data,
@@ -359,7 +359,7 @@ struct SortedAggregateFunction {
359
359
 
360
360
  static void Finalize(Vector &states, AggregateInputData &aggr_input_data, Vector &result, idx_t count,
361
361
  const idx_t offset) {
362
- const auto &order_bind = aggr_input_data.bind_data->Cast<SortedAggregateBindData>();
362
+ auto &order_bind = aggr_input_data.bind_data->Cast<SortedAggregateBindData>();
363
363
  auto &buffer_manager = order_bind.buffer_manager;
364
364
  RowLayout payload_layout;
365
365
  payload_layout.Initialize(order_bind.arg_types);
@@ -370,7 +370,7 @@ struct SortedAggregateFunction {
370
370
 
371
371
  // Reusable inner state
372
372
  vector<data_t> agg_state(order_bind.function.state_size());
373
- Vector agg_state_vec(Value::POINTER((idx_t)agg_state.data()));
373
+ Vector agg_state_vec(Value::POINTER(CastPointerToValue(agg_state.data())));
374
374
 
375
375
  // State variables
376
376
  auto bind_info = order_bind.bind_info.get();
@@ -158,7 +158,7 @@ int64_t CastFunctionSet::ImplicitCastCost(const LogicalType &source, const Logic
158
158
 
159
159
  BoundCastInfo MapCastFunction(BindCastInput &input, const LogicalType &source, const LogicalType &target) {
160
160
  D_ASSERT(input.info);
161
- auto &map_info = (MapCastInfo &)*input.info;
161
+ auto &map_info = input.info->Cast<MapCastInfo>();
162
162
  auto entry = map_info.GetEntry(source, target);
163
163
  if (entry) {
164
164
  if (entry->bind_function) {
@@ -207,7 +207,7 @@ struct DecimalCastInput {
207
207
  struct StringCastFromDecimalOperator {
208
208
  template <class INPUT_TYPE, class RESULT_TYPE>
209
209
  static RESULT_TYPE Operation(INPUT_TYPE input, ValidityMask &mask, idx_t idx, void *dataptr) {
210
- auto data = (DecimalCastInput *)dataptr;
210
+ auto data = reinterpret_cast<DecimalCastInput *>(dataptr);
211
211
  return StringCastFromDecimal::Operation<INPUT_TYPE>(input, data->width, data->scale, data->result);
212
212
  }
213
213
  };
@@ -17,7 +17,7 @@ bool EnumEnumCast(Vector &source, Vector &result, idx_t count, CastParameters &p
17
17
  UnifiedVectorFormat vdata;
18
18
  source.ToUnifiedFormat(count, vdata);
19
19
 
20
- auto source_data = (SRC_TYPE *)vdata.data;
20
+ auto source_data = UnifiedVectorFormat::GetData<SRC_TYPE>(vdata);
21
21
  auto source_sel = vdata.sel;
22
22
  auto source_mask = vdata.validity;
23
23
 
@@ -71,7 +71,7 @@ static bool EnumToVarcharCast(Vector &source, Vector &result, idx_t count, CastP
71
71
  UnifiedVectorFormat vdata;
72
72
  source.ToUnifiedFormat(count, vdata);
73
73
 
74
- auto source_data = (SRC *)vdata.data;
74
+ auto source_data = UnifiedVectorFormat::GetData<SRC>(vdata);
75
75
  for (idx_t i = 0; i < count; i++) {
76
76
  auto source_idx = vdata.sel->get_index(i);
77
77
  if (!vdata.validity.RowIsValid(source_idx)) {