duckdb 0.8.0 → 0.8.1-dev111.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (556) hide show
  1. package/package.json +1 -1
  2. package/src/duckdb/extension/icu/icu-datepart.cpp +1 -1
  3. package/src/duckdb/extension/json/include/json_common.hpp +1 -1
  4. package/src/duckdb/extension/json/include/json_executors.hpp +1 -1
  5. package/src/duckdb/extension/json/json_functions/json_create.cpp +6 -6
  6. package/src/duckdb/extension/json/json_functions/json_merge_patch.cpp +1 -1
  7. package/src/duckdb/extension/json/json_functions/json_transform.cpp +1 -1
  8. package/src/duckdb/extension/parquet/column_reader.cpp +57 -52
  9. package/src/duckdb/extension/parquet/column_writer.cpp +57 -45
  10. package/src/duckdb/extension/parquet/include/cast_column_reader.hpp +1 -1
  11. package/src/duckdb/extension/parquet/include/column_reader.hpp +5 -4
  12. package/src/duckdb/extension/parquet/include/column_writer.hpp +24 -0
  13. package/src/duckdb/extension/parquet/include/decode_utils.hpp +6 -0
  14. package/src/duckdb/extension/parquet/include/list_column_reader.hpp +1 -1
  15. package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +4 -4
  16. package/src/duckdb/extension/parquet/include/parquet_rle_bp_decoder.hpp +4 -5
  17. package/src/duckdb/extension/parquet/include/resizable_buffer.hpp +4 -4
  18. package/src/duckdb/extension/parquet/include/row_number_column_reader.hpp +1 -1
  19. package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +1 -1
  20. package/src/duckdb/extension/parquet/parquet-extension.cpp +1 -1
  21. package/src/duckdb/extension/parquet/parquet_metadata.cpp +1 -1
  22. package/src/duckdb/extension/parquet/parquet_reader.cpp +18 -18
  23. package/src/duckdb/extension/parquet/parquet_statistics.cpp +23 -26
  24. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +2 -2
  25. package/src/duckdb/extension/parquet/parquet_writer.cpp +3 -3
  26. package/src/duckdb/extension/parquet/zstd_file_system.cpp +3 -3
  27. package/src/duckdb/src/catalog/catalog.cpp +0 -4
  28. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +3 -0
  29. package/src/duckdb/src/catalog/catalog_entry.cpp +4 -4
  30. package/src/duckdb/src/catalog/catalog_set.cpp +1 -1
  31. package/src/duckdb/src/catalog/dependency_manager.cpp +2 -2
  32. package/src/duckdb/src/catalog/duck_catalog.cpp +1 -0
  33. package/src/duckdb/src/common/adbc/adbc.cpp +183 -94
  34. package/src/duckdb/src/common/adbc/driver_manager.cpp +10 -2
  35. package/src/duckdb/src/common/arrow/arrow_appender.cpp +12 -12
  36. package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +7 -7
  37. package/src/duckdb/src/common/checksum.cpp +1 -1
  38. package/src/duckdb/src/common/compressed_file_system.cpp +6 -6
  39. package/src/duckdb/src/common/crypto/md5.cpp +9 -9
  40. package/src/duckdb/src/common/field_writer.cpp +1 -1
  41. package/src/duckdb/src/common/file_system.cpp +15 -2
  42. package/src/duckdb/src/common/fsst.cpp +11 -6
  43. package/src/duckdb/src/common/gzip_file_system.cpp +8 -8
  44. package/src/duckdb/src/common/hive_partitioning.cpp +1 -1
  45. package/src/duckdb/src/common/local_file_system.cpp +11 -11
  46. package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
  47. package/src/duckdb/src/common/pipe_file_system.cpp +2 -2
  48. package/src/duckdb/src/common/radix_partitioning.cpp +2 -2
  49. package/src/duckdb/src/common/row_operations/row_heap_gather.cpp +1 -1
  50. package/src/duckdb/src/common/row_operations/row_heap_scatter.cpp +5 -5
  51. package/src/duckdb/src/common/row_operations/row_match.cpp +1 -1
  52. package/src/duckdb/src/common/row_operations/row_radix_scatter.cpp +2 -2
  53. package/src/duckdb/src/common/row_operations/row_scatter.cpp +4 -4
  54. package/src/duckdb/src/common/serializer/binary_deserializer.cpp +1 -1
  55. package/src/duckdb/src/common/serializer/binary_serializer.cpp +3 -3
  56. package/src/duckdb/src/common/serializer.cpp +1 -1
  57. package/src/duckdb/src/common/sort/comparators.cpp +1 -1
  58. package/src/duckdb/src/common/sort/merge_sorter.cpp +7 -2
  59. package/src/duckdb/src/common/sort/partition_state.cpp +2 -2
  60. package/src/duckdb/src/common/types/bit.cpp +5 -5
  61. package/src/duckdb/src/common/types/blob.cpp +8 -8
  62. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +4 -4
  63. package/src/duckdb/src/common/types/column/column_data_collection.cpp +3 -3
  64. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +1 -1
  65. package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
  66. package/src/duckdb/src/common/types/hash.cpp +2 -2
  67. package/src/duckdb/src/common/types/hyperloglog.cpp +22 -21
  68. package/src/duckdb/src/common/types/list_segment.cpp +77 -49
  69. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +1 -1
  70. package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +5 -3
  71. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +17 -17
  72. package/src/duckdb/src/common/types/string_heap.cpp +1 -1
  73. package/src/duckdb/src/common/types/value.cpp +2 -2
  74. package/src/duckdb/src/common/types/vector.cpp +101 -101
  75. package/src/duckdb/src/common/types/vector_cache.cpp +6 -6
  76. package/src/duckdb/src/common/types/vector_constants.cpp +2 -1
  77. package/src/duckdb/src/common/types.cpp +44 -33
  78. package/src/duckdb/src/common/vector_operations/boolean_operators.cpp +2 -2
  79. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +12 -12
  80. package/src/duckdb/src/common/vector_operations/vector_hash.cpp +13 -11
  81. package/src/duckdb/src/common/vector_operations/vector_storage.cpp +1 -1
  82. package/src/duckdb/src/core_functions/aggregate/algebraic/avg.cpp +30 -33
  83. package/src/duckdb/src/core_functions/aggregate/algebraic/covar.cpp +0 -4
  84. package/src/duckdb/src/core_functions/aggregate/distributive/approx_count.cpp +32 -36
  85. package/src/duckdb/src/core_functions/aggregate/distributive/arg_min_max.cpp +53 -66
  86. package/src/duckdb/src/core_functions/aggregate/distributive/bitagg.cpp +48 -48
  87. package/src/duckdb/src/core_functions/aggregate/distributive/bitstring_agg.cpp +43 -43
  88. package/src/duckdb/src/core_functions/aggregate/distributive/bool.cpp +32 -32
  89. package/src/duckdb/src/core_functions/aggregate/distributive/entropy.cpp +34 -34
  90. package/src/duckdb/src/core_functions/aggregate/distributive/kurtosis.cpp +30 -31
  91. package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +91 -103
  92. package/src/duckdb/src/core_functions/aggregate/distributive/product.cpp +17 -17
  93. package/src/duckdb/src/core_functions/aggregate/distributive/skew.cpp +25 -27
  94. package/src/duckdb/src/core_functions/aggregate/distributive/string_agg.cpp +36 -37
  95. package/src/duckdb/src/core_functions/aggregate/distributive/sum.cpp +22 -22
  96. package/src/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp +48 -84
  97. package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +49 -51
  98. package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +83 -119
  99. package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +62 -99
  100. package/src/duckdb/src/core_functions/aggregate/nested/histogram.cpp +24 -26
  101. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +22 -23
  102. package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +16 -18
  103. package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +22 -25
  104. package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +19 -24
  105. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +18 -23
  106. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +14 -18
  107. package/src/duckdb/src/core_functions/scalar/blob/base64.cpp +1 -1
  108. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +45 -45
  109. package/src/duckdb/src/core_functions/scalar/date/strftime.cpp +2 -2
  110. package/src/duckdb/src/core_functions/scalar/generic/current_setting.cpp +1 -1
  111. package/src/duckdb/src/core_functions/scalar/generic/least.cpp +2 -2
  112. package/src/duckdb/src/core_functions/scalar/generic/stats.cpp +1 -1
  113. package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +3 -3
  114. package/src/duckdb/src/core_functions/scalar/list/flatten.cpp +2 -4
  115. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +3 -3
  116. package/src/duckdb/src/core_functions/scalar/list/list_lambdas.cpp +6 -7
  117. package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +1 -1
  118. package/src/duckdb/src/core_functions/scalar/map/cardinality.cpp +1 -1
  119. package/src/duckdb/src/core_functions/scalar/map/map.cpp +2 -2
  120. package/src/duckdb/src/core_functions/scalar/map/map_concat.cpp +1 -1
  121. package/src/duckdb/src/core_functions/scalar/map/map_extract.cpp +5 -9
  122. package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +3 -3
  123. package/src/duckdb/src/core_functions/scalar/string/starts_with.cpp +3 -2
  124. package/src/duckdb/src/core_functions/scalar/string/string_split.cpp +4 -4
  125. package/src/duckdb/src/core_functions/scalar/string/trim.cpp +1 -1
  126. package/src/duckdb/src/core_functions/scalar/union/union_extract.cpp +1 -1
  127. package/src/duckdb/src/execution/adaptive_filter.cpp +1 -1
  128. package/src/duckdb/src/execution/expression_executor/execute_case.cpp +10 -10
  129. package/src/duckdb/src/execution/expression_executor/execute_conjunction.cpp +7 -7
  130. package/src/duckdb/src/execution/expression_executor.cpp +33 -28
  131. package/src/duckdb/src/execution/index/art/art.cpp +30 -32
  132. package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +3 -4
  133. package/src/duckdb/src/execution/join_hashtable.cpp +4 -4
  134. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_inner.cpp +4 -4
  135. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_mark.cpp +2 -2
  136. package/src/duckdb/src/execution/operator/aggregate/distinct_aggregate_data.cpp +1 -1
  137. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +1 -1
  138. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +2 -2
  139. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +4 -4
  140. package/src/duckdb/src/execution/operator/filter/physical_filter.cpp +1 -1
  141. package/src/duckdb/src/execution/operator/join/outer_join_marker.cpp +1 -1
  142. package/src/duckdb/src/execution/operator/join/perfect_hash_join_executor.cpp +1 -1
  143. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +2 -2
  144. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +4 -4
  145. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +3 -3
  146. package/src/duckdb/src/execution/operator/join/physical_nested_loop_join.cpp +3 -3
  147. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +3 -3
  148. package/src/duckdb/src/execution/operator/order/physical_top_n.cpp +1 -1
  149. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +2 -2
  150. package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +2 -2
  151. package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +2 -0
  152. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -3
  153. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
  154. package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -2
  155. package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +1 -1
  156. package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +3 -3
  157. package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +2 -1
  158. package/src/duckdb/src/execution/operator/scan/physical_expression_scan.cpp +1 -1
  159. package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +2 -2
  160. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +1 -1
  161. package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +1 -1
  162. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +1 -1
  163. package/src/duckdb/src/execution/physical_plan/plan_create_table.cpp +1 -1
  164. package/src/duckdb/src/execution/physical_plan_generator.cpp +2 -2
  165. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +1 -1
  166. package/src/duckdb/src/execution/reservoir_sample.cpp +2 -2
  167. package/src/duckdb/src/execution/window_segment_tree.cpp +8 -6
  168. package/src/duckdb/src/function/aggregate/distributive/count.cpp +158 -20
  169. package/src/duckdb/src/function/aggregate/distributive/first.cpp +66 -74
  170. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +13 -13
  171. package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
  172. package/src/duckdb/src/function/cast/decimal_cast.cpp +1 -1
  173. package/src/duckdb/src/function/cast/enum_casts.cpp +2 -2
  174. package/src/duckdb/src/function/cast/string_cast.cpp +11 -11
  175. package/src/duckdb/src/function/cast/union_casts.cpp +2 -2
  176. package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +3 -2
  177. package/src/duckdb/src/function/scalar/generic/constant_or_null.cpp +1 -1
  178. package/src/duckdb/src/function/scalar/list/list_concat.cpp +2 -2
  179. package/src/duckdb/src/function/scalar/list/list_extract.cpp +3 -3
  180. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +2 -3
  181. package/src/duckdb/src/function/scalar/string/concat.cpp +8 -7
  182. package/src/duckdb/src/function/scalar/string/contains.cpp +4 -4
  183. package/src/duckdb/src/function/scalar/string/like.cpp +5 -5
  184. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +4 -4
  185. package/src/duckdb/src/function/scalar/string/regexp.cpp +3 -3
  186. package/src/duckdb/src/function/scalar/string/strip_accents.cpp +1 -1
  187. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +1 -1
  188. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +25 -23
  189. package/src/duckdb/src/function/scalar_function.cpp +3 -3
  190. package/src/duckdb/src/function/table/arrow.cpp +4 -4
  191. package/src/duckdb/src/function/table/arrow_conversion.cpp +67 -61
  192. package/src/duckdb/src/function/table/checkpoint.cpp +1 -1
  193. package/src/duckdb/src/function/table/copy_csv.cpp +11 -7
  194. package/src/duckdb/src/function/table/glob.cpp +1 -1
  195. package/src/duckdb/src/function/table/pragma_last_profiling_output.cpp +1 -1
  196. package/src/duckdb/src/function/table/range.cpp +4 -4
  197. package/src/duckdb/src/function/table/read_csv.cpp +4 -7
  198. package/src/duckdb/src/function/table/repeat.cpp +2 -2
  199. package/src/duckdb/src/function/table/repeat_row.cpp +2 -2
  200. package/src/duckdb/src/function/table/system/duckdb_functions.cpp +1 -1
  201. package/src/duckdb/src/function/table/system/test_vector_types.cpp +1 -1
  202. package/src/duckdb/src/function/table/table_scan.cpp +2 -2
  203. package/src/duckdb/src/function/table/unnest.cpp +1 -1
  204. package/src/duckdb/src/function/table/version/pragma_version.cpp +3 -3
  205. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +2 -2
  206. package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +2 -2
  207. package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +5 -0
  208. package/src/duckdb/src/include/duckdb/common/allocator.hpp +15 -4
  209. package/src/duckdb/src/include/duckdb/common/arrow/arrow_buffer.hpp +7 -2
  210. package/src/duckdb/src/include/duckdb/common/crypto/md5.hpp +2 -2
  211. package/src/duckdb/src/include/duckdb/common/exception.hpp +2 -2
  212. package/src/duckdb/src/include/duckdb/common/field_writer.hpp +3 -3
  213. package/src/duckdb/src/include/duckdb/common/file_system.hpp +11 -0
  214. package/src/duckdb/src/include/duckdb/common/fsst.hpp +2 -3
  215. package/src/duckdb/src/include/duckdb/common/radix.hpp +3 -3
  216. package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +1 -1
  217. package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +4 -1
  218. package/src/duckdb/src/include/duckdb/common/serializer.hpp +4 -4
  219. package/src/duckdb/src/include/duckdb/common/typedefs.hpp +30 -0
  220. package/src/duckdb/src/include/duckdb/common/types/column/partitioned_column_data.hpp +12 -0
  221. package/src/duckdb/src/include/duckdb/common/types/hyperloglog.hpp +6 -2
  222. package/src/duckdb/src/include/duckdb/common/types/null_value.hpp +1 -1
  223. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +12 -0
  224. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +10 -10
  225. package/src/duckdb/src/include/duckdb/common/types/value.hpp +1 -1
  226. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +9 -0
  227. package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +18 -6
  228. package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +112 -76
  229. package/src/duckdb/src/include/duckdb/common/vector_operations/binary_executor.hpp +16 -15
  230. package/src/duckdb/src/include/duckdb/common/vector_operations/generic_executor.hpp +11 -11
  231. package/src/duckdb/src/include/duckdb/common/vector_operations/ternary_executor.hpp +23 -19
  232. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +3 -3
  233. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +20 -24
  234. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +36 -39
  235. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/stddev.hpp +57 -53
  236. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +8 -9
  237. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +16 -18
  238. package/src/duckdb/src/include/duckdb/core_functions/aggregate/sum_helpers.hpp +7 -8
  239. package/src/duckdb/src/include/duckdb/execution/expression_executor_state.hpp +14 -2
  240. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -3
  241. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_result_collector.hpp +3 -0
  242. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_buffer.hpp +1 -1
  243. package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +5 -2
  244. package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +12 -12
  245. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +8 -29
  246. package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +95 -0
  247. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +13 -2
  248. package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +4 -4
  249. package/src/duckdb/src/include/duckdb/function/compression_function.hpp +44 -0
  250. package/src/duckdb/src/include/duckdb/function/copy_function.hpp +6 -6
  251. package/src/duckdb/src/include/duckdb/function/function.hpp +3 -3
  252. package/src/duckdb/src/include/duckdb/function/macro_function.hpp +2 -2
  253. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +3 -3
  254. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
  255. package/src/duckdb/src/include/duckdb/function/table_function.hpp +6 -6
  256. package/src/duckdb/src/include/duckdb/main/capi/cast/utils.hpp +1 -1
  257. package/src/duckdb/src/include/duckdb/main/materialized_query_result.hpp +3 -0
  258. package/src/duckdb/src/include/duckdb/main/pending_query_result.hpp +3 -0
  259. package/src/duckdb/src/include/duckdb/main/query_result.hpp +17 -0
  260. package/src/duckdb/src/include/duckdb/main/relation.hpp +12 -0
  261. package/src/duckdb/src/include/duckdb/main/stream_query_result.hpp +3 -0
  262. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  263. package/src/duckdb/src/include/duckdb/parser/base_expression.hpp +6 -12
  264. package/src/duckdb/src/include/duckdb/parser/constraint.hpp +2 -2
  265. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +1 -1
  266. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +1 -1
  267. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +1 -1
  268. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +1 -1
  269. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +1 -1
  270. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +1 -1
  271. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +1 -1
  272. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +1 -1
  273. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +1 -1
  274. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +1 -1
  275. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +1 -1
  276. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +1 -1
  277. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +1 -1
  278. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +1 -1
  279. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +1 -1
  280. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +1 -1
  281. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +1 -1
  282. package/src/duckdb/src/include/duckdb/parser/expression_map.hpp +1 -1
  283. package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +2 -2
  284. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -1
  285. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -2
  286. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +36 -5
  287. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +7 -4
  288. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +1 -1
  289. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +1 -1
  290. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +1 -1
  291. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +1 -1
  292. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +1 -1
  293. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +1 -1
  294. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +1 -1
  295. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +1 -1
  296. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +4 -3
  297. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +107 -91
  298. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +1 -1
  299. package/src/duckdb/src/include/duckdb/planner/bound_constraint.hpp +2 -2
  300. package/src/duckdb/src/include/duckdb/planner/bound_query_node.hpp +2 -2
  301. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +34 -1
  302. package/src/duckdb/src/include/duckdb/planner/bound_tableref.hpp +2 -2
  303. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +1 -1
  304. package/src/duckdb/src/include/duckdb/planner/expression/bound_between_expression.hpp +1 -1
  305. package/src/duckdb/src/include/duckdb/planner/expression/bound_case_expression.hpp +1 -1
  306. package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +1 -1
  307. package/src/duckdb/src/include/duckdb/planner/expression/bound_columnref_expression.hpp +1 -1
  308. package/src/duckdb/src/include/duckdb/planner/expression/bound_comparison_expression.hpp +1 -1
  309. package/src/duckdb/src/include/duckdb/planner/expression/bound_conjunction_expression.hpp +1 -1
  310. package/src/duckdb/src/include/duckdb/planner/expression/bound_constant_expression.hpp +1 -1
  311. package/src/duckdb/src/include/duckdb/planner/expression/bound_function_expression.hpp +1 -1
  312. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambda_expression.hpp +1 -1
  313. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambdaref_expression.hpp +1 -1
  314. package/src/duckdb/src/include/duckdb/planner/expression/bound_operator_expression.hpp +1 -1
  315. package/src/duckdb/src/include/duckdb/planner/expression/bound_parameter_expression.hpp +1 -1
  316. package/src/duckdb/src/include/duckdb/planner/expression/bound_reference_expression.hpp +1 -1
  317. package/src/duckdb/src/include/duckdb/planner/expression/bound_subquery_expression.hpp +1 -1
  318. package/src/duckdb/src/include/duckdb/planner/expression/bound_unnest_expression.hpp +1 -1
  319. package/src/duckdb/src/include/duckdb/planner/expression/bound_window_expression.hpp +1 -1
  320. package/src/duckdb/src/include/duckdb/planner/expression.hpp +5 -7
  321. package/src/duckdb/src/include/duckdb/planner/filter/conjunction_filter.hpp +6 -0
  322. package/src/duckdb/src/include/duckdb/planner/filter/constant_filter.hpp +3 -0
  323. package/src/duckdb/src/include/duckdb/planner/filter/null_filter.hpp +6 -0
  324. package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +2 -2
  325. package/src/duckdb/src/include/duckdb/planner/operator/logical_pivot.hpp +3 -0
  326. package/src/duckdb/src/include/duckdb/planner/table_binding.hpp +26 -0
  327. package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +17 -0
  328. package/src/duckdb/src/include/duckdb/planner/tableref/bound_pivotref.hpp +3 -0
  329. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_analyze.hpp +1 -1
  330. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
  331. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_analyze.hpp +2 -2
  332. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
  333. package/src/duckdb/src/include/duckdb/storage/index.hpp +2 -2
  334. package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +1 -1
  335. package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +12 -0
  336. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +1 -1
  337. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +25 -2
  338. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +12 -0
  339. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +22 -0
  340. package/src/duckdb/src/include/duckdb/transaction/duck_transaction_manager.hpp +2 -2
  341. package/src/duckdb/src/include/duckdb/transaction/transaction.hpp +2 -2
  342. package/src/duckdb/src/main/capi/appender-c.cpp +5 -5
  343. package/src/duckdb/src/main/capi/arrow-c.cpp +10 -10
  344. package/src/duckdb/src/main/capi/cast/from_decimal-c.cpp +1 -1
  345. package/src/duckdb/src/main/capi/cast/utils-c.cpp +1 -1
  346. package/src/duckdb/src/main/capi/config-c.cpp +1 -1
  347. package/src/duckdb/src/main/capi/data_chunk-c.cpp +17 -17
  348. package/src/duckdb/src/main/capi/duckdb-c.cpp +4 -4
  349. package/src/duckdb/src/main/capi/duckdb_value-c.cpp +4 -4
  350. package/src/duckdb/src/main/capi/logical_types-c.cpp +22 -21
  351. package/src/duckdb/src/main/capi/pending-c.cpp +6 -6
  352. package/src/duckdb/src/main/capi/prepared-c.cpp +10 -10
  353. package/src/duckdb/src/main/capi/replacement_scan-c.cpp +6 -6
  354. package/src/duckdb/src/main/capi/result-c.cpp +23 -23
  355. package/src/duckdb/src/main/capi/table_function-c.cpp +1 -1
  356. package/src/duckdb/src/main/client_context.cpp +3 -3
  357. package/src/duckdb/src/main/database_manager.cpp +1 -1
  358. package/src/duckdb/src/main/error_manager.cpp +1 -1
  359. package/src/duckdb/src/main/extension/extension_load.cpp +1 -1
  360. package/src/duckdb/src/main/relation/create_table_relation.cpp +1 -1
  361. package/src/duckdb/src/main/relation/create_view_relation.cpp +1 -1
  362. package/src/duckdb/src/main/relation/delete_relation.cpp +1 -1
  363. package/src/duckdb/src/main/relation/explain_relation.cpp +1 -1
  364. package/src/duckdb/src/main/relation/insert_relation.cpp +1 -1
  365. package/src/duckdb/src/main/relation/update_relation.cpp +1 -1
  366. package/src/duckdb/src/main/relation/write_csv_relation.cpp +1 -1
  367. package/src/duckdb/src/main/relation/write_parquet_relation.cpp +1 -1
  368. package/src/duckdb/src/main/relation.cpp +1 -1
  369. package/src/duckdb/src/optimizer/deliminator.cpp +12 -12
  370. package/src/duckdb/src/optimizer/expression_heuristics.cpp +1 -0
  371. package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -3
  372. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +10 -10
  373. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +4 -7
  374. package/src/duckdb/src/optimizer/matcher/expression_matcher.cpp +1 -1
  375. package/src/duckdb/src/optimizer/pullup/pullup_projection.cpp +2 -2
  376. package/src/duckdb/src/optimizer/regex_range_filter.cpp +2 -4
  377. package/src/duckdb/src/optimizer/rule/distributivity.cpp +2 -2
  378. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +6 -6
  379. package/src/duckdb/src/optimizer/statistics/operator/propagate_get.cpp +2 -2
  380. package/src/duckdb/src/parallel/executor.cpp +1 -1
  381. package/src/duckdb/src/parser/base_expression.cpp +2 -5
  382. package/src/duckdb/src/parser/expression/between_expression.cpp +4 -4
  383. package/src/duckdb/src/parser/expression/case_expression.cpp +6 -6
  384. package/src/duckdb/src/parser/expression/cast_expression.cpp +4 -4
  385. package/src/duckdb/src/parser/expression/collate_expression.cpp +3 -3
  386. package/src/duckdb/src/parser/expression/columnref_expression.cpp +4 -4
  387. package/src/duckdb/src/parser/expression/comparison_expression.cpp +3 -3
  388. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +2 -2
  389. package/src/duckdb/src/parser/expression/constant_expression.cpp +2 -2
  390. package/src/duckdb/src/parser/expression/function_expression.cpp +10 -14
  391. package/src/duckdb/src/parser/expression/lambda_expression.cpp +2 -2
  392. package/src/duckdb/src/parser/expression/operator_expression.cpp +4 -4
  393. package/src/duckdb/src/parser/expression/parameter_expression.cpp +2 -2
  394. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +3 -3
  395. package/src/duckdb/src/parser/expression/star_expression.cpp +9 -9
  396. package/src/duckdb/src/parser/expression/subquery_expression.cpp +5 -5
  397. package/src/duckdb/src/parser/expression/window_expression.cpp +13 -24
  398. package/src/duckdb/src/parser/parsed_expression.cpp +34 -18
  399. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +4 -4
  400. package/src/duckdb/src/parser/parser.cpp +3 -3
  401. package/src/duckdb/src/parser/query_node/select_node.cpp +6 -13
  402. package/src/duckdb/src/parser/query_node.cpp +7 -6
  403. package/src/duckdb/src/parser/result_modifier.cpp +25 -18
  404. package/src/duckdb/src/parser/statement/select_statement.cpp +3 -3
  405. package/src/duckdb/src/parser/tableref/basetableref.cpp +4 -4
  406. package/src/duckdb/src/parser/tableref/emptytableref.cpp +1 -1
  407. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +5 -5
  408. package/src/duckdb/src/parser/tableref/joinref.cpp +6 -6
  409. package/src/duckdb/src/parser/tableref/pivotref.cpp +10 -15
  410. package/src/duckdb/src/parser/tableref/subqueryref.cpp +3 -3
  411. package/src/duckdb/src/parser/tableref/table_function.cpp +3 -3
  412. package/src/duckdb/src/parser/tableref.cpp +12 -3
  413. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +7 -7
  414. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +4 -4
  415. package/src/duckdb/src/parser/transform/expression/transform_boolean_test.cpp +4 -4
  416. package/src/duckdb/src/parser/transform/expression/transform_case.cpp +8 -10
  417. package/src/duckdb/src/parser/transform/expression/transform_cast.cpp +7 -9
  418. package/src/duckdb/src/parser/transform/expression/transform_coalesce.cpp +3 -5
  419. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +22 -22
  420. package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +2 -2
  421. package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +42 -44
  422. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +70 -75
  423. package/src/duckdb/src/parser/transform/expression/transform_grouping_function.cpp +4 -4
  424. package/src/duckdb/src/parser/transform/expression/transform_interval.cpp +7 -7
  425. package/src/duckdb/src/parser/transform/expression/transform_is_null.cpp +4 -5
  426. package/src/duckdb/src/parser/transform/expression/transform_lambda.cpp +5 -6
  427. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +28 -29
  428. package/src/duckdb/src/parser/transform/expression/transform_param_ref.cpp +13 -14
  429. package/src/duckdb/src/parser/transform/expression/transform_positional_reference.cpp +4 -4
  430. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +9 -10
  431. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +28 -32
  432. package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +18 -18
  433. package/src/duckdb/src/parser/transform/helpers/transform_sample.cpp +3 -3
  434. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +27 -26
  435. package/src/duckdb/src/parser/transform/statement/transform_alter_sequence.cpp +11 -14
  436. package/src/duckdb/src/parser/transform/statement/transform_alter_table.cpp +14 -16
  437. package/src/duckdb/src/parser/transform/statement/transform_attach.cpp +8 -9
  438. package/src/duckdb/src/parser/transform/statement/transform_call.cpp +2 -5
  439. package/src/duckdb/src/parser/transform/statement/transform_checkpoint.cpp +4 -6
  440. package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +22 -23
  441. package/src/duckdb/src/parser/transform/statement/transform_create_database.cpp +3 -4
  442. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +14 -18
  443. package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +13 -15
  444. package/src/duckdb/src/parser/transform/statement/transform_create_schema.cpp +8 -10
  445. package/src/duckdb/src/parser/transform/statement/transform_create_sequence.cpp +8 -10
  446. package/src/duckdb/src/parser/transform/statement/transform_create_table.cpp +26 -28
  447. package/src/duckdb/src/parser/transform/statement/transform_create_table_as.cpp +8 -10
  448. package/src/duckdb/src/parser/transform/statement/transform_create_type.cpp +12 -15
  449. package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +13 -18
  450. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +11 -13
  451. package/src/duckdb/src/parser/transform/statement/transform_detach.cpp +3 -4
  452. package/src/duckdb/src/parser/transform/statement/transform_drop.cpp +20 -22
  453. package/src/duckdb/src/parser/transform/statement/transform_explain.cpp +5 -7
  454. package/src/duckdb/src/parser/transform/statement/transform_export.cpp +5 -6
  455. package/src/duckdb/src/parser/transform/statement/transform_import.cpp +2 -3
  456. package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +21 -24
  457. package/src/duckdb/src/parser/transform/statement/transform_load.cpp +4 -5
  458. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -7
  459. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +7 -9
  460. package/src/duckdb/src/parser/transform/statement/transform_prepare.cpp +11 -19
  461. package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +12 -14
  462. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +12 -9
  463. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +34 -34
  464. package/src/duckdb/src/parser/transform/statement/transform_set.cpp +18 -19
  465. package/src/duckdb/src/parser/transform/statement/transform_show.cpp +5 -7
  466. package/src/duckdb/src/parser/transform/statement/transform_show_select.cpp +4 -5
  467. package/src/duckdb/src/parser/transform/statement/transform_transaction.cpp +3 -5
  468. package/src/duckdb/src/parser/transform/statement/transform_update.cpp +10 -13
  469. package/src/duckdb/src/parser/transform/statement/transform_upsert.cpp +4 -4
  470. package/src/duckdb/src/parser/transform/statement/transform_use.cpp +2 -3
  471. package/src/duckdb/src/parser/transform/statement/transform_vacuum.cpp +6 -10
  472. package/src/duckdb/src/parser/transform/tableref/transform_base_tableref.cpp +18 -18
  473. package/src/duckdb/src/parser/transform/tableref/transform_from.cpp +5 -5
  474. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +11 -11
  475. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +27 -27
  476. package/src/duckdb/src/parser/transform/tableref/transform_subquery.cpp +5 -5
  477. package/src/duckdb/src/parser/transform/tableref/transform_table_function.cpp +13 -12
  478. package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +8 -8
  479. package/src/duckdb/src/parser/transformer.cpp +46 -46
  480. package/src/duckdb/src/planner/bind_context.cpp +6 -6
  481. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +1 -1
  482. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +1 -1
  483. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +1 -1
  484. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +6 -3
  485. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +8 -8
  486. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +4 -4
  487. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +13 -5
  488. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +2 -2
  489. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +1 -1
  490. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +1 -1
  491. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +14 -7
  492. package/src/duckdb/src/planner/binder.cpp +1 -1
  493. package/src/duckdb/src/planner/bound_result_modifier.cpp +16 -11
  494. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +5 -5
  495. package/src/duckdb/src/planner/expression/bound_between_expression.cpp +5 -5
  496. package/src/duckdb/src/planner/expression/bound_case_expression.cpp +5 -5
  497. package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +3 -3
  498. package/src/duckdb/src/planner/expression/bound_columnref_expression.cpp +2 -2
  499. package/src/duckdb/src/planner/expression/bound_comparison_expression.cpp +4 -4
  500. package/src/duckdb/src/planner/expression/bound_conjunction_expression.cpp +2 -2
  501. package/src/duckdb/src/planner/expression/bound_constant_expression.cpp +2 -2
  502. package/src/duckdb/src/planner/expression/bound_expression.cpp +1 -1
  503. package/src/duckdb/src/planner/expression/bound_function_expression.cpp +3 -4
  504. package/src/duckdb/src/planner/expression/bound_lambda_expression.cpp +4 -5
  505. package/src/duckdb/src/planner/expression/bound_lambdaref_expression.cpp +2 -2
  506. package/src/duckdb/src/planner/expression/bound_operator_expression.cpp +3 -4
  507. package/src/duckdb/src/planner/expression/bound_parameter_expression.cpp +2 -2
  508. package/src/duckdb/src/planner/expression/bound_reference_expression.cpp +2 -2
  509. package/src/duckdb/src/planner/expression/bound_subquery_expression.cpp +1 -1
  510. package/src/duckdb/src/planner/expression/bound_unnest_expression.cpp +3 -3
  511. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +8 -21
  512. package/src/duckdb/src/planner/expression.cpp +15 -0
  513. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +2 -2
  514. package/src/duckdb/src/planner/expression_iterator.cpp +2 -2
  515. package/src/duckdb/src/planner/filter/conjunction_filter.cpp +2 -2
  516. package/src/duckdb/src/planner/filter/constant_filter.cpp +1 -1
  517. package/src/duckdb/src/planner/logical_operator.cpp +3 -4
  518. package/src/duckdb/src/planner/logical_operator_visitor.cpp +1 -1
  519. package/src/duckdb/src/planner/table_filter.cpp +1 -1
  520. package/src/duckdb/src/storage/arena_allocator.cpp +2 -2
  521. package/src/duckdb/src/storage/buffer/block_handle.cpp +1 -1
  522. package/src/duckdb/src/storage/checkpoint/write_overflow_strings_to_disk.cpp +2 -2
  523. package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -3
  524. package/src/duckdb/src/storage/compression/bitpacking.cpp +8 -8
  525. package/src/duckdb/src/storage/compression/dictionary_compression.cpp +36 -36
  526. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +11 -11
  527. package/src/duckdb/src/storage/compression/fsst.cpp +34 -34
  528. package/src/duckdb/src/storage/compression/rle.cpp +8 -8
  529. package/src/duckdb/src/storage/compression/string_uncompressed.cpp +13 -13
  530. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +11 -11
  531. package/src/duckdb/src/storage/data_table.cpp +2 -2
  532. package/src/duckdb/src/storage/index.cpp +1 -3
  533. package/src/duckdb/src/storage/local_storage.cpp +2 -1
  534. package/src/duckdb/src/storage/magic_bytes.cpp +1 -1
  535. package/src/duckdb/src/storage/single_file_block_manager.cpp +3 -3
  536. package/src/duckdb/src/storage/standard_buffer_manager.cpp +3 -3
  537. package/src/duckdb/src/storage/statistics/list_stats.cpp +1 -1
  538. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +1 -1
  539. package/src/duckdb/src/storage/statistics/string_stats.cpp +15 -14
  540. package/src/duckdb/src/storage/table/chunk_info.cpp +2 -2
  541. package/src/duckdb/src/storage/table/column_segment.cpp +3 -3
  542. package/src/duckdb/src/storage/table/list_column_data.cpp +8 -7
  543. package/src/duckdb/src/storage/table/row_group.cpp +4 -4
  544. package/src/duckdb/src/storage/table/standard_column_data.cpp +1 -1
  545. package/src/duckdb/src/storage/table/update_segment.cpp +12 -12
  546. package/src/duckdb/src/storage/wal_replay.cpp +1 -1
  547. package/src/duckdb/src/transaction/cleanup_state.cpp +3 -3
  548. package/src/duckdb/src/transaction/commit_state.cpp +8 -8
  549. package/src/duckdb/src/transaction/duck_transaction.cpp +9 -7
  550. package/src/duckdb/src/transaction/duck_transaction_manager.cpp +16 -16
  551. package/src/duckdb/src/transaction/rollback_state.cpp +3 -3
  552. package/src/duckdb/src/verification/prepared_statement_verifier.cpp +1 -1
  553. package/src/duckdb/src/verification/statement_verifier.cpp +3 -4
  554. package/src/duckdb/third_party/hyperloglog/hyperloglog.hpp +2 -2
  555. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +13479 -13564
  556. package/src/duckdb/third_party/pcg/pcg_extras.hpp +1 -1
@@ -67,7 +67,7 @@ PhysicalIndexJoin::PhysicalIndexJoin(LogicalOperator &op, unique_ptr<PhysicalOpe
67
67
  left_projection_map(left_projection_map_p), right_projection_map(std::move(right_projection_map_p)),
68
68
  index(index_p), conditions(std::move(cond)), join_type(join_type), lhs_first(lhs_first) {
69
69
  D_ASSERT(right->type == PhysicalOperatorType::TABLE_SCAN);
70
- auto &tbl_scan = (PhysicalTableScan &)*right;
70
+ auto &tbl_scan = right->Cast<PhysicalTableScan>();
71
71
  column_ids = std::move(column_ids_p);
72
72
  children.push_back(std::move(left));
73
73
  children.push_back(std::move(right));
@@ -109,7 +109,7 @@ unique_ptr<OperatorState> PhysicalIndexJoin::GetOperatorState(ExecutionContext &
109
109
 
110
110
  void PhysicalIndexJoin::Output(ExecutionContext &context, DataChunk &input, DataChunk &chunk,
111
111
  OperatorState &state_p) const {
112
- auto &phy_tbl_scan = (PhysicalTableScan &)*children[1];
112
+ auto &phy_tbl_scan = children[1]->Cast<PhysicalTableScan>();
113
113
  auto &bind_tbl = phy_tbl_scan.bind_data->Cast<TableScanBindData>();
114
114
  auto &transaction = DuckTransaction::Get(context.client, bind_tbl.table.catalog);
115
115
  auto &state = state_p.Cast<IndexJoinOperatorState>();
@@ -139,7 +139,7 @@ void PhysicalIndexJoin::Output(ExecutionContext &context, DataChunk &input, Data
139
139
  }
140
140
  state.rhs_chunk.Reset();
141
141
  state.fetch_state = make_uniq<ColumnFetchState>();
142
- Vector row_ids(LogicalType::ROW_TYPE, (data_ptr_t)&fetch_rows[0]);
142
+ Vector row_ids(LogicalType::ROW_TYPE, data_ptr_cast(&fetch_rows[0]));
143
143
  tbl.Fetch(transaction, state.rhs_chunk, fetch_ids, row_ids, output_sel_idx, *state.fetch_state);
144
144
  }
145
145
 
@@ -443,7 +443,7 @@ unique_ptr<GlobalSourceState> PhysicalNestedLoopJoin::GetGlobalSourceState(Clien
443
443
 
444
444
  unique_ptr<LocalSourceState> PhysicalNestedLoopJoin::GetLocalSourceState(ExecutionContext &context,
445
445
  GlobalSourceState &gstate) const {
446
- return make_uniq<NestedLoopJoinLocalScanState>(*this, (NestedLoopJoinGlobalScanState &)gstate);
446
+ return make_uniq<NestedLoopJoinLocalScanState>(*this, gstate.Cast<NestedLoopJoinGlobalScanState>());
447
447
  }
448
448
 
449
449
  SourceResultType PhysicalNestedLoopJoin::GetData(ExecutionContext &context, DataChunk &chunk,
@@ -451,8 +451,8 @@ SourceResultType PhysicalNestedLoopJoin::GetData(ExecutionContext &context, Data
451
451
  D_ASSERT(IsRightOuterJoin(join_type));
452
452
  // check if we need to scan any unmatched tuples from the RHS for the full/right outer join
453
453
  auto &sink = sink_state->Cast<NestedLoopJoinGlobalState>();
454
- auto &gstate = (NestedLoopJoinGlobalScanState &)input.global_state;
455
- auto &lstate = (NestedLoopJoinLocalScanState &)input.local_state;
454
+ auto &gstate = input.global_state.Cast<NestedLoopJoinGlobalScanState>();
455
+ auto &lstate = input.local_state.Cast<NestedLoopJoinLocalScanState>();
456
456
 
457
457
  // if the LHS is exhausted in a FULL/RIGHT OUTER JOIN, we scan chunks we still need to output
458
458
  sink.right_outer.Scan(gstate.scan_state, lstate.scan_state, chunk);
@@ -385,7 +385,7 @@ static idx_t MergeJoinSimpleBlocks(PiecewiseMergeJoinState &lstate, MergeJoinGlo
385
385
 
386
386
  void PhysicalPiecewiseMergeJoin::ResolveSimpleJoin(ExecutionContext &context, DataChunk &input, DataChunk &chunk,
387
387
  OperatorState &state_p) const {
388
- auto &state = (PiecewiseMergeJoinState &)state_p;
388
+ auto &state = state_p.Cast<PiecewiseMergeJoinState>();
389
389
  auto &gstate = sink_state->Cast<MergeJoinGlobalState>();
390
390
 
391
391
  state.ResolveJoinKeys(input);
@@ -507,7 +507,7 @@ static idx_t MergeJoinComplexBlocks(BlockMergeInfo &l, BlockMergeInfo &r, const
507
507
 
508
508
  OperatorResultType PhysicalPiecewiseMergeJoin::ResolveComplexJoin(ExecutionContext &context, DataChunk &input,
509
509
  DataChunk &chunk, OperatorState &state_p) const {
510
- auto &state = (PiecewiseMergeJoinState &)state_p;
510
+ auto &state = state_p.Cast<PiecewiseMergeJoinState>();
511
511
  auto &gstate = sink_state->Cast<MergeJoinGlobalState>();
512
512
  auto &rsorted = *gstate.table->global_sort_state.sorted_blocks[0];
513
513
  const auto left_cols = input.ColumnCount();
@@ -682,7 +682,7 @@ SourceResultType PhysicalPiecewiseMergeJoin::GetData(ExecutionContext &context,
682
682
  D_ASSERT(IsRightOuterJoin(join_type));
683
683
  // check if we need to scan any unmatched tuples from the RHS for the full/right outer join
684
684
  auto &sink = sink_state->Cast<MergeJoinGlobalState>();
685
- auto &state = (PiecewiseJoinScanState &)input.global_state;
685
+ auto &state = input.global_state.Cast<PiecewiseJoinScanState>();
686
686
 
687
687
  lock_guard<mutex> l(state.lock);
688
688
  if (!state.scanner) {
@@ -276,7 +276,7 @@ void TopNHeap::Finalize() {
276
276
  }
277
277
 
278
278
  void TopNHeap::Reduce() {
279
- idx_t min_sort_threshold = MaxValue<idx_t>(STANDARD_VECTOR_SIZE * 5, 2 * (limit + offset));
279
+ idx_t min_sort_threshold = MaxValue<idx_t>(STANDARD_VECTOR_SIZE * 5ULL, 2ULL * (limit + offset));
280
280
  if (sort_state.count < min_sort_threshold) {
281
281
  // only reduce when we pass two times the limit + offset, or 5 vectors (whichever comes first)
282
282
  return;
@@ -186,8 +186,8 @@ static string TrimWhitespace(const string &col_name) {
186
186
 
187
187
  static string NormalizeColumnName(const string &col_name) {
188
188
  // normalize UTF8 characters to NFKD
189
- auto nfkd = utf8proc_NFKD((const utf8proc_uint8_t *)col_name.c_str(), col_name.size());
190
- const string col_name_nfkd = string((const char *)nfkd, strlen((const char *)nfkd));
189
+ auto nfkd = utf8proc_NFKD(reinterpret_cast<const utf8proc_uint8_t *>(col_name.c_str()), col_name.size());
190
+ const string col_name_nfkd = string(const_char_ptr_cast(nfkd), strlen(const_char_ptr_cast(nfkd)));
191
191
  free(nfkd);
192
192
 
193
193
  // only keep ASCII characters 0-9 a-z A-Z and replace spaces with regular whitespace
@@ -99,7 +99,7 @@ idx_t CSVFileHandle::Read(void *buffer, idx_t nr_bytes) {
99
99
  }
100
100
  // we have data left to read from the file
101
101
  // read directly into the buffer
102
- auto bytes_read = file_handle->Read((char *)buffer + result_offset, nr_bytes - result_offset);
102
+ auto bytes_read = file_handle->Read(char_ptr_cast(buffer) + result_offset, nr_bytes - result_offset);
103
103
  file_size = file_handle->GetFileSize();
104
104
  read_position += bytes_read;
105
105
  if (reset_enabled) {
@@ -114,7 +114,7 @@ idx_t CSVFileHandle::Read(void *buffer, idx_t nr_bytes) {
114
114
  }
115
115
  cached_buffer = std::move(new_buffer);
116
116
  }
117
- memcpy(cached_buffer.get() + buffer_size, (char *)buffer + result_offset, bytes_read);
117
+ memcpy(cached_buffer.get() + buffer_size, char_ptr_cast(buffer) + result_offset, bytes_read);
118
118
  buffer_size += bytes_read;
119
119
  }
120
120
 
@@ -177,6 +177,8 @@ void BufferedCSVReaderOptions::SetReadOption(const string &loption, const Value
177
177
  null_padding = ParseBoolean(value, loption);
178
178
  } else if (loption == "allow_quoted_nulls") {
179
179
  allow_quoted_nulls = ParseBoolean(value, loption);
180
+ } else if (loption == "parallel") {
181
+ parallel_mode = ParseBoolean(value, loption) ? ParallelMode::PARALLEL : ParallelMode::SINGLE_THREADED;
180
182
  } else {
181
183
  throw BinderException("Unrecognized option for CSV reader \"%s\"", loption);
182
184
  }
@@ -279,9 +279,8 @@ unique_ptr<GlobalSinkState> PhysicalBatchInsert::GetGlobalSinkState(ClientContex
279
279
  // CREATE TABLE AS
280
280
  D_ASSERT(!insert_table);
281
281
  auto &catalog = schema->catalog;
282
- table = (TableCatalogEntry *)catalog
283
- .CreateTable(catalog.GetCatalogTransaction(context), *schema.get_mutable(), *info)
284
- .get();
282
+ auto created_table = catalog.CreateTable(catalog.GetCatalogTransaction(context), *schema.get_mutable(), *info);
283
+ table = &created_table->Cast<TableCatalogEntry>();
285
284
  } else {
286
285
  D_ASSERT(insert_table);
287
286
  D_ASSERT(insert_table->IsDuckTable());
@@ -63,7 +63,7 @@ PhysicalInsert::PhysicalInsert(LogicalOperator &op, SchemaCatalogEntry &schema,
63
63
 
64
64
  void PhysicalInsert::GetInsertInfo(const BoundCreateTableInfo &info, vector<LogicalType> &insert_types,
65
65
  vector<unique_ptr<Expression>> &bound_defaults) {
66
- auto &create_info = (CreateTableInfo &)*info.base;
66
+ auto &create_info = info.base->Cast<CreateTableInfo>();
67
67
  for (auto &col : create_info.columns.Physical()) {
68
68
  insert_types.push_back(col.GetType());
69
69
  bound_defaults.push_back(make_uniq<BoundConstantExpression>(Value(col.GetType())));
@@ -17,11 +17,11 @@ PhysicalPivot::PhysicalPivot(vector<LogicalType> types_p, unique_ptr<PhysicalOpe
17
17
  }
18
18
  // extract the empty aggregate expressions
19
19
  for (auto &aggr_expr : bound_pivot.aggregates) {
20
- auto &aggr = (BoundAggregateExpression &)*aggr_expr;
20
+ auto &aggr = aggr_expr->Cast<BoundAggregateExpression>();
21
21
  // for each aggregate, initialize an empty aggregate state and finalize it immediately
22
22
  auto state = make_unsafe_uniq_array<data_t>(aggr.function.state_size());
23
23
  aggr.function.initialize(state.get());
24
- Vector state_vector(Value::POINTER((uintptr_t)state.get()));
24
+ Vector state_vector(Value::POINTER(CastPointerToValue(state.get())));
25
25
  Vector result_vector(aggr_expr->return_type);
26
26
  AggregateInputData aggr_input_data(aggr.bind_info.get(), Allocator::DefaultAllocator());
27
27
  aggr.function.finalize(state_vector, aggr_input_data, result_vector, 1, 0);
@@ -27,7 +27,7 @@ PhysicalProjection::PhysicalProjection(vector<LogicalType> types, vector<unique_
27
27
 
28
28
  OperatorResultType PhysicalProjection::Execute(ExecutionContext &context, DataChunk &input, DataChunk &chunk,
29
29
  GlobalOperatorState &gstate, OperatorState &state_p) const {
30
- auto &state = (ProjectionState &)state_p;
30
+ auto &state = state_p.Cast<ProjectionState>();
31
31
  state.executor.Execute(input, chunk);
32
32
  return OperatorResultType::NEED_MORE_INPUT;
33
33
  }
@@ -65,7 +65,7 @@ void UnnestOperatorState::SetLongestListLength() {
65
65
  if (vector_data.validity.RowIsValid(current_idx)) {
66
66
 
67
67
  // check if this list is longer
68
- auto list_data = (list_entry_t *)vector_data.data;
68
+ auto list_data = UnifiedVectorFormat::GetData<list_entry_t>(vector_data);
69
69
  auto list_entry = list_data[current_idx];
70
70
  if (list_entry.length > longest_list_length) {
71
71
  longest_list_length = list_entry.length;
@@ -98,7 +98,7 @@ static void UnnestNull(idx_t start, idx_t end, Vector &result) {
98
98
  template <class T>
99
99
  static void TemplatedUnnest(UnifiedVectorFormat &vector_data, idx_t start, idx_t end, Vector &result) {
100
100
 
101
- auto source_data = (T *)vector_data.data;
101
+ auto source_data = UnifiedVectorFormat::GetData<T>(vector_data);
102
102
  auto &source_mask = vector_data.validity;
103
103
 
104
104
  D_ASSERT(result.GetVectorType() == VectorType::FLAT_VECTOR);
@@ -314,7 +314,7 @@ OperatorResultType PhysicalUnnest::ExecuteInternal(ExecutionContext &context, Da
314
314
 
315
315
  } else {
316
316
 
317
- auto list_data = (list_entry_t *)vector_data.data;
317
+ auto list_data = UnifiedVectorFormat::GetData<list_entry_t>(vector_data);
318
318
  auto list_entry = list_data[current_idx];
319
319
 
320
320
  idx_t list_count = 0;
@@ -1,6 +1,7 @@
1
1
  #include "duckdb/execution/operator/scan/physical_column_data_scan.hpp"
2
2
 
3
3
  #include "duckdb/execution/operator/join/physical_delim_join.hpp"
4
+ #include "duckdb/execution/operator/aggregate/physical_hash_aggregate.hpp"
4
5
  #include "duckdb/parallel/meta_pipeline.hpp"
5
6
  #include "duckdb/parallel/pipeline.hpp"
6
7
 
@@ -60,7 +61,7 @@ void PhysicalColumnDataScan::BuildPipelines(Pipeline &current, MetaPipeline &met
60
61
  D_ASSERT(delim_sink->type == PhysicalOperatorType::DELIM_JOIN);
61
62
  auto &delim_join = delim_sink->Cast<PhysicalDelimJoin>();
62
63
  current.AddDependency(delim_dependency);
63
- state.SetPipelineSource(current, (PhysicalOperator &)*delim_join.distinct);
64
+ state.SetPipelineSource(current, delim_join.distinct->Cast<PhysicalOperator>());
64
65
  return;
65
66
  }
66
67
  case PhysicalOperatorType::RECURSIVE_CTE_SCAN:
@@ -22,7 +22,7 @@ unique_ptr<OperatorState> PhysicalExpressionScan::GetOperatorState(ExecutionCont
22
22
 
23
23
  OperatorResultType PhysicalExpressionScan::Execute(ExecutionContext &context, DataChunk &input, DataChunk &chunk,
24
24
  GlobalOperatorState &gstate, OperatorState &state_p) const {
25
- auto &state = (ExpressionScanState &)state_p;
25
+ auto &state = state_p.Cast<ExpressionScanState>();
26
26
 
27
27
  for (; chunk.size() + input.size() <= STANDARD_VECTOR_SIZE && state.expression_index < expressions.size();
28
28
  state.expression_index++) {
@@ -19,7 +19,7 @@ PhysicalPositionalScan::PhysicalPositionalScan(vector<LogicalType> types, unique
19
19
  if (left->type == PhysicalOperatorType::TABLE_SCAN) {
20
20
  child_tables.emplace_back(std::move(left));
21
21
  } else if (left->type == PhysicalOperatorType::POSITIONAL_SCAN) {
22
- auto &left_scan = (PhysicalPositionalScan &)*left;
22
+ auto &left_scan = left->Cast<PhysicalPositionalScan>();
23
23
  child_tables = std::move(left_scan.child_tables);
24
24
  } else {
25
25
  throw InternalException("Invalid left input for PhysicalPositionalScan");
@@ -28,7 +28,7 @@ PhysicalPositionalScan::PhysicalPositionalScan(vector<LogicalType> types, unique
28
28
  if (right->type == PhysicalOperatorType::TABLE_SCAN) {
29
29
  child_tables.emplace_back(std::move(right));
30
30
  } else if (right->type == PhysicalOperatorType::POSITIONAL_SCAN) {
31
- auto &right_scan = (PhysicalPositionalScan &)*right;
31
+ auto &right_scan = right->Cast<PhysicalPositionalScan>();
32
32
  auto &right_tables = right_scan.child_tables;
33
33
  child_tables.reserve(child_tables.size() + right_tables.size());
34
34
  std::move(right_tables.begin(), right_tables.end(), std::back_inserter(child_tables));
@@ -45,7 +45,7 @@ SinkResultType PhysicalCreateType::Sink(ExecutionContext &context, DataChunk &ch
45
45
  gstate.capacity *= 2;
46
46
  }
47
47
 
48
- auto src_ptr = (string_t *)sdata.data;
48
+ auto src_ptr = UnifiedVectorFormat::GetData<string_t>(sdata);
49
49
  auto result_ptr = FlatVector::GetData<string_t>(gstate.result);
50
50
  // Input vector has NULL value, we just throw an exception
51
51
  for (idx_t i = 0; i < chunk.size(); i++) {
@@ -51,7 +51,7 @@ PerfectAggregateHashTable::~PerfectAggregateHashTable() {
51
51
  template <class T>
52
52
  static void ComputeGroupLocationTemplated(UnifiedVectorFormat &group_data, Value &min, uintptr_t *address_data,
53
53
  idx_t current_shift, idx_t count) {
54
- auto data = (T *)group_data.data;
54
+ auto data = UnifiedVectorFormat::GetData<T>(group_data);
55
55
  auto min_val = min.GetValueUnsafe<T>();
56
56
  if (!group_data.validity.AllValid()) {
57
57
  for (idx_t i = 0; i < count; i++) {
@@ -186,7 +186,7 @@ static bool PlanIndexJoin(ClientContext &context, LogicalComparisonJoin &op, uni
186
186
  }
187
187
  // index joins are not supported if there are pushed down table filters
188
188
  D_ASSERT(right->type == PhysicalOperatorType::TABLE_SCAN);
189
- auto &tbl_scan = (PhysicalTableScan &)*right;
189
+ auto &tbl_scan = right->Cast<PhysicalTableScan>();
190
190
  // if (tbl_scan.table_filters && !tbl_scan.table_filters->filters.empty()) {
191
191
  // return false;
192
192
  // }
@@ -34,7 +34,7 @@ unique_ptr<PhysicalOperator> DuckCatalog::PlanCreateTableAs(ClientContext &conte
34
34
  }
35
35
 
36
36
  unique_ptr<PhysicalOperator> PhysicalPlanGenerator::CreatePlan(LogicalCreateTable &op) {
37
- const auto &create_info = (CreateTableInfo &)*op.info->base;
37
+ const auto &create_info = op.info->base->Cast<CreateTableInfo>();
38
38
  auto &catalog = op.info->schema.catalog;
39
39
  auto existing_entry = catalog.GetEntry<TableCatalogEntry>(context, create_info.schema, create_info.table,
40
40
  OnEntryNotFound::RETURN_NULL);
@@ -207,10 +207,10 @@ unique_ptr<PhysicalOperator> PhysicalPlanGenerator::CreatePlan(LogicalOperator &
207
207
  plan = CreatePlan(op.Cast<LogicalReset>());
208
208
  break;
209
209
  case LogicalOperatorType::LOGICAL_PIVOT:
210
- plan = CreatePlan((LogicalPivot &)op);
210
+ plan = CreatePlan(op.Cast<LogicalPivot>());
211
211
  break;
212
212
  case LogicalOperatorType::LOGICAL_EXTENSION_OPERATOR:
213
- plan = ((LogicalExtensionOperator &)op).CreatePlan(context, *this);
213
+ plan = op.Cast<LogicalExtensionOperator>().CreatePlan(context, *this);
214
214
 
215
215
  if (!plan) {
216
216
  throw InternalException("Missing PhysicalOperator for Extension Operator");
@@ -408,7 +408,7 @@ SourceResultType RadixPartitionedHashTable::GetData(ExecutionContext &context, D
408
408
  aggr.function.initialize(aggr_state.get());
409
409
 
410
410
  AggregateInputData aggr_input_data(aggr.bind_info.get(), Allocator::DefaultAllocator());
411
- Vector state_vector(Value::POINTER((uintptr_t)aggr_state.get()));
411
+ Vector state_vector(Value::POINTER(CastPointerToValue(aggr_state.get())));
412
412
  aggr.function.finalize(state_vector, aggr_input_data, chunk.data[null_groups.size() + i], 1, 0);
413
413
  if (aggr.function.destructor) {
414
414
  aggr.function.destructor(state_vector, aggr_input_data, 1);
@@ -186,7 +186,7 @@ void BaseReservoirSampling::InitializeReservoir(idx_t cur_size, idx_t sample_siz
186
186
  //! we use a priority queue to extract the minimum key in O(1) time
187
187
  for (idx_t i = 0; i < sample_size; i++) {
188
188
  double k_i = random.NextRandom();
189
- reservoir_weights.push(std::make_pair(-k_i, i));
189
+ reservoir_weights.emplace(-k_i, i);
190
190
  }
191
191
  SetNextEntry();
192
192
  }
@@ -217,7 +217,7 @@ void BaseReservoirSampling::ReplaceElement() {
217
217
  //! we generate a random number between (min_threshold, 1)
218
218
  double r2 = random.NextRandom(min_threshold, 1);
219
219
  //! now we insert the new weight into the reservoir
220
- reservoir_weights.push(std::make_pair(-r2, min_entry));
220
+ reservoir_weights.emplace(-r2, min_entry);
221
221
  //! we update the min entry with the new min entry in the reservoir
222
222
  SetNextEntry();
223
223
  }
@@ -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
  }