duckdb 0.8.1-dev31.0 → 0.8.1-dev341.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 (636) 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/icu/icu-makedate.cpp +5 -4
  5. package/src/duckdb/extension/json/buffered_json_reader.cpp +23 -14
  6. package/src/duckdb/extension/json/include/buffered_json_reader.hpp +6 -6
  7. package/src/duckdb/extension/json/include/json_common.hpp +13 -3
  8. package/src/duckdb/extension/json/include/json_executors.hpp +1 -1
  9. package/src/duckdb/extension/json/include/json_scan.hpp +3 -1
  10. package/src/duckdb/extension/json/json_functions/json_create.cpp +16 -16
  11. package/src/duckdb/extension/json/json_functions/json_merge_patch.cpp +3 -3
  12. package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +2 -2
  13. package/src/duckdb/extension/json/json_functions/json_structure.cpp +5 -3
  14. package/src/duckdb/extension/json/json_functions/json_transform.cpp +12 -12
  15. package/src/duckdb/extension/json/json_functions/read_json.cpp +2 -1
  16. package/src/duckdb/extension/json/json_functions.cpp +6 -3
  17. package/src/duckdb/extension/json/json_scan.cpp +40 -25
  18. package/src/duckdb/extension/parquet/column_reader.cpp +57 -52
  19. package/src/duckdb/extension/parquet/column_writer.cpp +57 -45
  20. package/src/duckdb/extension/parquet/include/cast_column_reader.hpp +1 -1
  21. package/src/duckdb/extension/parquet/include/column_reader.hpp +5 -4
  22. package/src/duckdb/extension/parquet/include/column_writer.hpp +24 -0
  23. package/src/duckdb/extension/parquet/include/decode_utils.hpp +6 -0
  24. package/src/duckdb/extension/parquet/include/list_column_reader.hpp +1 -1
  25. package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +4 -4
  26. package/src/duckdb/extension/parquet/include/parquet_rle_bp_decoder.hpp +4 -5
  27. package/src/duckdb/extension/parquet/include/resizable_buffer.hpp +4 -4
  28. package/src/duckdb/extension/parquet/include/row_number_column_reader.hpp +1 -1
  29. package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +1 -1
  30. package/src/duckdb/extension/parquet/parquet-extension.cpp +25 -1
  31. package/src/duckdb/extension/parquet/parquet_metadata.cpp +1 -1
  32. package/src/duckdb/extension/parquet/parquet_reader.cpp +18 -18
  33. package/src/duckdb/extension/parquet/parquet_statistics.cpp +23 -26
  34. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +2 -2
  35. package/src/duckdb/extension/parquet/parquet_writer.cpp +3 -3
  36. package/src/duckdb/extension/parquet/zstd_file_system.cpp +3 -3
  37. package/src/duckdb/src/catalog/catalog.cpp +5 -17
  38. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +113 -0
  39. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +7 -0
  40. package/src/duckdb/src/catalog/catalog_entry.cpp +4 -4
  41. package/src/duckdb/src/catalog/catalog_search_path.cpp +49 -12
  42. package/src/duckdb/src/catalog/catalog_set.cpp +1 -1
  43. package/src/duckdb/src/catalog/default/default_types.cpp +9 -84
  44. package/src/duckdb/src/catalog/dependency_manager.cpp +2 -2
  45. package/src/duckdb/src/catalog/duck_catalog.cpp +1 -0
  46. package/src/duckdb/src/common/adbc/adbc.cpp +301 -106
  47. package/src/duckdb/src/common/adbc/driver_manager.cpp +10 -22
  48. package/src/duckdb/src/common/arrow/arrow_appender.cpp +12 -12
  49. package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +7 -7
  50. package/src/duckdb/src/common/checksum.cpp +1 -1
  51. package/src/duckdb/src/common/compressed_file_system.cpp +6 -6
  52. package/src/duckdb/src/common/crypto/md5.cpp +9 -9
  53. package/src/duckdb/src/common/exception.cpp +4 -1
  54. package/src/duckdb/src/common/exception_format_value.cpp +19 -14
  55. package/src/duckdb/src/common/field_writer.cpp +1 -1
  56. package/src/duckdb/src/common/file_system.cpp +15 -2
  57. package/src/duckdb/src/common/fsst.cpp +11 -6
  58. package/src/duckdb/src/common/gzip_file_system.cpp +8 -8
  59. package/src/duckdb/src/common/hive_partitioning.cpp +1 -1
  60. package/src/duckdb/src/common/local_file_system.cpp +11 -11
  61. package/src/duckdb/src/common/multi_file_reader.cpp +3 -0
  62. package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
  63. package/src/duckdb/src/common/pipe_file_system.cpp +2 -2
  64. package/src/duckdb/src/common/radix_partitioning.cpp +2 -2
  65. package/src/duckdb/src/common/row_operations/row_heap_gather.cpp +1 -1
  66. package/src/duckdb/src/common/row_operations/row_heap_scatter.cpp +5 -5
  67. package/src/duckdb/src/common/row_operations/row_match.cpp +1 -1
  68. package/src/duckdb/src/common/row_operations/row_radix_scatter.cpp +2 -2
  69. package/src/duckdb/src/common/row_operations/row_scatter.cpp +4 -4
  70. package/src/duckdb/src/common/serializer/binary_deserializer.cpp +1 -1
  71. package/src/duckdb/src/common/serializer/binary_serializer.cpp +3 -3
  72. package/src/duckdb/src/common/serializer.cpp +1 -1
  73. package/src/duckdb/src/common/sort/comparators.cpp +1 -1
  74. package/src/duckdb/src/common/sort/merge_sorter.cpp +7 -2
  75. package/src/duckdb/src/common/sort/partition_state.cpp +2 -2
  76. package/src/duckdb/src/common/types/bit.cpp +5 -5
  77. package/src/duckdb/src/common/types/blob.cpp +8 -8
  78. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +4 -4
  79. package/src/duckdb/src/common/types/column/column_data_collection.cpp +3 -3
  80. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +1 -1
  81. package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
  82. package/src/duckdb/src/common/types/hash.cpp +2 -2
  83. package/src/duckdb/src/common/types/hyperloglog.cpp +22 -21
  84. package/src/duckdb/src/common/types/list_segment.cpp +77 -49
  85. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +1 -1
  86. package/src/duckdb/src/common/types/row/row_data_collection_scanner.cpp +5 -4
  87. package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +5 -3
  88. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +61 -24
  89. package/src/duckdb/src/common/types/string_heap.cpp +1 -1
  90. package/src/duckdb/src/common/types/timestamp.cpp +37 -1
  91. package/src/duckdb/src/common/types/value.cpp +3 -2
  92. package/src/duckdb/src/common/types/vector.cpp +98 -101
  93. package/src/duckdb/src/common/types/vector_cache.cpp +6 -6
  94. package/src/duckdb/src/common/types/vector_constants.cpp +2 -1
  95. package/src/duckdb/src/common/types.cpp +44 -33
  96. package/src/duckdb/src/common/vector_operations/boolean_operators.cpp +2 -2
  97. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +12 -12
  98. package/src/duckdb/src/common/vector_operations/vector_hash.cpp +13 -11
  99. package/src/duckdb/src/common/vector_operations/vector_storage.cpp +1 -1
  100. package/src/duckdb/src/core_functions/aggregate/algebraic/avg.cpp +30 -33
  101. package/src/duckdb/src/core_functions/aggregate/algebraic/covar.cpp +0 -4
  102. package/src/duckdb/src/core_functions/aggregate/distributive/approx_count.cpp +32 -36
  103. package/src/duckdb/src/core_functions/aggregate/distributive/arg_min_max.cpp +53 -66
  104. package/src/duckdb/src/core_functions/aggregate/distributive/bitagg.cpp +48 -48
  105. package/src/duckdb/src/core_functions/aggregate/distributive/bitstring_agg.cpp +44 -44
  106. package/src/duckdb/src/core_functions/aggregate/distributive/bool.cpp +32 -32
  107. package/src/duckdb/src/core_functions/aggregate/distributive/entropy.cpp +34 -34
  108. package/src/duckdb/src/core_functions/aggregate/distributive/kurtosis.cpp +30 -31
  109. package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +91 -103
  110. package/src/duckdb/src/core_functions/aggregate/distributive/product.cpp +17 -17
  111. package/src/duckdb/src/core_functions/aggregate/distributive/skew.cpp +25 -27
  112. package/src/duckdb/src/core_functions/aggregate/distributive/string_agg.cpp +36 -37
  113. package/src/duckdb/src/core_functions/aggregate/distributive/sum.cpp +22 -22
  114. package/src/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp +48 -84
  115. package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +49 -51
  116. package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +115 -133
  117. package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +62 -99
  118. package/src/duckdb/src/core_functions/aggregate/nested/histogram.cpp +24 -26
  119. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +22 -23
  120. package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +16 -18
  121. package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +22 -25
  122. package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +19 -24
  123. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +18 -23
  124. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +14 -18
  125. package/src/duckdb/src/core_functions/function_list.cpp +1 -0
  126. package/src/duckdb/src/core_functions/scalar/blob/base64.cpp +1 -1
  127. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +45 -45
  128. package/src/duckdb/src/core_functions/scalar/date/strftime.cpp +2 -2
  129. package/src/duckdb/src/core_functions/scalar/generic/current_setting.cpp +1 -1
  130. package/src/duckdb/src/core_functions/scalar/generic/least.cpp +2 -2
  131. package/src/duckdb/src/core_functions/scalar/generic/stats.cpp +1 -1
  132. package/src/duckdb/src/core_functions/scalar/generic/system_functions.cpp +14 -0
  133. package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +3 -3
  134. package/src/duckdb/src/core_functions/scalar/list/flatten.cpp +2 -4
  135. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +3 -3
  136. package/src/duckdb/src/core_functions/scalar/list/list_lambdas.cpp +6 -7
  137. package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +1 -1
  138. package/src/duckdb/src/core_functions/scalar/map/cardinality.cpp +1 -1
  139. package/src/duckdb/src/core_functions/scalar/map/map.cpp +2 -2
  140. package/src/duckdb/src/core_functions/scalar/map/map_concat.cpp +4 -1
  141. package/src/duckdb/src/core_functions/scalar/map/map_extract.cpp +5 -9
  142. package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +3 -3
  143. package/src/duckdb/src/core_functions/scalar/string/starts_with.cpp +3 -2
  144. package/src/duckdb/src/core_functions/scalar/string/string_split.cpp +4 -4
  145. package/src/duckdb/src/core_functions/scalar/string/trim.cpp +1 -1
  146. package/src/duckdb/src/core_functions/scalar/union/union_extract.cpp +1 -1
  147. package/src/duckdb/src/execution/adaptive_filter.cpp +1 -1
  148. package/src/duckdb/src/execution/expression_executor/execute_case.cpp +10 -10
  149. package/src/duckdb/src/execution/expression_executor/execute_conjunction.cpp +7 -7
  150. package/src/duckdb/src/execution/expression_executor.cpp +28 -28
  151. package/src/duckdb/src/execution/index/art/art.cpp +110 -39
  152. package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +23 -5
  153. package/src/duckdb/src/execution/index/art/leaf.cpp +10 -11
  154. package/src/duckdb/src/execution/index/art/leaf_segment.cpp +10 -0
  155. package/src/duckdb/src/execution/index/art/node.cpp +47 -35
  156. package/src/duckdb/src/execution/index/art/node16.cpp +3 -0
  157. package/src/duckdb/src/execution/index/art/node256.cpp +1 -0
  158. package/src/duckdb/src/execution/index/art/node4.cpp +3 -0
  159. package/src/duckdb/src/execution/index/art/node48.cpp +2 -0
  160. package/src/duckdb/src/execution/index/art/prefix.cpp +2 -0
  161. package/src/duckdb/src/execution/join_hashtable.cpp +4 -4
  162. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_inner.cpp +4 -4
  163. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_mark.cpp +2 -2
  164. package/src/duckdb/src/execution/operator/aggregate/distinct_aggregate_data.cpp +1 -1
  165. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +1 -1
  166. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +2 -2
  167. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +4 -4
  168. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +26 -9
  169. package/src/duckdb/src/execution/operator/filter/physical_filter.cpp +1 -1
  170. package/src/duckdb/src/execution/operator/helper/physical_reset.cpp +5 -2
  171. package/src/duckdb/src/execution/operator/helper/physical_set.cpp +5 -1
  172. package/src/duckdb/src/execution/operator/join/outer_join_marker.cpp +1 -1
  173. package/src/duckdb/src/execution/operator/join/perfect_hash_join_executor.cpp +1 -1
  174. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +2 -2
  175. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +4 -4
  176. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +3 -3
  177. package/src/duckdb/src/execution/operator/join/physical_nested_loop_join.cpp +3 -3
  178. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +3 -3
  179. package/src/duckdb/src/execution/operator/order/physical_top_n.cpp +1 -1
  180. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +2 -2
  181. package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +2 -2
  182. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -3
  183. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
  184. package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -2
  185. package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +1 -1
  186. package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +3 -3
  187. package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +2 -1
  188. package/src/duckdb/src/execution/operator/scan/physical_expression_scan.cpp +1 -1
  189. package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +2 -2
  190. package/src/duckdb/src/execution/operator/schema/physical_create_index.cpp +29 -3
  191. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +1 -1
  192. package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +1 -1
  193. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +1 -1
  194. package/src/duckdb/src/execution/physical_plan/plan_create_table.cpp +1 -1
  195. package/src/duckdb/src/execution/physical_plan_generator.cpp +2 -2
  196. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +1 -1
  197. package/src/duckdb/src/execution/reservoir_sample.cpp +2 -2
  198. package/src/duckdb/src/execution/window_segment_tree.cpp +8 -6
  199. package/src/duckdb/src/function/aggregate/distributive/count.cpp +158 -20
  200. package/src/duckdb/src/function/aggregate/distributive/first.cpp +66 -74
  201. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +13 -13
  202. package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
  203. package/src/duckdb/src/function/cast/decimal_cast.cpp +1 -1
  204. package/src/duckdb/src/function/cast/enum_casts.cpp +2 -2
  205. package/src/duckdb/src/function/cast/list_casts.cpp +2 -4
  206. package/src/duckdb/src/function/cast/string_cast.cpp +11 -11
  207. package/src/duckdb/src/function/cast/union_casts.cpp +2 -2
  208. package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +3 -2
  209. package/src/duckdb/src/function/pragma/pragma_queries.cpp +33 -23
  210. package/src/duckdb/src/function/scalar/generic/constant_or_null.cpp +1 -1
  211. package/src/duckdb/src/function/scalar/list/list_concat.cpp +2 -2
  212. package/src/duckdb/src/function/scalar/list/list_extract.cpp +3 -3
  213. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +2 -3
  214. package/src/duckdb/src/function/scalar/string/concat.cpp +8 -7
  215. package/src/duckdb/src/function/scalar/string/contains.cpp +4 -4
  216. package/src/duckdb/src/function/scalar/string/like.cpp +5 -5
  217. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +4 -4
  218. package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +6 -2
  219. package/src/duckdb/src/function/scalar/string/regexp.cpp +3 -3
  220. package/src/duckdb/src/function/scalar/string/strip_accents.cpp +1 -1
  221. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +1 -1
  222. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +25 -23
  223. package/src/duckdb/src/function/scalar_function.cpp +3 -3
  224. package/src/duckdb/src/function/table/arrow.cpp +6 -6
  225. package/src/duckdb/src/function/table/arrow_conversion.cpp +67 -61
  226. package/src/duckdb/src/function/table/checkpoint.cpp +1 -1
  227. package/src/duckdb/src/function/table/copy_csv.cpp +11 -7
  228. package/src/duckdb/src/function/table/glob.cpp +1 -1
  229. package/src/duckdb/src/function/table/pragma_last_profiling_output.cpp +1 -1
  230. package/src/duckdb/src/function/table/range.cpp +4 -4
  231. package/src/duckdb/src/function/table/read_csv.cpp +17 -20
  232. package/src/duckdb/src/function/table/repeat.cpp +5 -2
  233. package/src/duckdb/src/function/table/repeat_row.cpp +10 -3
  234. package/src/duckdb/src/function/table/system/duckdb_functions.cpp +1 -1
  235. package/src/duckdb/src/function/table/system/test_vector_types.cpp +82 -26
  236. package/src/duckdb/src/function/table/table_scan.cpp +2 -2
  237. package/src/duckdb/src/function/table/unnest.cpp +1 -1
  238. package/src/duckdb/src/function/table/version/pragma_version.cpp +3 -3
  239. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +2 -5
  240. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +2 -0
  241. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_catalog_entry.hpp +6 -0
  242. package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +2 -2
  243. package/src/duckdb/src/include/duckdb/catalog/catalog_search_path.hpp +8 -2
  244. package/src/duckdb/src/include/duckdb/catalog/default/builtin_types/types.hpp +97 -0
  245. package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +5 -0
  246. package/src/duckdb/src/include/duckdb/common/allocator.hpp +15 -4
  247. package/src/duckdb/src/include/duckdb/common/arrow/arrow_buffer.hpp +7 -2
  248. package/src/duckdb/src/include/duckdb/common/crypto/md5.hpp +2 -2
  249. package/src/duckdb/src/include/duckdb/common/exception.hpp +5 -2
  250. package/src/duckdb/src/include/duckdb/common/field_writer.hpp +3 -3
  251. package/src/duckdb/src/include/duckdb/common/file_system.hpp +11 -0
  252. package/src/duckdb/src/include/duckdb/common/fsst.hpp +2 -3
  253. package/src/duckdb/src/include/duckdb/common/radix.hpp +3 -3
  254. package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +1 -1
  255. package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +4 -1
  256. package/src/duckdb/src/include/duckdb/common/serializer.hpp +4 -4
  257. package/src/duckdb/src/include/duckdb/common/typedefs.hpp +30 -0
  258. package/src/duckdb/src/include/duckdb/common/types/column/partitioned_column_data.hpp +12 -0
  259. package/src/duckdb/src/include/duckdb/common/types/hyperloglog.hpp +6 -2
  260. package/src/duckdb/src/include/duckdb/common/types/null_value.hpp +1 -1
  261. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +12 -0
  262. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +10 -10
  263. package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +4 -14
  264. package/src/duckdb/src/include/duckdb/common/types/value.hpp +1 -1
  265. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +9 -0
  266. package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +18 -6
  267. package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +112 -76
  268. package/src/duckdb/src/include/duckdb/common/vector_operations/binary_executor.hpp +16 -15
  269. package/src/duckdb/src/include/duckdb/common/vector_operations/generic_executor.hpp +11 -11
  270. package/src/duckdb/src/include/duckdb/common/vector_operations/ternary_executor.hpp +23 -19
  271. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +3 -3
  272. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +20 -24
  273. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +36 -39
  274. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/stddev.hpp +57 -53
  275. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +8 -9
  276. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +16 -18
  277. package/src/duckdb/src/include/duckdb/core_functions/aggregate/sum_helpers.hpp +7 -8
  278. package/src/duckdb/src/include/duckdb/core_functions/scalar/generic_functions.hpp +9 -0
  279. package/src/duckdb/src/include/duckdb/core_functions/scalar/map_functions.hpp +2 -6
  280. package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +16 -36
  281. package/src/duckdb/src/include/duckdb/execution/expression_executor_state.hpp +14 -2
  282. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +13 -7
  283. package/src/duckdb/src/include/duckdb/execution/index/art/fixed_size_allocator.hpp +3 -0
  284. package/src/duckdb/src/include/duckdb/execution/index/art/leaf.hpp +1 -1
  285. package/src/duckdb/src/include/duckdb/execution/index/art/leaf_segment.hpp +2 -0
  286. package/src/duckdb/src/include/duckdb/execution/index/art/node.hpp +13 -3
  287. package/src/duckdb/src/include/duckdb/execution/index/art/node48.hpp +1 -0
  288. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_result_collector.hpp +3 -0
  289. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_buffer.hpp +1 -1
  290. package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +5 -2
  291. package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +12 -12
  292. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +8 -29
  293. package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +95 -0
  294. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +13 -2
  295. package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +4 -4
  296. package/src/duckdb/src/include/duckdb/function/compression_function.hpp +44 -0
  297. package/src/duckdb/src/include/duckdb/function/copy_function.hpp +6 -6
  298. package/src/duckdb/src/include/duckdb/function/function.hpp +3 -3
  299. package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +3 -1
  300. package/src/duckdb/src/include/duckdb/function/macro_function.hpp +2 -2
  301. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +3 -3
  302. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
  303. package/src/duckdb/src/include/duckdb/function/table_function.hpp +8 -7
  304. package/src/duckdb/src/include/duckdb/main/capi/cast/utils.hpp +1 -1
  305. package/src/duckdb/src/include/duckdb/main/config.hpp +2 -0
  306. package/src/duckdb/src/include/duckdb/main/materialized_query_result.hpp +3 -0
  307. package/src/duckdb/src/include/duckdb/main/pending_query_result.hpp +3 -0
  308. package/src/duckdb/src/include/duckdb/main/query_result.hpp +17 -0
  309. package/src/duckdb/src/include/duckdb/main/relation.hpp +12 -0
  310. package/src/duckdb/src/include/duckdb/main/settings.hpp +9 -0
  311. package/src/duckdb/src/include/duckdb/main/stream_query_result.hpp +3 -0
  312. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  313. package/src/duckdb/src/include/duckdb/optimizer/unnest_rewriter.hpp +4 -0
  314. package/src/duckdb/src/include/duckdb/parser/base_expression.hpp +6 -12
  315. package/src/duckdb/src/include/duckdb/parser/constraint.hpp +2 -2
  316. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +1 -1
  317. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +1 -1
  318. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +1 -1
  319. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +1 -1
  320. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +1 -1
  321. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +1 -1
  322. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +1 -1
  323. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +1 -1
  324. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +1 -1
  325. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +1 -1
  326. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +1 -1
  327. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +1 -1
  328. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +1 -1
  329. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +1 -1
  330. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +1 -1
  331. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +1 -1
  332. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +1 -1
  333. package/src/duckdb/src/include/duckdb/parser/expression_map.hpp +1 -1
  334. package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +2 -2
  335. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -1
  336. package/src/duckdb/src/include/duckdb/parser/parser.hpp +2 -0
  337. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -2
  338. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +36 -5
  339. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +7 -4
  340. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +1 -1
  341. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +1 -1
  342. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -2
  343. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +1 -1
  344. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +1 -1
  345. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +1 -1
  346. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +1 -1
  347. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +1 -1
  348. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +4 -3
  349. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +106 -92
  350. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -2
  351. package/src/duckdb/src/include/duckdb/planner/bound_constraint.hpp +2 -2
  352. package/src/duckdb/src/include/duckdb/planner/bound_query_node.hpp +2 -2
  353. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +34 -1
  354. package/src/duckdb/src/include/duckdb/planner/bound_tableref.hpp +2 -2
  355. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +1 -1
  356. package/src/duckdb/src/include/duckdb/planner/expression/bound_between_expression.hpp +1 -1
  357. package/src/duckdb/src/include/duckdb/planner/expression/bound_case_expression.hpp +1 -1
  358. package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +1 -1
  359. package/src/duckdb/src/include/duckdb/planner/expression/bound_columnref_expression.hpp +1 -1
  360. package/src/duckdb/src/include/duckdb/planner/expression/bound_comparison_expression.hpp +1 -1
  361. package/src/duckdb/src/include/duckdb/planner/expression/bound_conjunction_expression.hpp +1 -1
  362. package/src/duckdb/src/include/duckdb/planner/expression/bound_constant_expression.hpp +1 -1
  363. package/src/duckdb/src/include/duckdb/planner/expression/bound_function_expression.hpp +1 -1
  364. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambda_expression.hpp +1 -1
  365. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambdaref_expression.hpp +1 -1
  366. package/src/duckdb/src/include/duckdb/planner/expression/bound_operator_expression.hpp +1 -1
  367. package/src/duckdb/src/include/duckdb/planner/expression/bound_parameter_expression.hpp +1 -1
  368. package/src/duckdb/src/include/duckdb/planner/expression/bound_reference_expression.hpp +1 -1
  369. package/src/duckdb/src/include/duckdb/planner/expression/bound_subquery_expression.hpp +1 -1
  370. package/src/duckdb/src/include/duckdb/planner/expression/bound_unnest_expression.hpp +1 -1
  371. package/src/duckdb/src/include/duckdb/planner/expression/bound_window_expression.hpp +1 -1
  372. package/src/duckdb/src/include/duckdb/planner/expression.hpp +5 -7
  373. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
  374. package/src/duckdb/src/include/duckdb/planner/filter/conjunction_filter.hpp +6 -0
  375. package/src/duckdb/src/include/duckdb/planner/filter/constant_filter.hpp +3 -0
  376. package/src/duckdb/src/include/duckdb/planner/filter/null_filter.hpp +6 -0
  377. package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +7 -2
  378. package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_to_file.hpp +6 -2
  379. package/src/duckdb/src/include/duckdb/planner/operator/logical_execute.hpp +4 -0
  380. package/src/duckdb/src/include/duckdb/planner/operator/logical_explain.hpp +5 -1
  381. package/src/duckdb/src/include/duckdb/planner/operator/logical_get.hpp +5 -1
  382. package/src/duckdb/src/include/duckdb/planner/operator/logical_pivot.hpp +3 -0
  383. package/src/duckdb/src/include/duckdb/planner/operator/logical_pragma.hpp +6 -2
  384. package/src/duckdb/src/include/duckdb/planner/operator/logical_prepare.hpp +4 -0
  385. package/src/duckdb/src/include/duckdb/planner/table_binding.hpp +26 -0
  386. package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +17 -0
  387. package/src/duckdb/src/include/duckdb/planner/tableref/bound_pivotref.hpp +3 -0
  388. package/src/duckdb/src/include/duckdb/storage/compression/chimp/algorithm/byte_reader.hpp +4 -0
  389. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_analyze.hpp +1 -1
  390. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
  391. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_analyze.hpp +2 -2
  392. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
  393. package/src/duckdb/src/include/duckdb/storage/in_memory_block_manager.hpp +13 -13
  394. package/src/duckdb/src/include/duckdb/storage/index.hpp +6 -4
  395. package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +1 -1
  396. package/src/duckdb/src/include/duckdb/storage/storage_extension.hpp +0 -6
  397. package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +12 -0
  398. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +1 -1
  399. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +25 -2
  400. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +12 -0
  401. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +22 -0
  402. package/src/duckdb/src/include/duckdb/transaction/duck_transaction_manager.hpp +2 -2
  403. package/src/duckdb/src/include/duckdb/transaction/transaction.hpp +2 -2
  404. package/src/duckdb/src/main/capi/appender-c.cpp +5 -5
  405. package/src/duckdb/src/main/capi/arrow-c.cpp +10 -10
  406. package/src/duckdb/src/main/capi/cast/from_decimal-c.cpp +1 -1
  407. package/src/duckdb/src/main/capi/cast/utils-c.cpp +1 -1
  408. package/src/duckdb/src/main/capi/config-c.cpp +3 -6
  409. package/src/duckdb/src/main/capi/data_chunk-c.cpp +17 -17
  410. package/src/duckdb/src/main/capi/duckdb-c.cpp +4 -4
  411. package/src/duckdb/src/main/capi/duckdb_value-c.cpp +4 -4
  412. package/src/duckdb/src/main/capi/logical_types-c.cpp +22 -21
  413. package/src/duckdb/src/main/capi/pending-c.cpp +6 -6
  414. package/src/duckdb/src/main/capi/prepared-c.cpp +10 -10
  415. package/src/duckdb/src/main/capi/replacement_scan-c.cpp +6 -6
  416. package/src/duckdb/src/main/capi/result-c.cpp +23 -23
  417. package/src/duckdb/src/main/capi/table_function-c.cpp +1 -1
  418. package/src/duckdb/src/main/client_context.cpp +3 -3
  419. package/src/duckdb/src/main/config.cpp +1 -0
  420. package/src/duckdb/src/main/database_manager.cpp +1 -1
  421. package/src/duckdb/src/main/error_manager.cpp +1 -1
  422. package/src/duckdb/src/main/extension/extension_load.cpp +1 -1
  423. package/src/duckdb/src/main/relation/create_table_relation.cpp +1 -1
  424. package/src/duckdb/src/main/relation/create_view_relation.cpp +1 -1
  425. package/src/duckdb/src/main/relation/delete_relation.cpp +1 -1
  426. package/src/duckdb/src/main/relation/explain_relation.cpp +1 -1
  427. package/src/duckdb/src/main/relation/insert_relation.cpp +1 -1
  428. package/src/duckdb/src/main/relation/update_relation.cpp +1 -1
  429. package/src/duckdb/src/main/relation/write_csv_relation.cpp +1 -1
  430. package/src/duckdb/src/main/relation/write_parquet_relation.cpp +1 -1
  431. package/src/duckdb/src/main/relation.cpp +1 -1
  432. package/src/duckdb/src/main/settings/settings.cpp +22 -6
  433. package/src/duckdb/src/optimizer/deliminator.cpp +12 -12
  434. package/src/duckdb/src/optimizer/expression_heuristics.cpp +1 -0
  435. package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -3
  436. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +10 -10
  437. package/src/duckdb/src/optimizer/matcher/expression_matcher.cpp +1 -1
  438. package/src/duckdb/src/optimizer/pullup/pullup_projection.cpp +2 -2
  439. package/src/duckdb/src/optimizer/regex_range_filter.cpp +2 -4
  440. package/src/duckdb/src/optimizer/rule/distributivity.cpp +2 -2
  441. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +6 -6
  442. package/src/duckdb/src/optimizer/statistics/operator/propagate_get.cpp +2 -2
  443. package/src/duckdb/src/optimizer/unnest_rewriter.cpp +27 -16
  444. package/src/duckdb/src/parallel/executor.cpp +1 -1
  445. package/src/duckdb/src/parser/base_expression.cpp +2 -5
  446. package/src/duckdb/src/parser/column_definition.cpp +5 -8
  447. package/src/duckdb/src/parser/expression/between_expression.cpp +4 -4
  448. package/src/duckdb/src/parser/expression/case_expression.cpp +6 -6
  449. package/src/duckdb/src/parser/expression/cast_expression.cpp +4 -4
  450. package/src/duckdb/src/parser/expression/collate_expression.cpp +3 -3
  451. package/src/duckdb/src/parser/expression/columnref_expression.cpp +4 -4
  452. package/src/duckdb/src/parser/expression/comparison_expression.cpp +3 -3
  453. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +2 -2
  454. package/src/duckdb/src/parser/expression/constant_expression.cpp +2 -2
  455. package/src/duckdb/src/parser/expression/function_expression.cpp +10 -14
  456. package/src/duckdb/src/parser/expression/lambda_expression.cpp +2 -2
  457. package/src/duckdb/src/parser/expression/operator_expression.cpp +4 -4
  458. package/src/duckdb/src/parser/expression/parameter_expression.cpp +2 -2
  459. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +3 -3
  460. package/src/duckdb/src/parser/expression/star_expression.cpp +9 -9
  461. package/src/duckdb/src/parser/expression/subquery_expression.cpp +5 -5
  462. package/src/duckdb/src/parser/expression/window_expression.cpp +13 -24
  463. package/src/duckdb/src/parser/parsed_data/create_info.cpp +0 -3
  464. package/src/duckdb/src/parser/parsed_expression.cpp +34 -18
  465. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +4 -4
  466. package/src/duckdb/src/parser/parser.cpp +4 -4
  467. package/src/duckdb/src/parser/query_node/select_node.cpp +6 -13
  468. package/src/duckdb/src/parser/query_node.cpp +7 -6
  469. package/src/duckdb/src/parser/result_modifier.cpp +25 -18
  470. package/src/duckdb/src/parser/statement/select_statement.cpp +3 -3
  471. package/src/duckdb/src/parser/tableref/basetableref.cpp +4 -4
  472. package/src/duckdb/src/parser/tableref/emptytableref.cpp +1 -1
  473. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +5 -5
  474. package/src/duckdb/src/parser/tableref/joinref.cpp +6 -6
  475. package/src/duckdb/src/parser/tableref/pivotref.cpp +10 -15
  476. package/src/duckdb/src/parser/tableref/subqueryref.cpp +3 -3
  477. package/src/duckdb/src/parser/tableref/table_function.cpp +3 -3
  478. package/src/duckdb/src/parser/tableref.cpp +12 -3
  479. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +7 -7
  480. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +4 -4
  481. package/src/duckdb/src/parser/transform/expression/transform_boolean_test.cpp +4 -4
  482. package/src/duckdb/src/parser/transform/expression/transform_case.cpp +8 -10
  483. package/src/duckdb/src/parser/transform/expression/transform_cast.cpp +7 -9
  484. package/src/duckdb/src/parser/transform/expression/transform_coalesce.cpp +3 -5
  485. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +22 -22
  486. package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +2 -2
  487. package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +42 -44
  488. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +70 -75
  489. package/src/duckdb/src/parser/transform/expression/transform_grouping_function.cpp +4 -4
  490. package/src/duckdb/src/parser/transform/expression/transform_interval.cpp +7 -7
  491. package/src/duckdb/src/parser/transform/expression/transform_is_null.cpp +4 -5
  492. package/src/duckdb/src/parser/transform/expression/transform_lambda.cpp +5 -6
  493. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +28 -29
  494. package/src/duckdb/src/parser/transform/expression/transform_param_ref.cpp +13 -14
  495. package/src/duckdb/src/parser/transform/expression/transform_positional_reference.cpp +4 -4
  496. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +9 -10
  497. package/src/duckdb/src/parser/transform/helpers/nodetype_to_string.cpp +0 -2
  498. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +28 -32
  499. package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +18 -18
  500. package/src/duckdb/src/parser/transform/helpers/transform_sample.cpp +3 -3
  501. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +27 -26
  502. package/src/duckdb/src/parser/transform/statement/transform_alter_sequence.cpp +11 -14
  503. package/src/duckdb/src/parser/transform/statement/transform_alter_table.cpp +14 -16
  504. package/src/duckdb/src/parser/transform/statement/transform_attach.cpp +8 -9
  505. package/src/duckdb/src/parser/transform/statement/transform_call.cpp +2 -5
  506. package/src/duckdb/src/parser/transform/statement/transform_checkpoint.cpp +4 -6
  507. package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +22 -23
  508. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +14 -18
  509. package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +13 -15
  510. package/src/duckdb/src/parser/transform/statement/transform_create_schema.cpp +8 -10
  511. package/src/duckdb/src/parser/transform/statement/transform_create_sequence.cpp +8 -10
  512. package/src/duckdb/src/parser/transform/statement/transform_create_table.cpp +26 -28
  513. package/src/duckdb/src/parser/transform/statement/transform_create_table_as.cpp +8 -10
  514. package/src/duckdb/src/parser/transform/statement/transform_create_type.cpp +12 -15
  515. package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +13 -18
  516. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +11 -13
  517. package/src/duckdb/src/parser/transform/statement/transform_detach.cpp +3 -4
  518. package/src/duckdb/src/parser/transform/statement/transform_drop.cpp +20 -25
  519. package/src/duckdb/src/parser/transform/statement/transform_explain.cpp +5 -7
  520. package/src/duckdb/src/parser/transform/statement/transform_export.cpp +5 -6
  521. package/src/duckdb/src/parser/transform/statement/transform_import.cpp +2 -3
  522. package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +21 -24
  523. package/src/duckdb/src/parser/transform/statement/transform_load.cpp +4 -5
  524. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -7
  525. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +7 -9
  526. package/src/duckdb/src/parser/transform/statement/transform_prepare.cpp +11 -19
  527. package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +12 -14
  528. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +12 -9
  529. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +34 -34
  530. package/src/duckdb/src/parser/transform/statement/transform_set.cpp +18 -19
  531. package/src/duckdb/src/parser/transform/statement/transform_show.cpp +5 -7
  532. package/src/duckdb/src/parser/transform/statement/transform_show_select.cpp +4 -5
  533. package/src/duckdb/src/parser/transform/statement/transform_transaction.cpp +3 -5
  534. package/src/duckdb/src/parser/transform/statement/transform_update.cpp +10 -13
  535. package/src/duckdb/src/parser/transform/statement/transform_upsert.cpp +4 -4
  536. package/src/duckdb/src/parser/transform/statement/transform_use.cpp +2 -3
  537. package/src/duckdb/src/parser/transform/statement/transform_vacuum.cpp +6 -10
  538. package/src/duckdb/src/parser/transform/tableref/transform_base_tableref.cpp +18 -18
  539. package/src/duckdb/src/parser/transform/tableref/transform_from.cpp +5 -5
  540. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +11 -11
  541. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +30 -27
  542. package/src/duckdb/src/parser/transform/tableref/transform_subquery.cpp +5 -5
  543. package/src/duckdb/src/parser/transform/tableref/transform_table_function.cpp +13 -12
  544. package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +8 -8
  545. package/src/duckdb/src/parser/transformer.cpp +45 -47
  546. package/src/duckdb/src/planner/bind_context.cpp +9 -10
  547. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +1 -1
  548. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +1 -1
  549. package/src/duckdb/src/planner/binder/expression/bind_positional_reference_expression.cpp +8 -3
  550. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +1 -1
  551. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +6 -3
  552. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +8 -8
  553. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +4 -4
  554. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +1 -28
  555. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +18 -1
  556. package/src/duckdb/src/planner/binder/statement/bind_drop.cpp +0 -25
  557. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +2 -2
  558. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +2 -114
  559. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +4 -2
  560. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +5 -2
  561. package/src/duckdb/src/planner/binder.cpp +1 -1
  562. package/src/duckdb/src/planner/bound_result_modifier.cpp +16 -11
  563. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +5 -5
  564. package/src/duckdb/src/planner/expression/bound_between_expression.cpp +5 -5
  565. package/src/duckdb/src/planner/expression/bound_case_expression.cpp +5 -5
  566. package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +3 -3
  567. package/src/duckdb/src/planner/expression/bound_columnref_expression.cpp +2 -2
  568. package/src/duckdb/src/planner/expression/bound_comparison_expression.cpp +4 -4
  569. package/src/duckdb/src/planner/expression/bound_conjunction_expression.cpp +2 -2
  570. package/src/duckdb/src/planner/expression/bound_constant_expression.cpp +2 -2
  571. package/src/duckdb/src/planner/expression/bound_expression.cpp +1 -1
  572. package/src/duckdb/src/planner/expression/bound_function_expression.cpp +3 -4
  573. package/src/duckdb/src/planner/expression/bound_lambda_expression.cpp +4 -5
  574. package/src/duckdb/src/planner/expression/bound_lambdaref_expression.cpp +2 -2
  575. package/src/duckdb/src/planner/expression/bound_operator_expression.cpp +3 -4
  576. package/src/duckdb/src/planner/expression/bound_parameter_expression.cpp +2 -2
  577. package/src/duckdb/src/planner/expression/bound_reference_expression.cpp +2 -2
  578. package/src/duckdb/src/planner/expression/bound_subquery_expression.cpp +1 -1
  579. package/src/duckdb/src/planner/expression/bound_unnest_expression.cpp +3 -3
  580. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +8 -21
  581. package/src/duckdb/src/planner/expression.cpp +15 -0
  582. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +2 -2
  583. package/src/duckdb/src/planner/expression_binder.cpp +3 -2
  584. package/src/duckdb/src/planner/expression_iterator.cpp +2 -2
  585. package/src/duckdb/src/planner/filter/conjunction_filter.cpp +2 -2
  586. package/src/duckdb/src/planner/filter/constant_filter.cpp +1 -1
  587. package/src/duckdb/src/planner/logical_operator.cpp +3 -4
  588. package/src/duckdb/src/planner/logical_operator_visitor.cpp +1 -1
  589. package/src/duckdb/src/planner/operator/logical_pivot.cpp +14 -2
  590. package/src/duckdb/src/planner/planner.cpp +5 -15
  591. package/src/duckdb/src/planner/table_filter.cpp +1 -1
  592. package/src/duckdb/src/storage/arena_allocator.cpp +2 -2
  593. package/src/duckdb/src/storage/buffer/block_handle.cpp +1 -1
  594. package/src/duckdb/src/storage/checkpoint/write_overflow_strings_to_disk.cpp +2 -2
  595. package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -3
  596. package/src/duckdb/src/storage/compression/bitpacking.cpp +8 -8
  597. package/src/duckdb/src/storage/compression/dictionary_compression.cpp +36 -36
  598. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +11 -11
  599. package/src/duckdb/src/storage/compression/fsst.cpp +34 -34
  600. package/src/duckdb/src/storage/compression/rle.cpp +8 -8
  601. package/src/duckdb/src/storage/compression/string_uncompressed.cpp +13 -13
  602. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +11 -11
  603. package/src/duckdb/src/storage/data_table.cpp +8 -7
  604. package/src/duckdb/src/storage/index.cpp +14 -3
  605. package/src/duckdb/src/storage/local_storage.cpp +2 -1
  606. package/src/duckdb/src/storage/magic_bytes.cpp +1 -1
  607. package/src/duckdb/src/storage/single_file_block_manager.cpp +3 -3
  608. package/src/duckdb/src/storage/standard_buffer_manager.cpp +3 -3
  609. package/src/duckdb/src/storage/statistics/list_stats.cpp +1 -1
  610. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +1 -1
  611. package/src/duckdb/src/storage/statistics/string_stats.cpp +15 -14
  612. package/src/duckdb/src/storage/table/chunk_info.cpp +2 -2
  613. package/src/duckdb/src/storage/table/column_segment.cpp +3 -3
  614. package/src/duckdb/src/storage/table/list_column_data.cpp +3 -3
  615. package/src/duckdb/src/storage/table/row_group.cpp +4 -4
  616. package/src/duckdb/src/storage/table/standard_column_data.cpp +1 -1
  617. package/src/duckdb/src/storage/table/update_segment.cpp +12 -12
  618. package/src/duckdb/src/storage/wal_replay.cpp +5 -6
  619. package/src/duckdb/src/transaction/cleanup_state.cpp +3 -3
  620. package/src/duckdb/src/transaction/commit_state.cpp +8 -8
  621. package/src/duckdb/src/transaction/duck_transaction.cpp +9 -7
  622. package/src/duckdb/src/transaction/duck_transaction_manager.cpp +16 -16
  623. package/src/duckdb/src/transaction/rollback_state.cpp +3 -3
  624. package/src/duckdb/src/verification/prepared_statement_verifier.cpp +1 -1
  625. package/src/duckdb/src/verification/statement_verifier.cpp +3 -4
  626. package/src/duckdb/third_party/hyperloglog/hyperloglog.hpp +2 -2
  627. package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +0 -1
  628. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +0 -14
  629. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +12828 -12956
  630. package/src/duckdb/third_party/pcg/pcg_extras.hpp +1 -1
  631. package/src/duckdb/third_party/zstd/compress/zstd_compress.cpp +3 -0
  632. package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_cwksp.h +4 -0
  633. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +5 -5
  634. package/src/duckdb/ub_src_parser_transform_statement.cpp +0 -2
  635. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_database_info.hpp +0 -46
  636. package/src/duckdb/src/parser/transform/statement/transform_create_database.cpp +0 -28
@@ -67,7 +67,7 @@ void DeliminatorPlanUpdater::VisitOperator(LogicalOperator &op) {
67
67
  VisitOperatorExpressions(op);
68
68
  if (op.type == LogicalOperatorType::LOGICAL_DELIM_JOIN && DelimGetCount(op) == 0) {
69
69
  auto &delim_join = op.Cast<LogicalDelimJoin>();
70
- auto decs = &delim_join.duplicate_eliminated_columns;
70
+ auto &decs = delim_join.duplicate_eliminated_columns;
71
71
  for (auto &cond : delim_join.conditions) {
72
72
  if (!IsEqualityJoinCondition(cond)) {
73
73
  continue;
@@ -83,10 +83,10 @@ void DeliminatorPlanUpdater::VisitOperator(LogicalOperator &op) {
83
83
  auto &colref = rhs->Cast<BoundColumnRefExpression>();
84
84
  if (projection_map.find(colref.binding) != projection_map.end()) {
85
85
  // value on the right is a projection of removed DelimGet
86
- for (idx_t i = 0; i < decs->size(); i++) {
87
- if (decs->at(i)->Equals(cond.left.get())) {
86
+ for (idx_t i = 0; i < decs.size(); i++) {
87
+ if (decs[i]->Equals(*cond.left)) {
88
88
  // the value on the left no longer needs to be a duplicate-eliminated column
89
- decs->erase(decs->begin() + i);
89
+ decs.erase(decs.begin() + i);
90
90
  break;
91
91
  }
92
92
  }
@@ -95,7 +95,7 @@ void DeliminatorPlanUpdater::VisitOperator(LogicalOperator &op) {
95
95
  }
96
96
  }
97
97
  // change type if there are no more duplicate-eliminated columns
98
- if (decs->empty()) {
98
+ if (decs.empty()) {
99
99
  delim_join.type = LogicalOperatorType::LOGICAL_COMPARISON_JOIN;
100
100
  // sub-plans with DelimGets are not re-orderable (yet), however, we removed all DelimGet of this DelimJoin
101
101
  // the DelimGets are on the RHS of the DelimJoin, so we can call the JoinOrderOptimizer on the RHS now
@@ -198,9 +198,9 @@ bool Deliminator::RemoveCandidate(unique_ptr<LogicalOperator> *plan, unique_ptr<
198
198
  idx_t delim_idx = OperatorIsDelimGet(*join.children[0]) ? 0 : 1;
199
199
  D_ASSERT(OperatorIsDelimGet(*join.children[delim_idx]));
200
200
  // get the filter (if any)
201
- LogicalFilter *filter = nullptr;
201
+ optional_ptr<LogicalFilter> filter;
202
202
  if (join.children[delim_idx]->type == LogicalOperatorType::LOGICAL_FILTER) {
203
- filter = (LogicalFilter *)join.children[delim_idx].get();
203
+ filter = &join.children[delim_idx]->Cast<LogicalFilter>();
204
204
  }
205
205
  auto &delim_get = (filter ? filter->children[0] : join.children[delim_idx])->Cast<LogicalDelimGet>();
206
206
  if (join.conditions.size() != delim_get.chunk_types.size()) {
@@ -231,7 +231,7 @@ bool Deliminator::RemoveCandidate(unique_ptr<LogicalOperator> *plan, unique_ptr<
231
231
  updater.projection_map[cb] = true;
232
232
  updater.reverse_proj_or_agg_map[cb] = proj_or_agg.expressions[cb.column_index].get();
233
233
  for (auto &expr : nulls_are_not_equal_exprs) {
234
- if (proj_or_agg.expressions[cb.column_index]->Equals(&expr.get())) {
234
+ if (proj_or_agg.expressions[cb.column_index]->Equals(expr.get())) {
235
235
  updater.projection_map[cb] = false;
236
236
  break;
237
237
  }
@@ -254,8 +254,8 @@ bool Deliminator::RemoveCandidate(unique_ptr<LogicalOperator> *plan, unique_ptr<
254
254
  updater.projection_map[cb] = true;
255
255
  updater.reverse_proj_or_agg_map[cb] = all_agg_exprs[cb.column_index];
256
256
  for (auto &expr : nulls_are_not_equal_exprs) {
257
- if ((cb.table_index == agg.group_index && agg.groups[cb.column_index]->Equals(&expr.get())) ||
258
- (cb.table_index == agg.aggregate_index && agg.expressions[cb.column_index]->Equals(&expr.get()))) {
257
+ if ((cb.table_index == agg.group_index && agg.groups[cb.column_index]->Equals(expr.get())) ||
258
+ (cb.table_index == agg.aggregate_index && agg.expressions[cb.column_index]->Equals(expr.get()))) {
259
259
  updater.projection_map[cb] = false;
260
260
  break;
261
261
  }
@@ -386,7 +386,7 @@ bool Deliminator::RemoveInequalityCandidate(unique_ptr<LogicalOperator> *plan, u
386
386
  }
387
387
  // try to find the corresponding child condition
388
388
  // TODO: can be more flexible - allow CAST
389
- auto child_expr = it->second;
389
+ auto &child_expr = *it->second;
390
390
  bool found = false;
391
391
  for (auto &child_cond : join.conditions) {
392
392
  if (child_cond.left->Equals(child_expr) || child_cond.right->Equals(child_expr)) {
@@ -418,7 +418,7 @@ bool Deliminator::RemoveInequalityCandidate(unique_ptr<LogicalOperator> *plan, u
418
418
  auto &parent_expr = parent_delim_get_side == 0 ? parent_cond.left : parent_cond.right;
419
419
  auto &parent_colref = parent_expr->Cast<BoundColumnRefExpression>();
420
420
  auto it = updater.reverse_proj_or_agg_map.find(parent_colref.binding);
421
- auto child_expr = it->second;
421
+ auto &child_expr = *it->second;
422
422
  for (auto &child_cond : join.conditions) {
423
423
  if (!child_cond.left->Equals(child_expr) && !child_cond.right->Equals(child_expr)) {
424
424
  continue;
@@ -42,6 +42,7 @@ void ExpressionHeuristics::ReorderExpressions(vector<unique_ptr<Expression>> &ex
42
42
  };
43
43
 
44
44
  vector<ExpressionCosts> expression_costs;
45
+ expression_costs.reserve(expressions.size());
45
46
  // iterate expressions, get cost for each one
46
47
  for (idx_t i = 0; i < expressions.size(); i++) {
47
48
  idx_t cost = Cost(*expressions[i]);
@@ -635,7 +635,7 @@ FilterResult FilterCombiner::AddBoundComparisonFilter(Expression &expr) {
635
635
  // get the LHS and RHS nodes
636
636
  auto &left_node = GetNode(*comparison.left);
637
637
  auto &right_node = GetNode(*comparison.right);
638
- if (left_node.Equals(&right_node)) {
638
+ if (left_node.Equals(right_node)) {
639
639
  return FilterResult::UNSUPPORTED;
640
640
  }
641
641
  // get the equivalence sets of the LHS and RHS
@@ -806,7 +806,7 @@ FilterResult FilterCombiner::AddTransitiveFilters(BoundComparisonExpression &com
806
806
  }
807
807
  }
808
808
 
809
- if (left_node.Equals(&right_node.get())) {
809
+ if (left_node.Equals(right_node)) {
810
810
  return FilterResult::UNSUPPORTED;
811
811
  }
812
812
  // get the equivalence sets of the LHS and RHS
@@ -903,7 +903,7 @@ unique_ptr<Expression> FilterCombiner::FindTransitiveFilter(Expression &expr) {
903
903
  for (idx_t i = 0; i < remaining_filters.size(); i++) {
904
904
  if (remaining_filters[i]->GetExpressionClass() == ExpressionClass::BOUND_COMPARISON) {
905
905
  auto &comparison = remaining_filters[i]->Cast<BoundComparisonExpression>();
906
- if (expr.Equals(comparison.right.get()) && comparison.type != ExpressionType::COMPARE_NOTEQUAL) {
906
+ if (expr.Equals(*comparison.right) && comparison.type != ExpressionType::COMPARE_NOTEQUAL) {
907
907
  auto filter = std::move(remaining_filters[i]);
908
908
  remaining_filters.erase(remaining_filters.begin() + i);
909
909
  return filter;
@@ -479,15 +479,15 @@ optional_ptr<TableFilterSet> CardinalityEstimator::GetTableFilters(LogicalOperat
479
479
  return get ? &get->table_filters : nullptr;
480
480
  }
481
481
 
482
- idx_t CardinalityEstimator::InspectConjunctionAND(idx_t cardinality, idx_t column_index, ConjunctionAndFilter *filter,
482
+ idx_t CardinalityEstimator::InspectConjunctionAND(idx_t cardinality, idx_t column_index, ConjunctionAndFilter &filter,
483
483
  unique_ptr<BaseStatistics> base_stats) {
484
484
  auto has_equality_filter = false;
485
485
  auto cardinality_after_filters = cardinality;
486
- for (auto &child_filter : filter->child_filters) {
486
+ for (auto &child_filter : filter.child_filters) {
487
487
  if (child_filter->filter_type != TableFilterType::CONSTANT_COMPARISON) {
488
488
  continue;
489
489
  }
490
- auto comparison_filter = (ConstantFilter &)*child_filter;
490
+ auto &comparison_filter = child_filter->Cast<ConstantFilter>();
491
491
  if (comparison_filter.comparison_type != ExpressionType::COMPARE_EQUAL) {
492
492
  continue;
493
493
  }
@@ -510,15 +510,15 @@ idx_t CardinalityEstimator::InspectConjunctionAND(idx_t cardinality, idx_t colum
510
510
  return cardinality_after_filters;
511
511
  }
512
512
 
513
- idx_t CardinalityEstimator::InspectConjunctionOR(idx_t cardinality, idx_t column_index, ConjunctionOrFilter *filter,
513
+ idx_t CardinalityEstimator::InspectConjunctionOR(idx_t cardinality, idx_t column_index, ConjunctionOrFilter &filter,
514
514
  unique_ptr<BaseStatistics> base_stats) {
515
515
  auto has_equality_filter = false;
516
516
  auto cardinality_after_filters = cardinality;
517
- for (auto &child_filter : filter->child_filters) {
517
+ for (auto &child_filter : filter.child_filters) {
518
518
  if (child_filter->filter_type != TableFilterType::CONSTANT_COMPARISON) {
519
519
  continue;
520
520
  }
521
- auto comparison_filter = (ConstantFilter &)*child_filter;
521
+ auto &comparison_filter = child_filter->Cast<ConstantFilter>();
522
522
  if (comparison_filter.comparison_type == ExpressionType::COMPARE_EQUAL) {
523
523
  auto column_count = cardinality_after_filters;
524
524
  if (base_stats) {
@@ -549,14 +549,14 @@ idx_t CardinalityEstimator::InspectTableFilters(idx_t cardinality, LogicalOperat
549
549
  column_statistics = get->function.statistics(context, &table_scan_bind_data, it.first);
550
550
  }
551
551
  if (it.second->filter_type == TableFilterType::CONJUNCTION_AND) {
552
- auto &filter = (ConjunctionAndFilter &)*it.second;
552
+ auto &filter = it.second->Cast<ConjunctionAndFilter>();
553
553
  idx_t cardinality_with_and_filter =
554
- InspectConjunctionAND(cardinality, it.first, &filter, std::move(column_statistics));
554
+ InspectConjunctionAND(cardinality, it.first, filter, std::move(column_statistics));
555
555
  cardinality_after_filters = MinValue(cardinality_after_filters, cardinality_with_and_filter);
556
556
  } else if (it.second->filter_type == TableFilterType::CONJUNCTION_OR) {
557
- auto &filter = (ConjunctionOrFilter &)*it.second;
557
+ auto &filter = it.second->Cast<ConjunctionOrFilter>();
558
558
  idx_t cardinality_with_or_filter =
559
- InspectConjunctionOR(cardinality, it.first, &filter, std::move(column_statistics));
559
+ InspectConjunctionOR(cardinality, it.first, filter, std::move(column_statistics));
560
560
  cardinality_after_filters = MinValue(cardinality_after_filters, cardinality_with_or_filter);
561
561
  }
562
562
  }
@@ -19,7 +19,7 @@ bool ExpressionMatcher::Match(Expression &expr, vector<reference<Expression>> &b
19
19
  }
20
20
 
21
21
  bool ExpressionEqualityMatcher::Match(Expression &expr, vector<reference<Expression>> &bindings) {
22
- if (!expr.Equals(&expression)) {
22
+ if (!expr.Equals(expression)) {
23
23
  return false;
24
24
  }
25
25
  bindings.push_back(expr);
@@ -24,8 +24,8 @@ static void ReplaceExpressionBinding(vector<unique_ptr<Expression>> &proj_expres
24
24
  BoundColumnRefExpression &colref = expr.Cast<BoundColumnRefExpression>();
25
25
  // find the corresponding column index in the projection expressions
26
26
  for (idx_t proj_idx = 0; proj_idx < proj_expressions.size(); proj_idx++) {
27
- auto proj_expr = proj_expressions[proj_idx].get();
28
- if (proj_expr->type == ExpressionType::BOUND_COLUMN_REF) {
27
+ auto &proj_expr = *proj_expressions[proj_idx];
28
+ if (proj_expr.type == ExpressionType::BOUND_COLUMN_REF) {
29
29
  if (colref.Equals(proj_expr)) {
30
30
  colref.binding.table_index = proj_table_idx;
31
31
  colref.binding.column_index = proj_idx;
@@ -39,12 +39,10 @@ unique_ptr<LogicalOperator> RegexRangeFilter::Rewrite(unique_ptr<LogicalOperator
39
39
  }
40
40
  auto filter_left = make_uniq<BoundComparisonExpression>(
41
41
  ExpressionType::COMPARE_GREATERTHANOREQUALTO, func.children[0]->Copy(),
42
- make_uniq<BoundConstantExpression>(
43
- Value::BLOB((const_data_ptr_t)info.range_min.c_str(), info.range_min.size())));
42
+ make_uniq<BoundConstantExpression>(Value::BLOB_RAW(info.range_min)));
44
43
  auto filter_right = make_uniq<BoundComparisonExpression>(
45
44
  ExpressionType::COMPARE_LESSTHANOREQUALTO, func.children[0]->Copy(),
46
- make_uniq<BoundConstantExpression>(
47
- Value::BLOB((const_data_ptr_t)info.range_max.c_str(), info.range_max.size())));
45
+ make_uniq<BoundConstantExpression>(Value::BLOB_RAW(info.range_max)));
48
46
  auto filter_expr = make_uniq<BoundConjunctionExpression>(ExpressionType::CONJUNCTION_AND,
49
47
  std::move(filter_left), std::move(filter_right));
50
48
 
@@ -33,7 +33,7 @@ unique_ptr<Expression> DistributivityRule::ExtractExpression(BoundConjunctionExp
33
33
  // AND, remove expression from the list
34
34
  auto &and_expr = child->Cast<BoundConjunctionExpression>();
35
35
  for (idx_t i = 0; i < and_expr.children.size(); i++) {
36
- if (Expression::Equals(and_expr.children[i].get(), &expr)) {
36
+ if (and_expr.children[i]->Equals(expr)) {
37
37
  result = std::move(and_expr.children[i]);
38
38
  and_expr.children.erase(and_expr.children.begin() + i);
39
39
  break;
@@ -45,7 +45,7 @@ unique_ptr<Expression> DistributivityRule::ExtractExpression(BoundConjunctionExp
45
45
  } else {
46
46
  // not an AND node! remove the entire expression
47
47
  // this happens in the case of e.g. (X AND B) OR X
48
- D_ASSERT(Expression::Equals(child.get(), &expr));
48
+ D_ASSERT(child->Equals(expr));
49
49
  result = std::move(child);
50
50
  conj.children[idx] = nullptr;
51
51
  }
@@ -161,15 +161,15 @@ void StatisticsPropagator::UpdateFilterStatistics(Expression &left, Expression &
161
161
  SetStatisticsNotNull((right.Cast<BoundColumnRefExpression>()).binding);
162
162
  }
163
163
  // check if this is a comparison between a constant and a column ref
164
- BoundConstantExpression *constant = nullptr;
165
- BoundColumnRefExpression *columnref = nullptr;
164
+ optional_ptr<BoundConstantExpression> constant;
165
+ optional_ptr<BoundColumnRefExpression> columnref;
166
166
  if (left.type == ExpressionType::VALUE_CONSTANT && right.type == ExpressionType::BOUND_COLUMN_REF) {
167
- constant = (BoundConstantExpression *)&left;
168
- columnref = (BoundColumnRefExpression *)&right;
167
+ constant = &left.Cast<BoundConstantExpression>();
168
+ columnref = &right.Cast<BoundColumnRefExpression>();
169
169
  comparison_type = FlipComparisonExpression(comparison_type);
170
170
  } else if (left.type == ExpressionType::BOUND_COLUMN_REF && right.type == ExpressionType::VALUE_CONSTANT) {
171
- columnref = (BoundColumnRefExpression *)&left;
172
- constant = (BoundConstantExpression *)&right;
171
+ columnref = &left.Cast<BoundColumnRefExpression>();
172
+ constant = &right.Cast<BoundConstantExpression>();
173
173
  } else if (left.type == ExpressionType::BOUND_COLUMN_REF && right.type == ExpressionType::BOUND_COLUMN_REF) {
174
174
  // comparison between two column refs
175
175
  auto &left_column_ref = left.Cast<BoundColumnRefExpression>();
@@ -14,14 +14,14 @@ void StatisticsPropagator::UpdateFilterStatistics(BaseStatistics &input, TableFi
14
14
  // FIXME: update stats...
15
15
  switch (filter.filter_type) {
16
16
  case TableFilterType::CONJUNCTION_AND: {
17
- auto &conjunction_and = (ConjunctionAndFilter &)filter;
17
+ auto &conjunction_and = filter.Cast<ConjunctionAndFilter>();
18
18
  for (auto &child_filter : conjunction_and.child_filters) {
19
19
  UpdateFilterStatistics(input, *child_filter);
20
20
  }
21
21
  break;
22
22
  }
23
23
  case TableFilterType::CONSTANT_COMPARISON: {
24
- auto &constant_filter = (ConstantFilter &)filter;
24
+ auto &constant_filter = filter.Cast<ConstantFilter>();
25
25
  UpdateFilterStatistics(input, constant_filter.comparison_type, constant_filter.constant);
26
26
  break;
27
27
  }
@@ -26,11 +26,7 @@ void UnnestRewriterPlanUpdater::VisitExpression(unique_ptr<Expression> *expressi
26
26
  for (idx_t i = 0; i < replace_bindings.size(); i++) {
27
27
  if (bound_column_ref.binding == replace_bindings[i].old_binding) {
28
28
  bound_column_ref.binding = replace_bindings[i].new_binding;
29
- }
30
- // previously pointing to the LOGICAL_DELIM_GET
31
- if (bound_column_ref.binding.table_index == replace_bindings[i].old_binding.table_index &&
32
- replace_bindings[i].old_binding.column_index == DConstants::INVALID_INDEX) {
33
- bound_column_ref.binding = replace_bindings[i].new_binding;
29
+ break;
34
30
  }
35
31
  }
36
32
  }
@@ -49,6 +45,7 @@ unique_ptr<LogicalOperator> UnnestRewriter::Optimize(unique_ptr<LogicalOperator>
49
45
 
50
46
  // rearrange the logical operators
51
47
  if (RewriteCandidate(candidate)) {
48
+ updater.overwritten_tbl_idx = overwritten_tbl_idx;
52
49
  // update the bindings of the BOUND_UNNEST expression
53
50
  UpdateBoundUnnestBindings(updater, candidate);
54
51
  // update the sequence of LOGICAL_PROJECTION(s)
@@ -106,7 +103,6 @@ void UnnestRewriter::FindCandidates(unique_ptr<LogicalOperator> *op_ptr,
106
103
  if (curr_op->get()->type == LogicalOperatorType::LOGICAL_UNNEST) {
107
104
  candidates.push_back(op_ptr);
108
105
  }
109
- return;
110
106
  }
111
107
 
112
108
  bool UnnestRewriter::RewriteCandidate(unique_ptr<LogicalOperator> *candidate) {
@@ -147,6 +143,11 @@ bool UnnestRewriter::RewriteCandidate(unique_ptr<LogicalOperator> *candidate) {
147
143
  auto &unnest = curr_op->get()->Cast<LogicalUnnest>();
148
144
  D_ASSERT(unnest.children[0]->type == LogicalOperatorType::LOGICAL_DELIM_GET);
149
145
  overwritten_tbl_idx = unnest.children[0]->Cast<LogicalDelimGet>().table_index;
146
+
147
+ D_ASSERT(!unnest.children.empty());
148
+ auto &delim_get = unnest.children[0]->Cast<LogicalDelimGet>();
149
+ D_ASSERT(delim_get.chunk_types.size() > 1);
150
+ distinct_unnest_count = delim_get.chunk_types.size();
150
151
  unnest.children[0] = std::move(lhs_op);
151
152
 
152
153
  // replace the LOGICAL_DELIM_JOIN with its RHS child operator
@@ -168,10 +169,11 @@ void UnnestRewriter::UpdateRHSBindings(unique_ptr<LogicalOperator> *plan_ptr, un
168
169
  D_ASSERT(curr_op->get()->type == LogicalOperatorType::LOGICAL_PROJECTION);
169
170
  auto &proj = curr_op->get()->Cast<LogicalProjection>();
170
171
 
171
- // pop the two last expressions from all projections (delim_idx and UNNEST column)
172
- D_ASSERT(proj.expressions.size() > 2);
173
- proj.expressions.pop_back();
174
- proj.expressions.pop_back();
172
+ // pop the unnest columns and the delim index
173
+ D_ASSERT(proj.expressions.size() > distinct_unnest_count);
174
+ for (idx_t i = 0; i < distinct_unnest_count; i++) {
175
+ proj.expressions.pop_back();
176
+ }
175
177
 
176
178
  // store all shifted current bindings
177
179
  idx_t tbl_idx = proj.table_index;
@@ -263,14 +265,23 @@ void UnnestRewriter::UpdateBoundUnnestBindings(UnnestRewriterPlanUpdater &update
263
265
  auto &unnest = curr_op->get()->Cast<LogicalUnnest>();
264
266
 
265
267
  D_ASSERT(unnest.children.size() == 1);
266
- auto unnest_child_cols = unnest.children[0]->GetColumnBindings();
267
- for (idx_t delim_col_idx = 0; delim_col_idx < delim_columns.size(); delim_col_idx++) {
268
- for (idx_t child_col_idx = 0; child_col_idx < unnest_child_cols.size(); child_col_idx++) {
269
- if (delim_columns[delim_col_idx].table_index == unnest_child_cols[child_col_idx].table_index) {
270
- ColumnBinding old_binding(overwritten_tbl_idx, DConstants::INVALID_INDEX);
271
- updater.replace_bindings.emplace_back(old_binding, delim_columns[delim_col_idx]);
268
+ auto unnest_cols = unnest.children[0]->GetColumnBindings();
269
+
270
+ for (idx_t i = 0; i < delim_columns.size(); i++) {
271
+ auto delim_binding = delim_columns[i];
272
+
273
+ auto unnest_it = unnest_cols.begin();
274
+ while (unnest_it != unnest_cols.end()) {
275
+ auto unnest_binding = *unnest_it;
276
+
277
+ if (delim_binding.table_index == unnest_binding.table_index) {
278
+ unnest_binding.table_index = overwritten_tbl_idx;
279
+ unnest_binding.column_index++;
280
+ updater.replace_bindings.emplace_back(unnest_binding, delim_binding);
281
+ unnest_cols.erase(unnest_it);
272
282
  break;
273
283
  }
284
+ unnest_it++;
274
285
  }
275
286
  }
276
287
 
@@ -562,7 +562,7 @@ bool Executor::HasResultCollector() {
562
562
 
563
563
  unique_ptr<QueryResult> Executor::GetResult() {
564
564
  D_ASSERT(HasResultCollector());
565
- auto &result_collector = (PhysicalResultCollector &)*physical_plan;
565
+ auto &result_collector = physical_plan->Cast<PhysicalResultCollector>();
566
566
  D_ASSERT(result_collector.sink_state);
567
567
  return result_collector.GetResult(*result_collector.sink_state);
568
568
  }
@@ -18,11 +18,8 @@ string BaseExpression::GetName() const {
18
18
  return !alias.empty() ? alias : ToString();
19
19
  }
20
20
 
21
- bool BaseExpression::Equals(const BaseExpression *other) const {
22
- if (!other) {
23
- return false;
24
- }
25
- if (this->expression_class != other->expression_class || this->type != other->type) {
21
+ bool BaseExpression::Equals(const BaseExpression &other) const {
22
+ if (expression_class != other.expression_class || type != other.type) {
26
23
  return false;
27
24
  }
28
25
  return true;
@@ -50,6 +50,7 @@ void ColumnDefinition::Serialize(Serializer &serializer) const {
50
50
  writer.WriteOptional(default_value);
51
51
  }
52
52
  writer.WriteField<TableColumnType>(category);
53
+ writer.WriteField<duckdb::CompressionType>(compression_type);
53
54
  writer.Finalize();
54
55
  }
55
56
 
@@ -59,16 +60,12 @@ ColumnDefinition ColumnDefinition::Deserialize(Deserializer &source) {
59
60
  auto column_type = reader.ReadRequiredSerializable<LogicalType, LogicalType>();
60
61
  auto expression = reader.ReadOptional<ParsedExpression>(nullptr);
61
62
  auto category = reader.ReadField<TableColumnType>(TableColumnType::STANDARD);
63
+ auto compression_type = reader.ReadField<duckdb::CompressionType>(duckdb::CompressionType::COMPRESSION_AUTO);
62
64
  reader.Finalize();
63
65
 
64
- switch (category) {
65
- case TableColumnType::STANDARD:
66
- return ColumnDefinition(column_name, column_type, std::move(expression), TableColumnType::STANDARD);
67
- case TableColumnType::GENERATED:
68
- return ColumnDefinition(column_name, column_type, std::move(expression), TableColumnType::GENERATED);
69
- default:
70
- throw NotImplementedException("Type not implemented for TableColumnType");
71
- }
66
+ ColumnDefinition result(column_name, column_type, std::move(expression), category);
67
+ result.compression_type = compression_type;
68
+ return result;
72
69
  }
73
70
 
74
71
  const unique_ptr<ParsedExpression> &ColumnDefinition::DefaultValue() const {
@@ -15,14 +15,14 @@ string BetweenExpression::ToString() const {
15
15
  return ToString<BetweenExpression, ParsedExpression>(*this);
16
16
  }
17
17
 
18
- bool BetweenExpression::Equal(const BetweenExpression *a, const BetweenExpression *b) {
19
- if (!a->input->Equals(b->input.get())) {
18
+ bool BetweenExpression::Equal(const BetweenExpression &a, const BetweenExpression &b) {
19
+ if (!a.input->Equals(*b.input)) {
20
20
  return false;
21
21
  }
22
- if (!a->lower->Equals(b->lower.get())) {
22
+ if (!a.lower->Equals(*b.lower)) {
23
23
  return false;
24
24
  }
25
- if (!a->upper->Equals(b->upper.get())) {
25
+ if (!a.upper->Equals(*b.upper)) {
26
26
  return false;
27
27
  }
28
28
  return true;
@@ -27,19 +27,19 @@ string CaseExpression::ToString() const {
27
27
  return ToString<CaseExpression, ParsedExpression>(*this);
28
28
  }
29
29
 
30
- bool CaseExpression::Equal(const CaseExpression *a, const CaseExpression *b) {
31
- if (a->case_checks.size() != b->case_checks.size()) {
30
+ bool CaseExpression::Equal(const CaseExpression &a, const CaseExpression &b) {
31
+ if (a.case_checks.size() != b.case_checks.size()) {
32
32
  return false;
33
33
  }
34
- for (idx_t i = 0; i < a->case_checks.size(); i++) {
35
- if (!a->case_checks[i].when_expr->Equals(b->case_checks[i].when_expr.get())) {
34
+ for (idx_t i = 0; i < a.case_checks.size(); i++) {
35
+ if (!a.case_checks[i].when_expr->Equals(*b.case_checks[i].when_expr)) {
36
36
  return false;
37
37
  }
38
- if (!a->case_checks[i].then_expr->Equals(b->case_checks[i].then_expr.get())) {
38
+ if (!a.case_checks[i].then_expr->Equals(*b.case_checks[i].then_expr)) {
39
39
  return false;
40
40
  }
41
41
  }
42
- if (!a->else_expr->Equals(b->else_expr.get())) {
42
+ if (!a.else_expr->Equals(*b.else_expr)) {
43
43
  return false;
44
44
  }
45
45
  return true;
@@ -19,14 +19,14 @@ string CastExpression::ToString() const {
19
19
  return ToString<CastExpression, ParsedExpression>(*this);
20
20
  }
21
21
 
22
- bool CastExpression::Equal(const CastExpression *a, const CastExpression *b) {
23
- if (!a->child->Equals(b->child.get())) {
22
+ bool CastExpression::Equal(const CastExpression &a, const CastExpression &b) {
23
+ if (!a.child->Equals(*b.child)) {
24
24
  return false;
25
25
  }
26
- if (a->cast_type != b->cast_type) {
26
+ if (a.cast_type != b.cast_type) {
27
27
  return false;
28
28
  }
29
- if (a->try_cast != b->try_cast) {
29
+ if (a.try_cast != b.try_cast) {
30
30
  return false;
31
31
  }
32
32
  return true;
@@ -18,11 +18,11 @@ string CollateExpression::ToString() const {
18
18
  return StringUtil::Format("%s COLLATE %s", child->ToString(), SQLIdentifier(collation));
19
19
  }
20
20
 
21
- bool CollateExpression::Equal(const CollateExpression *a, const CollateExpression *b) {
22
- if (!a->child->Equals(b->child.get())) {
21
+ bool CollateExpression::Equal(const CollateExpression &a, const CollateExpression &b) {
22
+ if (!a.child->Equals(*b.child)) {
23
23
  return false;
24
24
  }
25
- if (a->collation != b->collation) {
25
+ if (a.collation != b.collation) {
26
26
  return false;
27
27
  }
28
28
  return true;
@@ -64,12 +64,12 @@ string ColumnRefExpression::ToString() const {
64
64
  return result;
65
65
  }
66
66
 
67
- bool ColumnRefExpression::Equal(const ColumnRefExpression *a, const ColumnRefExpression *b) {
68
- if (a->column_names.size() != b->column_names.size()) {
67
+ bool ColumnRefExpression::Equal(const ColumnRefExpression &a, const ColumnRefExpression &b) {
68
+ if (a.column_names.size() != b.column_names.size()) {
69
69
  return false;
70
70
  }
71
- for (idx_t i = 0; i < a->column_names.size(); i++) {
72
- if (!StringUtil::CIEquals(a->column_names[i], b->column_names[i])) {
71
+ for (idx_t i = 0; i < a.column_names.size(); i++) {
72
+ if (!StringUtil::CIEquals(a.column_names[i], b.column_names[i])) {
73
73
  return false;
74
74
  }
75
75
  }
@@ -18,11 +18,11 @@ string ComparisonExpression::ToString() const {
18
18
  return ToString<ComparisonExpression, ParsedExpression>(*this);
19
19
  }
20
20
 
21
- bool ComparisonExpression::Equal(const ComparisonExpression *a, const ComparisonExpression *b) {
22
- if (!a->left->Equals(b->left.get())) {
21
+ bool ComparisonExpression::Equal(const ComparisonExpression &a, const ComparisonExpression &b) {
22
+ if (!a.left->Equals(*b.left)) {
23
23
  return false;
24
24
  }
25
- if (!a->right->Equals(b->right.get())) {
25
+ if (!a.right->Equals(*b.right)) {
26
26
  return false;
27
27
  }
28
28
  return true;
@@ -42,8 +42,8 @@ string ConjunctionExpression::ToString() const {
42
42
  return ToString<ConjunctionExpression, ParsedExpression>(*this);
43
43
  }
44
44
 
45
- bool ConjunctionExpression::Equal(const ConjunctionExpression *a, const ConjunctionExpression *b) {
46
- return ExpressionUtil::SetEquals(a->children, b->children);
45
+ bool ConjunctionExpression::Equal(const ConjunctionExpression &a, const ConjunctionExpression &b) {
46
+ return ExpressionUtil::SetEquals(a.children, b.children);
47
47
  }
48
48
 
49
49
  unique_ptr<ParsedExpression> ConjunctionExpression::Copy() const {
@@ -18,8 +18,8 @@ string ConstantExpression::ToString() const {
18
18
  return value.ToSQLString();
19
19
  }
20
20
 
21
- bool ConstantExpression::Equal(const ConstantExpression *a, const ConstantExpression *b) {
22
- return a->value.type() == b->value.type() && !ValueOperations::DistinctFrom(a->value, b->value);
21
+ bool ConstantExpression::Equal(const ConstantExpression &a, const ConstantExpression &b) {
22
+ return a.value.type() == b.value.type() && !ValueOperations::DistinctFrom(a.value, b.value);
23
23
  }
24
24
 
25
25
  hash_t ConstantExpression::Hash() const {
@@ -37,26 +37,26 @@ string FunctionExpression::ToString() const {
37
37
  filter.get(), order_bys.get(), export_state, true);
38
38
  }
39
39
 
40
- bool FunctionExpression::Equal(const FunctionExpression *a, const FunctionExpression *b) {
41
- if (a->catalog != b->catalog || a->schema != b->schema || a->function_name != b->function_name ||
42
- b->distinct != a->distinct) {
40
+ bool FunctionExpression::Equal(const FunctionExpression &a, const FunctionExpression &b) {
41
+ if (a.catalog != b.catalog || a.schema != b.schema || a.function_name != b.function_name ||
42
+ b.distinct != a.distinct) {
43
43
  return false;
44
44
  }
45
- if (b->children.size() != a->children.size()) {
45
+ if (b.children.size() != a.children.size()) {
46
46
  return false;
47
47
  }
48
- for (idx_t i = 0; i < a->children.size(); i++) {
49
- if (!a->children[i]->Equals(b->children[i].get())) {
48
+ for (idx_t i = 0; i < a.children.size(); i++) {
49
+ if (!a.children[i]->Equals(*b.children[i])) {
50
50
  return false;
51
51
  }
52
52
  }
53
- if (!BaseExpression::Equals(a->filter.get(), b->filter.get())) {
53
+ if (!ParsedExpression::Equals(a.filter, b.filter)) {
54
54
  return false;
55
55
  }
56
- if (!a->order_bys->Equals(b->order_bys.get())) {
56
+ if (!OrderModifier::Equals(a.order_bys, b.order_bys)) {
57
57
  return false;
58
58
  }
59
- if (a->export_state != b->export_state) {
59
+ if (a.export_state != b.export_state) {
60
60
  return false;
61
61
  }
62
62
  return true;
@@ -81,11 +81,7 @@ unique_ptr<ParsedExpression> FunctionExpression::Copy() const {
81
81
  if (filter) {
82
82
  filter_copy = filter->Copy();
83
83
  }
84
- unique_ptr<OrderModifier> order_copy;
85
- if (order_bys) {
86
- order_copy.reset(static_cast<OrderModifier *>(order_bys->Copy().release()));
87
- }
88
-
84
+ auto order_copy = order_bys ? unique_ptr_cast<ResultModifier, OrderModifier>(order_bys->Copy()) : nullptr;
89
85
  auto copy =
90
86
  make_uniq<FunctionExpression>(catalog, schema, function_name, std::move(copy_children), std::move(filter_copy),
91
87
  std::move(order_copy), distinct, is_operator, export_state);
@@ -16,8 +16,8 @@ string LambdaExpression::ToString() const {
16
16
  return lhs->ToString() + " -> " + expr->ToString();
17
17
  }
18
18
 
19
- bool LambdaExpression::Equal(const LambdaExpression *a, const LambdaExpression *b) {
20
- return a->lhs->Equals(b->lhs.get()) && a->expr->Equals(b->expr.get());
19
+ bool LambdaExpression::Equal(const LambdaExpression &a, const LambdaExpression &b) {
20
+ return a.lhs->Equals(*b.lhs) && a.expr->Equals(*b.expr);
21
21
  }
22
22
 
23
23
  hash_t LambdaExpression::Hash() const {
@@ -27,12 +27,12 @@ string OperatorExpression::ToString() const {
27
27
  return ToString<OperatorExpression, ParsedExpression>(*this);
28
28
  }
29
29
 
30
- bool OperatorExpression::Equal(const OperatorExpression *a, const OperatorExpression *b) {
31
- if (a->children.size() != b->children.size()) {
30
+ bool OperatorExpression::Equal(const OperatorExpression &a, const OperatorExpression &b) {
31
+ if (a.children.size() != b.children.size()) {
32
32
  return false;
33
33
  }
34
- for (idx_t i = 0; i < a->children.size(); i++) {
35
- if (!a->children[i]->Equals(b->children[i].get())) {
34
+ for (idx_t i = 0; i < a.children.size(); i++) {
35
+ if (!a.children[i]->Equals(*b.children[i])) {
36
36
  return false;
37
37
  }
38
38
  }