duckdb 0.8.1-dev2.0 → 0.8.1-dev219.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (586) hide show
  1. package/binding.gyp +8 -8
  2. package/package.json +1 -1
  3. package/src/duckdb/extension/icu/icu-datepart.cpp +1 -1
  4. package/src/duckdb/extension/json/include/json_common.hpp +1 -1
  5. package/src/duckdb/extension/json/include/json_executors.hpp +1 -1
  6. package/src/duckdb/extension/json/json_functions/json_create.cpp +6 -6
  7. package/src/duckdb/extension/json/json_functions/json_merge_patch.cpp +1 -1
  8. package/src/duckdb/extension/json/json_functions/json_transform.cpp +1 -1
  9. package/src/duckdb/extension/parquet/column_reader.cpp +57 -52
  10. package/src/duckdb/extension/parquet/column_writer.cpp +57 -45
  11. package/src/duckdb/extension/parquet/include/cast_column_reader.hpp +1 -1
  12. package/src/duckdb/extension/parquet/include/column_reader.hpp +5 -4
  13. package/src/duckdb/extension/parquet/include/column_writer.hpp +24 -0
  14. package/src/duckdb/extension/parquet/include/decode_utils.hpp +6 -0
  15. package/src/duckdb/extension/parquet/include/list_column_reader.hpp +1 -1
  16. package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +4 -4
  17. package/src/duckdb/extension/parquet/include/parquet_rle_bp_decoder.hpp +4 -5
  18. package/src/duckdb/extension/parquet/include/resizable_buffer.hpp +4 -4
  19. package/src/duckdb/extension/parquet/include/row_number_column_reader.hpp +1 -1
  20. package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +1 -1
  21. package/src/duckdb/extension/parquet/parquet-extension.cpp +1 -1
  22. package/src/duckdb/extension/parquet/parquet_metadata.cpp +1 -1
  23. package/src/duckdb/extension/parquet/parquet_reader.cpp +18 -18
  24. package/src/duckdb/extension/parquet/parquet_statistics.cpp +23 -26
  25. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +2 -2
  26. package/src/duckdb/extension/parquet/parquet_writer.cpp +3 -3
  27. package/src/duckdb/extension/parquet/zstd_file_system.cpp +3 -3
  28. package/src/duckdb/src/catalog/catalog.cpp +5 -21
  29. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +113 -0
  30. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +7 -0
  31. package/src/duckdb/src/catalog/catalog_entry.cpp +4 -4
  32. package/src/duckdb/src/catalog/catalog_search_path.cpp +49 -12
  33. package/src/duckdb/src/catalog/catalog_set.cpp +1 -1
  34. package/src/duckdb/src/catalog/default/default_types.cpp +9 -84
  35. package/src/duckdb/src/catalog/dependency_manager.cpp +2 -2
  36. package/src/duckdb/src/catalog/duck_catalog.cpp +1 -0
  37. package/src/duckdb/src/common/adbc/adbc.cpp +301 -106
  38. package/src/duckdb/src/common/adbc/driver_manager.cpp +10 -22
  39. package/src/duckdb/src/common/arrow/arrow_appender.cpp +12 -12
  40. package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +7 -7
  41. package/src/duckdb/src/common/checksum.cpp +1 -1
  42. package/src/duckdb/src/common/compressed_file_system.cpp +6 -6
  43. package/src/duckdb/src/common/crypto/md5.cpp +9 -9
  44. package/src/duckdb/src/common/exception.cpp +4 -1
  45. package/src/duckdb/src/common/exception_format_value.cpp +19 -14
  46. package/src/duckdb/src/common/field_writer.cpp +1 -1
  47. package/src/duckdb/src/common/file_system.cpp +15 -2
  48. package/src/duckdb/src/common/fsst.cpp +11 -6
  49. package/src/duckdb/src/common/gzip_file_system.cpp +8 -8
  50. package/src/duckdb/src/common/hive_partitioning.cpp +1 -1
  51. package/src/duckdb/src/common/local_file_system.cpp +11 -11
  52. package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
  53. package/src/duckdb/src/common/pipe_file_system.cpp +2 -2
  54. package/src/duckdb/src/common/radix_partitioning.cpp +2 -2
  55. package/src/duckdb/src/common/row_operations/row_heap_gather.cpp +1 -1
  56. package/src/duckdb/src/common/row_operations/row_heap_scatter.cpp +5 -5
  57. package/src/duckdb/src/common/row_operations/row_match.cpp +1 -1
  58. package/src/duckdb/src/common/row_operations/row_radix_scatter.cpp +2 -2
  59. package/src/duckdb/src/common/row_operations/row_scatter.cpp +4 -4
  60. package/src/duckdb/src/common/serializer/binary_deserializer.cpp +1 -1
  61. package/src/duckdb/src/common/serializer/binary_serializer.cpp +3 -3
  62. package/src/duckdb/src/common/serializer.cpp +1 -1
  63. package/src/duckdb/src/common/sort/comparators.cpp +1 -1
  64. package/src/duckdb/src/common/sort/merge_sorter.cpp +7 -2
  65. package/src/duckdb/src/common/sort/partition_state.cpp +2 -2
  66. package/src/duckdb/src/common/types/bit.cpp +5 -5
  67. package/src/duckdb/src/common/types/blob.cpp +8 -8
  68. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +4 -4
  69. package/src/duckdb/src/common/types/column/column_data_collection.cpp +3 -3
  70. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +1 -1
  71. package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
  72. package/src/duckdb/src/common/types/hash.cpp +2 -2
  73. package/src/duckdb/src/common/types/hyperloglog.cpp +22 -21
  74. package/src/duckdb/src/common/types/list_segment.cpp +77 -49
  75. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +1 -1
  76. package/src/duckdb/src/common/types/row/row_data_collection_scanner.cpp +5 -4
  77. package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +5 -3
  78. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +59 -24
  79. package/src/duckdb/src/common/types/string_heap.cpp +1 -1
  80. package/src/duckdb/src/common/types/value.cpp +3 -2
  81. package/src/duckdb/src/common/types/vector.cpp +101 -101
  82. package/src/duckdb/src/common/types/vector_cache.cpp +6 -6
  83. package/src/duckdb/src/common/types/vector_constants.cpp +2 -1
  84. package/src/duckdb/src/common/types.cpp +44 -33
  85. package/src/duckdb/src/common/vector_operations/boolean_operators.cpp +2 -2
  86. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +12 -12
  87. package/src/duckdb/src/common/vector_operations/vector_hash.cpp +13 -11
  88. package/src/duckdb/src/common/vector_operations/vector_storage.cpp +1 -1
  89. package/src/duckdb/src/core_functions/aggregate/algebraic/avg.cpp +30 -33
  90. package/src/duckdb/src/core_functions/aggregate/algebraic/covar.cpp +0 -4
  91. package/src/duckdb/src/core_functions/aggregate/distributive/approx_count.cpp +32 -36
  92. package/src/duckdb/src/core_functions/aggregate/distributive/arg_min_max.cpp +53 -66
  93. package/src/duckdb/src/core_functions/aggregate/distributive/bitagg.cpp +48 -48
  94. package/src/duckdb/src/core_functions/aggregate/distributive/bitstring_agg.cpp +44 -44
  95. package/src/duckdb/src/core_functions/aggregate/distributive/bool.cpp +32 -32
  96. package/src/duckdb/src/core_functions/aggregate/distributive/entropy.cpp +34 -34
  97. package/src/duckdb/src/core_functions/aggregate/distributive/kurtosis.cpp +30 -31
  98. package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +91 -103
  99. package/src/duckdb/src/core_functions/aggregate/distributive/product.cpp +17 -17
  100. package/src/duckdb/src/core_functions/aggregate/distributive/skew.cpp +25 -27
  101. package/src/duckdb/src/core_functions/aggregate/distributive/string_agg.cpp +36 -37
  102. package/src/duckdb/src/core_functions/aggregate/distributive/sum.cpp +22 -22
  103. package/src/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp +48 -84
  104. package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +49 -51
  105. package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +97 -121
  106. package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +62 -99
  107. package/src/duckdb/src/core_functions/aggregate/nested/histogram.cpp +24 -26
  108. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +22 -23
  109. package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +16 -18
  110. package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +22 -25
  111. package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +19 -24
  112. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +18 -23
  113. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +14 -18
  114. package/src/duckdb/src/core_functions/function_list.cpp +1 -0
  115. package/src/duckdb/src/core_functions/scalar/blob/base64.cpp +1 -1
  116. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +45 -45
  117. package/src/duckdb/src/core_functions/scalar/date/strftime.cpp +2 -2
  118. package/src/duckdb/src/core_functions/scalar/generic/current_setting.cpp +1 -1
  119. package/src/duckdb/src/core_functions/scalar/generic/least.cpp +2 -2
  120. package/src/duckdb/src/core_functions/scalar/generic/stats.cpp +1 -1
  121. package/src/duckdb/src/core_functions/scalar/generic/system_functions.cpp +14 -0
  122. package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +3 -3
  123. package/src/duckdb/src/core_functions/scalar/list/flatten.cpp +2 -4
  124. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +3 -3
  125. package/src/duckdb/src/core_functions/scalar/list/list_lambdas.cpp +6 -7
  126. package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +1 -1
  127. package/src/duckdb/src/core_functions/scalar/map/cardinality.cpp +1 -1
  128. package/src/duckdb/src/core_functions/scalar/map/map.cpp +2 -2
  129. package/src/duckdb/src/core_functions/scalar/map/map_concat.cpp +4 -1
  130. package/src/duckdb/src/core_functions/scalar/map/map_extract.cpp +5 -9
  131. package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +3 -3
  132. package/src/duckdb/src/core_functions/scalar/string/starts_with.cpp +3 -2
  133. package/src/duckdb/src/core_functions/scalar/string/string_split.cpp +4 -4
  134. package/src/duckdb/src/core_functions/scalar/string/trim.cpp +1 -1
  135. package/src/duckdb/src/core_functions/scalar/union/union_extract.cpp +1 -1
  136. package/src/duckdb/src/execution/adaptive_filter.cpp +1 -1
  137. package/src/duckdb/src/execution/expression_executor/execute_case.cpp +10 -10
  138. package/src/duckdb/src/execution/expression_executor/execute_conjunction.cpp +7 -7
  139. package/src/duckdb/src/execution/expression_executor.cpp +33 -28
  140. package/src/duckdb/src/execution/index/art/art.cpp +30 -32
  141. package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +3 -4
  142. package/src/duckdb/src/execution/join_hashtable.cpp +4 -4
  143. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_inner.cpp +4 -4
  144. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_mark.cpp +2 -2
  145. package/src/duckdb/src/execution/operator/aggregate/distinct_aggregate_data.cpp +1 -1
  146. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +1 -1
  147. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +2 -2
  148. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +4 -4
  149. package/src/duckdb/src/execution/operator/filter/physical_filter.cpp +1 -1
  150. package/src/duckdb/src/execution/operator/helper/physical_reset.cpp +5 -2
  151. package/src/duckdb/src/execution/operator/helper/physical_set.cpp +5 -1
  152. package/src/duckdb/src/execution/operator/join/outer_join_marker.cpp +1 -1
  153. package/src/duckdb/src/execution/operator/join/perfect_hash_join_executor.cpp +1 -1
  154. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +2 -2
  155. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +4 -4
  156. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +3 -3
  157. package/src/duckdb/src/execution/operator/join/physical_nested_loop_join.cpp +3 -3
  158. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +3 -3
  159. package/src/duckdb/src/execution/operator/order/physical_top_n.cpp +1 -1
  160. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +2 -2
  161. package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +2 -2
  162. package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +2 -0
  163. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -3
  164. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
  165. package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -2
  166. package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +1 -1
  167. package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +3 -3
  168. package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +2 -1
  169. package/src/duckdb/src/execution/operator/scan/physical_expression_scan.cpp +1 -1
  170. package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +2 -2
  171. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +1 -1
  172. package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +1 -1
  173. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +1 -1
  174. package/src/duckdb/src/execution/physical_plan/plan_create_table.cpp +1 -1
  175. package/src/duckdb/src/execution/physical_plan_generator.cpp +2 -2
  176. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +1 -1
  177. package/src/duckdb/src/execution/reservoir_sample.cpp +2 -2
  178. package/src/duckdb/src/execution/window_segment_tree.cpp +8 -6
  179. package/src/duckdb/src/function/aggregate/distributive/count.cpp +158 -20
  180. package/src/duckdb/src/function/aggregate/distributive/first.cpp +66 -74
  181. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +13 -13
  182. package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
  183. package/src/duckdb/src/function/cast/decimal_cast.cpp +1 -1
  184. package/src/duckdb/src/function/cast/enum_casts.cpp +2 -2
  185. package/src/duckdb/src/function/cast/string_cast.cpp +11 -11
  186. package/src/duckdb/src/function/cast/union_casts.cpp +2 -2
  187. package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +3 -2
  188. package/src/duckdb/src/function/pragma/pragma_queries.cpp +33 -23
  189. package/src/duckdb/src/function/scalar/generic/constant_or_null.cpp +1 -1
  190. package/src/duckdb/src/function/scalar/list/list_concat.cpp +2 -2
  191. package/src/duckdb/src/function/scalar/list/list_extract.cpp +3 -3
  192. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +2 -3
  193. package/src/duckdb/src/function/scalar/string/concat.cpp +8 -7
  194. package/src/duckdb/src/function/scalar/string/contains.cpp +4 -4
  195. package/src/duckdb/src/function/scalar/string/like.cpp +5 -5
  196. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +4 -4
  197. package/src/duckdb/src/function/scalar/string/regexp.cpp +3 -3
  198. package/src/duckdb/src/function/scalar/string/strip_accents.cpp +1 -1
  199. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +1 -1
  200. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +25 -23
  201. package/src/duckdb/src/function/scalar_function.cpp +3 -3
  202. package/src/duckdb/src/function/table/arrow.cpp +6 -6
  203. package/src/duckdb/src/function/table/arrow_conversion.cpp +67 -61
  204. package/src/duckdb/src/function/table/checkpoint.cpp +1 -1
  205. package/src/duckdb/src/function/table/copy_csv.cpp +11 -7
  206. package/src/duckdb/src/function/table/glob.cpp +1 -1
  207. package/src/duckdb/src/function/table/pragma_last_profiling_output.cpp +1 -1
  208. package/src/duckdb/src/function/table/range.cpp +4 -4
  209. package/src/duckdb/src/function/table/read_csv.cpp +15 -23
  210. package/src/duckdb/src/function/table/repeat.cpp +2 -2
  211. package/src/duckdb/src/function/table/repeat_row.cpp +10 -3
  212. package/src/duckdb/src/function/table/system/duckdb_functions.cpp +1 -1
  213. package/src/duckdb/src/function/table/system/test_vector_types.cpp +1 -1
  214. package/src/duckdb/src/function/table/table_scan.cpp +2 -2
  215. package/src/duckdb/src/function/table/unnest.cpp +1 -1
  216. package/src/duckdb/src/function/table/version/pragma_version.cpp +3 -3
  217. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +2 -5
  218. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +2 -0
  219. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_catalog_entry.hpp +6 -0
  220. package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +2 -2
  221. package/src/duckdb/src/include/duckdb/catalog/catalog_search_path.hpp +8 -2
  222. package/src/duckdb/src/include/duckdb/catalog/default/builtin_types/types.hpp +97 -0
  223. package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +5 -0
  224. package/src/duckdb/src/include/duckdb/common/allocator.hpp +15 -4
  225. package/src/duckdb/src/include/duckdb/common/arrow/arrow_buffer.hpp +7 -2
  226. package/src/duckdb/src/include/duckdb/common/crypto/md5.hpp +2 -2
  227. package/src/duckdb/src/include/duckdb/common/exception.hpp +5 -2
  228. package/src/duckdb/src/include/duckdb/common/field_writer.hpp +3 -3
  229. package/src/duckdb/src/include/duckdb/common/file_system.hpp +11 -0
  230. package/src/duckdb/src/include/duckdb/common/fsst.hpp +2 -3
  231. package/src/duckdb/src/include/duckdb/common/radix.hpp +3 -3
  232. package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +1 -1
  233. package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +4 -1
  234. package/src/duckdb/src/include/duckdb/common/serializer.hpp +4 -4
  235. package/src/duckdb/src/include/duckdb/common/typedefs.hpp +30 -0
  236. package/src/duckdb/src/include/duckdb/common/types/column/partitioned_column_data.hpp +12 -0
  237. package/src/duckdb/src/include/duckdb/common/types/hyperloglog.hpp +6 -2
  238. package/src/duckdb/src/include/duckdb/common/types/null_value.hpp +1 -1
  239. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +12 -0
  240. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +10 -10
  241. package/src/duckdb/src/include/duckdb/common/types/value.hpp +1 -1
  242. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +9 -0
  243. package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +18 -6
  244. package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +112 -76
  245. package/src/duckdb/src/include/duckdb/common/vector_operations/binary_executor.hpp +16 -15
  246. package/src/duckdb/src/include/duckdb/common/vector_operations/generic_executor.hpp +11 -11
  247. package/src/duckdb/src/include/duckdb/common/vector_operations/ternary_executor.hpp +23 -19
  248. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +3 -3
  249. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +20 -24
  250. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +36 -39
  251. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/stddev.hpp +57 -53
  252. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +8 -9
  253. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +16 -18
  254. package/src/duckdb/src/include/duckdb/core_functions/aggregate/sum_helpers.hpp +7 -8
  255. package/src/duckdb/src/include/duckdb/core_functions/scalar/generic_functions.hpp +9 -0
  256. package/src/duckdb/src/include/duckdb/core_functions/scalar/map_functions.hpp +2 -6
  257. package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +16 -36
  258. package/src/duckdb/src/include/duckdb/execution/expression_executor_state.hpp +14 -2
  259. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -3
  260. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_result_collector.hpp +3 -0
  261. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_buffer.hpp +1 -1
  262. package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +5 -2
  263. package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +12 -12
  264. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +8 -29
  265. package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +95 -0
  266. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +13 -2
  267. package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +4 -4
  268. package/src/duckdb/src/include/duckdb/function/compression_function.hpp +44 -0
  269. package/src/duckdb/src/include/duckdb/function/copy_function.hpp +6 -6
  270. package/src/duckdb/src/include/duckdb/function/function.hpp +3 -3
  271. package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +3 -1
  272. package/src/duckdb/src/include/duckdb/function/macro_function.hpp +2 -2
  273. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +3 -3
  274. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
  275. package/src/duckdb/src/include/duckdb/function/table_function.hpp +6 -6
  276. package/src/duckdb/src/include/duckdb/main/capi/cast/utils.hpp +1 -1
  277. package/src/duckdb/src/include/duckdb/main/config.hpp +2 -0
  278. package/src/duckdb/src/include/duckdb/main/materialized_query_result.hpp +3 -0
  279. package/src/duckdb/src/include/duckdb/main/pending_query_result.hpp +3 -0
  280. package/src/duckdb/src/include/duckdb/main/query_result.hpp +17 -0
  281. package/src/duckdb/src/include/duckdb/main/relation.hpp +12 -0
  282. package/src/duckdb/src/include/duckdb/main/settings.hpp +9 -0
  283. package/src/duckdb/src/include/duckdb/main/stream_query_result.hpp +3 -0
  284. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  285. package/src/duckdb/src/include/duckdb/parser/base_expression.hpp +6 -12
  286. package/src/duckdb/src/include/duckdb/parser/constraint.hpp +2 -2
  287. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +1 -1
  288. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +1 -1
  289. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +1 -1
  290. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +1 -1
  291. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +1 -1
  292. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +1 -1
  293. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +1 -1
  294. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +1 -1
  295. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +1 -1
  296. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +1 -1
  297. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +1 -1
  298. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +1 -1
  299. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +1 -1
  300. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +1 -1
  301. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +1 -1
  302. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +1 -1
  303. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +1 -1
  304. package/src/duckdb/src/include/duckdb/parser/expression_map.hpp +1 -1
  305. package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +2 -2
  306. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -1
  307. package/src/duckdb/src/include/duckdb/parser/parser.hpp +2 -0
  308. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -2
  309. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +36 -5
  310. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +7 -4
  311. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +1 -1
  312. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +1 -1
  313. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -2
  314. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +1 -1
  315. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +1 -1
  316. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +1 -1
  317. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +1 -1
  318. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +1 -1
  319. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +4 -3
  320. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +107 -91
  321. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -2
  322. package/src/duckdb/src/include/duckdb/planner/bound_constraint.hpp +2 -2
  323. package/src/duckdb/src/include/duckdb/planner/bound_query_node.hpp +2 -2
  324. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +34 -1
  325. package/src/duckdb/src/include/duckdb/planner/bound_tableref.hpp +2 -2
  326. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +1 -1
  327. package/src/duckdb/src/include/duckdb/planner/expression/bound_between_expression.hpp +1 -1
  328. package/src/duckdb/src/include/duckdb/planner/expression/bound_case_expression.hpp +1 -1
  329. package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +1 -1
  330. package/src/duckdb/src/include/duckdb/planner/expression/bound_columnref_expression.hpp +1 -1
  331. package/src/duckdb/src/include/duckdb/planner/expression/bound_comparison_expression.hpp +1 -1
  332. package/src/duckdb/src/include/duckdb/planner/expression/bound_conjunction_expression.hpp +1 -1
  333. package/src/duckdb/src/include/duckdb/planner/expression/bound_constant_expression.hpp +1 -1
  334. package/src/duckdb/src/include/duckdb/planner/expression/bound_function_expression.hpp +1 -1
  335. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambda_expression.hpp +1 -1
  336. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambdaref_expression.hpp +1 -1
  337. package/src/duckdb/src/include/duckdb/planner/expression/bound_operator_expression.hpp +1 -1
  338. package/src/duckdb/src/include/duckdb/planner/expression/bound_parameter_expression.hpp +1 -1
  339. package/src/duckdb/src/include/duckdb/planner/expression/bound_reference_expression.hpp +1 -1
  340. package/src/duckdb/src/include/duckdb/planner/expression/bound_subquery_expression.hpp +1 -1
  341. package/src/duckdb/src/include/duckdb/planner/expression/bound_unnest_expression.hpp +1 -1
  342. package/src/duckdb/src/include/duckdb/planner/expression/bound_window_expression.hpp +1 -1
  343. package/src/duckdb/src/include/duckdb/planner/expression.hpp +5 -7
  344. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
  345. package/src/duckdb/src/include/duckdb/planner/filter/conjunction_filter.hpp +6 -0
  346. package/src/duckdb/src/include/duckdb/planner/filter/constant_filter.hpp +3 -0
  347. package/src/duckdb/src/include/duckdb/planner/filter/null_filter.hpp +6 -0
  348. package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +2 -2
  349. package/src/duckdb/src/include/duckdb/planner/operator/logical_pivot.hpp +3 -0
  350. package/src/duckdb/src/include/duckdb/planner/table_binding.hpp +26 -0
  351. package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +17 -0
  352. package/src/duckdb/src/include/duckdb/planner/tableref/bound_pivotref.hpp +3 -0
  353. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_analyze.hpp +1 -1
  354. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
  355. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_analyze.hpp +2 -2
  356. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
  357. package/src/duckdb/src/include/duckdb/storage/index.hpp +2 -2
  358. package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +1 -1
  359. package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +12 -0
  360. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +1 -1
  361. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +25 -2
  362. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +12 -0
  363. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +22 -0
  364. package/src/duckdb/src/include/duckdb/transaction/duck_transaction_manager.hpp +2 -2
  365. package/src/duckdb/src/include/duckdb/transaction/transaction.hpp +2 -2
  366. package/src/duckdb/src/main/capi/appender-c.cpp +5 -5
  367. package/src/duckdb/src/main/capi/arrow-c.cpp +10 -10
  368. package/src/duckdb/src/main/capi/cast/from_decimal-c.cpp +1 -1
  369. package/src/duckdb/src/main/capi/cast/utils-c.cpp +1 -1
  370. package/src/duckdb/src/main/capi/config-c.cpp +1 -1
  371. package/src/duckdb/src/main/capi/data_chunk-c.cpp +17 -17
  372. package/src/duckdb/src/main/capi/duckdb-c.cpp +4 -4
  373. package/src/duckdb/src/main/capi/duckdb_value-c.cpp +4 -4
  374. package/src/duckdb/src/main/capi/logical_types-c.cpp +22 -21
  375. package/src/duckdb/src/main/capi/pending-c.cpp +6 -6
  376. package/src/duckdb/src/main/capi/prepared-c.cpp +10 -10
  377. package/src/duckdb/src/main/capi/replacement_scan-c.cpp +6 -6
  378. package/src/duckdb/src/main/capi/result-c.cpp +23 -23
  379. package/src/duckdb/src/main/capi/table_function-c.cpp +1 -1
  380. package/src/duckdb/src/main/client_context.cpp +3 -3
  381. package/src/duckdb/src/main/config.cpp +1 -0
  382. package/src/duckdb/src/main/database_manager.cpp +1 -1
  383. package/src/duckdb/src/main/error_manager.cpp +1 -1
  384. package/src/duckdb/src/main/extension/extension_load.cpp +1 -1
  385. package/src/duckdb/src/main/relation/create_table_relation.cpp +1 -1
  386. package/src/duckdb/src/main/relation/create_view_relation.cpp +1 -1
  387. package/src/duckdb/src/main/relation/delete_relation.cpp +1 -1
  388. package/src/duckdb/src/main/relation/explain_relation.cpp +1 -1
  389. package/src/duckdb/src/main/relation/insert_relation.cpp +1 -1
  390. package/src/duckdb/src/main/relation/update_relation.cpp +1 -1
  391. package/src/duckdb/src/main/relation/write_csv_relation.cpp +1 -1
  392. package/src/duckdb/src/main/relation/write_parquet_relation.cpp +1 -1
  393. package/src/duckdb/src/main/relation.cpp +1 -1
  394. package/src/duckdb/src/main/settings/settings.cpp +22 -6
  395. package/src/duckdb/src/optimizer/deliminator.cpp +12 -12
  396. package/src/duckdb/src/optimizer/expression_heuristics.cpp +1 -0
  397. package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -3
  398. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +10 -10
  399. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +4 -7
  400. package/src/duckdb/src/optimizer/matcher/expression_matcher.cpp +1 -1
  401. package/src/duckdb/src/optimizer/pullup/pullup_projection.cpp +2 -2
  402. package/src/duckdb/src/optimizer/regex_range_filter.cpp +2 -4
  403. package/src/duckdb/src/optimizer/rule/distributivity.cpp +2 -2
  404. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +6 -6
  405. package/src/duckdb/src/optimizer/statistics/operator/propagate_get.cpp +2 -2
  406. package/src/duckdb/src/parallel/executor.cpp +1 -1
  407. package/src/duckdb/src/parser/base_expression.cpp +2 -5
  408. package/src/duckdb/src/parser/column_definition.cpp +5 -8
  409. package/src/duckdb/src/parser/expression/between_expression.cpp +4 -4
  410. package/src/duckdb/src/parser/expression/case_expression.cpp +6 -6
  411. package/src/duckdb/src/parser/expression/cast_expression.cpp +4 -4
  412. package/src/duckdb/src/parser/expression/collate_expression.cpp +3 -3
  413. package/src/duckdb/src/parser/expression/columnref_expression.cpp +4 -4
  414. package/src/duckdb/src/parser/expression/comparison_expression.cpp +3 -3
  415. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +2 -2
  416. package/src/duckdb/src/parser/expression/constant_expression.cpp +2 -2
  417. package/src/duckdb/src/parser/expression/function_expression.cpp +10 -14
  418. package/src/duckdb/src/parser/expression/lambda_expression.cpp +2 -2
  419. package/src/duckdb/src/parser/expression/operator_expression.cpp +4 -4
  420. package/src/duckdb/src/parser/expression/parameter_expression.cpp +2 -2
  421. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +3 -3
  422. package/src/duckdb/src/parser/expression/star_expression.cpp +9 -9
  423. package/src/duckdb/src/parser/expression/subquery_expression.cpp +5 -5
  424. package/src/duckdb/src/parser/expression/window_expression.cpp +13 -24
  425. package/src/duckdb/src/parser/parsed_expression.cpp +34 -18
  426. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +4 -4
  427. package/src/duckdb/src/parser/parser.cpp +4 -4
  428. package/src/duckdb/src/parser/query_node/select_node.cpp +6 -13
  429. package/src/duckdb/src/parser/query_node.cpp +7 -6
  430. package/src/duckdb/src/parser/result_modifier.cpp +25 -18
  431. package/src/duckdb/src/parser/statement/select_statement.cpp +3 -3
  432. package/src/duckdb/src/parser/tableref/basetableref.cpp +4 -4
  433. package/src/duckdb/src/parser/tableref/emptytableref.cpp +1 -1
  434. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +5 -5
  435. package/src/duckdb/src/parser/tableref/joinref.cpp +6 -6
  436. package/src/duckdb/src/parser/tableref/pivotref.cpp +10 -15
  437. package/src/duckdb/src/parser/tableref/subqueryref.cpp +3 -3
  438. package/src/duckdb/src/parser/tableref/table_function.cpp +3 -3
  439. package/src/duckdb/src/parser/tableref.cpp +12 -3
  440. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +7 -7
  441. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +4 -4
  442. package/src/duckdb/src/parser/transform/expression/transform_boolean_test.cpp +4 -4
  443. package/src/duckdb/src/parser/transform/expression/transform_case.cpp +8 -10
  444. package/src/duckdb/src/parser/transform/expression/transform_cast.cpp +7 -9
  445. package/src/duckdb/src/parser/transform/expression/transform_coalesce.cpp +3 -5
  446. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +22 -22
  447. package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +2 -2
  448. package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +42 -44
  449. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +70 -75
  450. package/src/duckdb/src/parser/transform/expression/transform_grouping_function.cpp +4 -4
  451. package/src/duckdb/src/parser/transform/expression/transform_interval.cpp +7 -7
  452. package/src/duckdb/src/parser/transform/expression/transform_is_null.cpp +4 -5
  453. package/src/duckdb/src/parser/transform/expression/transform_lambda.cpp +5 -6
  454. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +28 -29
  455. package/src/duckdb/src/parser/transform/expression/transform_param_ref.cpp +13 -14
  456. package/src/duckdb/src/parser/transform/expression/transform_positional_reference.cpp +4 -4
  457. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +9 -10
  458. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +28 -32
  459. package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +18 -18
  460. package/src/duckdb/src/parser/transform/helpers/transform_sample.cpp +3 -3
  461. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +27 -26
  462. package/src/duckdb/src/parser/transform/statement/transform_alter_sequence.cpp +11 -14
  463. package/src/duckdb/src/parser/transform/statement/transform_alter_table.cpp +14 -16
  464. package/src/duckdb/src/parser/transform/statement/transform_attach.cpp +8 -9
  465. package/src/duckdb/src/parser/transform/statement/transform_call.cpp +2 -5
  466. package/src/duckdb/src/parser/transform/statement/transform_checkpoint.cpp +4 -6
  467. package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +22 -23
  468. package/src/duckdb/src/parser/transform/statement/transform_create_database.cpp +3 -4
  469. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +14 -18
  470. package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +13 -15
  471. package/src/duckdb/src/parser/transform/statement/transform_create_schema.cpp +8 -10
  472. package/src/duckdb/src/parser/transform/statement/transform_create_sequence.cpp +8 -10
  473. package/src/duckdb/src/parser/transform/statement/transform_create_table.cpp +26 -28
  474. package/src/duckdb/src/parser/transform/statement/transform_create_table_as.cpp +8 -10
  475. package/src/duckdb/src/parser/transform/statement/transform_create_type.cpp +12 -15
  476. package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +13 -18
  477. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +11 -13
  478. package/src/duckdb/src/parser/transform/statement/transform_detach.cpp +3 -4
  479. package/src/duckdb/src/parser/transform/statement/transform_drop.cpp +20 -22
  480. package/src/duckdb/src/parser/transform/statement/transform_explain.cpp +5 -7
  481. package/src/duckdb/src/parser/transform/statement/transform_export.cpp +5 -6
  482. package/src/duckdb/src/parser/transform/statement/transform_import.cpp +2 -3
  483. package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +21 -24
  484. package/src/duckdb/src/parser/transform/statement/transform_load.cpp +4 -5
  485. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -7
  486. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +7 -9
  487. package/src/duckdb/src/parser/transform/statement/transform_prepare.cpp +11 -19
  488. package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +12 -14
  489. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +12 -9
  490. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +34 -34
  491. package/src/duckdb/src/parser/transform/statement/transform_set.cpp +18 -19
  492. package/src/duckdb/src/parser/transform/statement/transform_show.cpp +5 -7
  493. package/src/duckdb/src/parser/transform/statement/transform_show_select.cpp +4 -5
  494. package/src/duckdb/src/parser/transform/statement/transform_transaction.cpp +3 -5
  495. package/src/duckdb/src/parser/transform/statement/transform_update.cpp +10 -13
  496. package/src/duckdb/src/parser/transform/statement/transform_upsert.cpp +4 -4
  497. package/src/duckdb/src/parser/transform/statement/transform_use.cpp +2 -3
  498. package/src/duckdb/src/parser/transform/statement/transform_vacuum.cpp +6 -10
  499. package/src/duckdb/src/parser/transform/tableref/transform_base_tableref.cpp +18 -18
  500. package/src/duckdb/src/parser/transform/tableref/transform_from.cpp +5 -5
  501. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +11 -11
  502. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +30 -27
  503. package/src/duckdb/src/parser/transform/tableref/transform_subquery.cpp +5 -5
  504. package/src/duckdb/src/parser/transform/tableref/transform_table_function.cpp +13 -12
  505. package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +8 -8
  506. package/src/duckdb/src/parser/transformer.cpp +46 -46
  507. package/src/duckdb/src/planner/bind_context.cpp +9 -10
  508. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +1 -1
  509. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +1 -1
  510. package/src/duckdb/src/planner/binder/expression/bind_positional_reference_expression.cpp +7 -2
  511. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +1 -1
  512. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +6 -3
  513. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +8 -8
  514. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +4 -4
  515. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +13 -5
  516. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +2 -2
  517. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +2 -114
  518. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +4 -2
  519. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +17 -7
  520. package/src/duckdb/src/planner/binder.cpp +1 -1
  521. package/src/duckdb/src/planner/bound_result_modifier.cpp +16 -11
  522. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +5 -5
  523. package/src/duckdb/src/planner/expression/bound_between_expression.cpp +5 -5
  524. package/src/duckdb/src/planner/expression/bound_case_expression.cpp +5 -5
  525. package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +3 -3
  526. package/src/duckdb/src/planner/expression/bound_columnref_expression.cpp +2 -2
  527. package/src/duckdb/src/planner/expression/bound_comparison_expression.cpp +4 -4
  528. package/src/duckdb/src/planner/expression/bound_conjunction_expression.cpp +2 -2
  529. package/src/duckdb/src/planner/expression/bound_constant_expression.cpp +2 -2
  530. package/src/duckdb/src/planner/expression/bound_expression.cpp +1 -1
  531. package/src/duckdb/src/planner/expression/bound_function_expression.cpp +3 -4
  532. package/src/duckdb/src/planner/expression/bound_lambda_expression.cpp +4 -5
  533. package/src/duckdb/src/planner/expression/bound_lambdaref_expression.cpp +2 -2
  534. package/src/duckdb/src/planner/expression/bound_operator_expression.cpp +3 -4
  535. package/src/duckdb/src/planner/expression/bound_parameter_expression.cpp +2 -2
  536. package/src/duckdb/src/planner/expression/bound_reference_expression.cpp +2 -2
  537. package/src/duckdb/src/planner/expression/bound_subquery_expression.cpp +1 -1
  538. package/src/duckdb/src/planner/expression/bound_unnest_expression.cpp +3 -3
  539. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +8 -21
  540. package/src/duckdb/src/planner/expression.cpp +15 -0
  541. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +2 -2
  542. package/src/duckdb/src/planner/expression_binder.cpp +3 -2
  543. package/src/duckdb/src/planner/expression_iterator.cpp +2 -2
  544. package/src/duckdb/src/planner/filter/conjunction_filter.cpp +2 -2
  545. package/src/duckdb/src/planner/filter/constant_filter.cpp +1 -1
  546. package/src/duckdb/src/planner/logical_operator.cpp +3 -4
  547. package/src/duckdb/src/planner/logical_operator_visitor.cpp +1 -1
  548. package/src/duckdb/src/planner/table_filter.cpp +1 -1
  549. package/src/duckdb/src/storage/arena_allocator.cpp +2 -2
  550. package/src/duckdb/src/storage/buffer/block_handle.cpp +1 -1
  551. package/src/duckdb/src/storage/checkpoint/write_overflow_strings_to_disk.cpp +2 -2
  552. package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -3
  553. package/src/duckdb/src/storage/compression/bitpacking.cpp +8 -8
  554. package/src/duckdb/src/storage/compression/dictionary_compression.cpp +36 -36
  555. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +11 -11
  556. package/src/duckdb/src/storage/compression/fsst.cpp +34 -34
  557. package/src/duckdb/src/storage/compression/rle.cpp +8 -8
  558. package/src/duckdb/src/storage/compression/string_uncompressed.cpp +13 -13
  559. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +11 -11
  560. package/src/duckdb/src/storage/data_table.cpp +8 -7
  561. package/src/duckdb/src/storage/index.cpp +1 -3
  562. package/src/duckdb/src/storage/local_storage.cpp +2 -1
  563. package/src/duckdb/src/storage/magic_bytes.cpp +1 -1
  564. package/src/duckdb/src/storage/single_file_block_manager.cpp +3 -3
  565. package/src/duckdb/src/storage/standard_buffer_manager.cpp +3 -3
  566. package/src/duckdb/src/storage/statistics/list_stats.cpp +1 -1
  567. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +1 -1
  568. package/src/duckdb/src/storage/statistics/string_stats.cpp +15 -14
  569. package/src/duckdb/src/storage/table/chunk_info.cpp +2 -2
  570. package/src/duckdb/src/storage/table/column_segment.cpp +3 -3
  571. package/src/duckdb/src/storage/table/list_column_data.cpp +8 -7
  572. package/src/duckdb/src/storage/table/row_group.cpp +4 -4
  573. package/src/duckdb/src/storage/table/standard_column_data.cpp +1 -1
  574. package/src/duckdb/src/storage/table/update_segment.cpp +12 -12
  575. package/src/duckdb/src/storage/wal_replay.cpp +5 -6
  576. package/src/duckdb/src/transaction/cleanup_state.cpp +3 -3
  577. package/src/duckdb/src/transaction/commit_state.cpp +8 -8
  578. package/src/duckdb/src/transaction/duck_transaction.cpp +9 -7
  579. package/src/duckdb/src/transaction/duck_transaction_manager.cpp +16 -16
  580. package/src/duckdb/src/transaction/rollback_state.cpp +3 -3
  581. package/src/duckdb/src/verification/prepared_statement_verifier.cpp +1 -1
  582. package/src/duckdb/src/verification/statement_verifier.cpp +3 -4
  583. package/src/duckdb/third_party/hyperloglog/hyperloglog.hpp +2 -2
  584. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +13479 -13564
  585. package/src/duckdb/third_party/pcg/pcg_extras.hpp +1 -1
  586. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +5 -5
@@ -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
  }
@@ -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
  }
@@ -25,8 +25,8 @@ unique_ptr<ParsedExpression> ParameterExpression::Copy() const {
25
25
  return std::move(copy);
26
26
  }
27
27
 
28
- bool ParameterExpression::Equal(const ParameterExpression *a, const ParameterExpression *b) {
29
- return a->parameter_nr == b->parameter_nr;
28
+ bool ParameterExpression::Equal(const ParameterExpression &a, const ParameterExpression &b) {
29
+ return a.parameter_nr == b.parameter_nr;
30
30
  }
31
31
 
32
32
  hash_t ParameterExpression::Hash() const {
@@ -18,9 +18,9 @@ string PositionalReferenceExpression::ToString() const {
18
18
  return "#" + to_string(index);
19
19
  }
20
20
 
21
- bool PositionalReferenceExpression::Equal(const PositionalReferenceExpression *a,
22
- const PositionalReferenceExpression *b) {
23
- return a->index == b->index;
21
+ bool PositionalReferenceExpression::Equal(const PositionalReferenceExpression &a,
22
+ const PositionalReferenceExpression &b) {
23
+ return a.index == b.index;
24
24
  }
25
25
 
26
26
  unique_ptr<ParsedExpression> PositionalReferenceExpression::Copy() const {
@@ -54,26 +54,26 @@ string StarExpression::ToString() const {
54
54
  return result;
55
55
  }
56
56
 
57
- bool StarExpression::Equal(const StarExpression *a, const StarExpression *b) {
58
- if (a->relation_name != b->relation_name || a->exclude_list != b->exclude_list) {
57
+ bool StarExpression::Equal(const StarExpression &a, const StarExpression &b) {
58
+ if (a.relation_name != b.relation_name || a.exclude_list != b.exclude_list) {
59
59
  return false;
60
60
  }
61
- if (a->columns != b->columns) {
61
+ if (a.columns != b.columns) {
62
62
  return false;
63
63
  }
64
- if (a->replace_list.size() != b->replace_list.size()) {
64
+ if (a.replace_list.size() != b.replace_list.size()) {
65
65
  return false;
66
66
  }
67
- for (auto &entry : a->replace_list) {
68
- auto other_entry = b->replace_list.find(entry.first);
69
- if (other_entry == b->replace_list.end()) {
67
+ for (auto &entry : a.replace_list) {
68
+ auto other_entry = b.replace_list.find(entry.first);
69
+ if (other_entry == b.replace_list.end()) {
70
70
  return false;
71
71
  }
72
- if (!entry.second->Equals(other_entry->second.get())) {
72
+ if (!entry.second->Equals(*other_entry->second)) {
73
73
  return false;
74
74
  }
75
75
  }
76
- if (!BaseExpression::Equals(a->expr.get(), b->expr.get())) {
76
+ if (!ParsedExpression::Equals(a.expr, b.expr)) {
77
77
  return false;
78
78
  }
79
79
  return true;
@@ -28,15 +28,15 @@ string SubqueryExpression::ToString() const {
28
28
  }
29
29
  }
30
30
 
31
- bool SubqueryExpression::Equal(const SubqueryExpression *a, const SubqueryExpression *b) {
32
- if (!a->subquery || !b->subquery) {
31
+ bool SubqueryExpression::Equal(const SubqueryExpression &a, const SubqueryExpression &b) {
32
+ if (!a.subquery || !b.subquery) {
33
33
  return false;
34
34
  }
35
- if (!BaseExpression::Equals(a->child.get(), b->child.get())) {
35
+ if (!ParsedExpression::Equals(a.child, b.child)) {
36
36
  return false;
37
37
  }
38
- return a->comparison_type == b->comparison_type && a->subquery_type == b->subquery_type &&
39
- a->subquery->Equals(b->subquery.get());
38
+ return a.comparison_type == b.comparison_type && a.subquery_type == b.subquery_type &&
39
+ a.subquery->Equals(*b.subquery);
40
40
  }
41
41
 
42
42
  unique_ptr<ParsedExpression> SubqueryExpression::Copy() const {
@@ -63,53 +63,42 @@ string WindowExpression::ToString() const {
63
63
  return ToString<WindowExpression, ParsedExpression, OrderByNode>(*this, schema, function_name);
64
64
  }
65
65
 
66
- bool WindowExpression::Equal(const WindowExpression *a, const WindowExpression *b) {
66
+ bool WindowExpression::Equal(const WindowExpression &a, const WindowExpression &b) {
67
67
  // check if the child expressions are equivalent
68
- if (b->children.size() != a->children.size()) {
68
+ if (a.ignore_nulls != b.ignore_nulls) {
69
69
  return false;
70
70
  }
71
- if (a->ignore_nulls != b->ignore_nulls) {
71
+ if (!ParsedExpression::ListEquals(a.children, b.children)) {
72
72
  return false;
73
73
  }
74
- for (idx_t i = 0; i < a->children.size(); i++) {
75
- if (!a->children[i]->Equals(b->children[i].get())) {
76
- return false;
77
- }
78
- }
79
- if (a->start != b->start || a->end != b->end) {
74
+ if (a.start != b.start || a.end != b.end) {
80
75
  return false;
81
76
  }
82
77
  // check if the framing expressions are equivalentbind_
83
- if (!BaseExpression::Equals(a->start_expr.get(), b->start_expr.get()) ||
84
- !BaseExpression::Equals(a->end_expr.get(), b->end_expr.get()) ||
85
- !BaseExpression::Equals(a->offset_expr.get(), b->offset_expr.get()) ||
86
- !BaseExpression::Equals(a->default_expr.get(), b->default_expr.get())) {
78
+ if (!ParsedExpression::Equals(a.start_expr, b.start_expr) || !ParsedExpression::Equals(a.end_expr, b.end_expr) ||
79
+ !ParsedExpression::Equals(a.offset_expr, b.offset_expr) ||
80
+ !ParsedExpression::Equals(a.default_expr, b.default_expr)) {
87
81
  return false;
88
82
  }
89
83
 
90
84
  // check if the partitions are equivalent
91
- if (a->partitions.size() != b->partitions.size()) {
85
+ if (!ParsedExpression::ListEquals(a.partitions, b.partitions)) {
92
86
  return false;
93
87
  }
94
- for (idx_t i = 0; i < a->partitions.size(); i++) {
95
- if (!a->partitions[i]->Equals(b->partitions[i].get())) {
96
- return false;
97
- }
98
- }
99
88
  // check if the orderings are equivalent
100
- if (a->orders.size() != b->orders.size()) {
89
+ if (a.orders.size() != b.orders.size()) {
101
90
  return false;
102
91
  }
103
- for (idx_t i = 0; i < a->orders.size(); i++) {
104
- if (a->orders[i].type != b->orders[i].type) {
92
+ for (idx_t i = 0; i < a.orders.size(); i++) {
93
+ if (a.orders[i].type != b.orders[i].type) {
105
94
  return false;
106
95
  }
107
- if (!a->orders[i].expression->Equals(b->orders[i].expression.get())) {
96
+ if (!a.orders[i].expression->Equals(*b.orders[i].expression)) {
108
97
  return false;
109
98
  }
110
99
  }
111
100
  // check if the filter clauses are equivalent
112
- if (!BaseExpression::Equals(a->filter_expr.get(), b->filter_expr.get())) {
101
+ if (!ParsedExpression::Equals(a.filter_expr, b.filter_expr)) {
113
102
  return false;
114
103
  }
115
104
 
@@ -7,6 +7,7 @@
7
7
  #include "duckdb/parser/parsed_expression_iterator.hpp"
8
8
  #include "duckdb/common/serializer/format_serializer.hpp"
9
9
  #include "duckdb/common/serializer/format_deserializer.hpp"
10
+ #include "duckdb/parser/expression_util.hpp"
10
11
 
11
12
  namespace duckdb {
12
13
 
@@ -48,46 +49,46 @@ bool ParsedExpression::HasSubquery() const {
48
49
  return has_subquery;
49
50
  }
50
51
 
51
- bool ParsedExpression::Equals(const BaseExpression *other) const {
52
+ bool ParsedExpression::Equals(const BaseExpression &other) const {
52
53
  if (!BaseExpression::Equals(other)) {
53
54
  return false;
54
55
  }
55
56
  switch (expression_class) {
56
57
  case ExpressionClass::BETWEEN:
57
- return BetweenExpression::Equal((BetweenExpression *)this, (BetweenExpression *)other);
58
+ return BetweenExpression::Equal(Cast<BetweenExpression>(), other.Cast<BetweenExpression>());
58
59
  case ExpressionClass::CASE:
59
- return CaseExpression::Equal((CaseExpression *)this, (CaseExpression *)other);
60
+ return CaseExpression::Equal(Cast<CaseExpression>(), other.Cast<CaseExpression>());
60
61
  case ExpressionClass::CAST:
61
- return CastExpression::Equal((CastExpression *)this, (CastExpression *)other);
62
+ return CastExpression::Equal(Cast<CastExpression>(), other.Cast<CastExpression>());
62
63
  case ExpressionClass::COLLATE:
63
- return CollateExpression::Equal((CollateExpression *)this, (CollateExpression *)other);
64
+ return CollateExpression::Equal(Cast<CollateExpression>(), other.Cast<CollateExpression>());
64
65
  case ExpressionClass::COLUMN_REF:
65
- return ColumnRefExpression::Equal((ColumnRefExpression *)this, (ColumnRefExpression *)other);
66
+ return ColumnRefExpression::Equal(Cast<ColumnRefExpression>(), other.Cast<ColumnRefExpression>());
66
67
  case ExpressionClass::COMPARISON:
67
- return ComparisonExpression::Equal((ComparisonExpression *)this, (ComparisonExpression *)other);
68
+ return ComparisonExpression::Equal(Cast<ComparisonExpression>(), other.Cast<ComparisonExpression>());
68
69
  case ExpressionClass::CONJUNCTION:
69
- return ConjunctionExpression::Equal((ConjunctionExpression *)this, (ConjunctionExpression *)other);
70
+ return ConjunctionExpression::Equal(Cast<ConjunctionExpression>(), other.Cast<ConjunctionExpression>());
70
71
  case ExpressionClass::CONSTANT:
71
- return ConstantExpression::Equal((ConstantExpression *)this, (ConstantExpression *)other);
72
+ return ConstantExpression::Equal(Cast<ConstantExpression>(), other.Cast<ConstantExpression>());
72
73
  case ExpressionClass::DEFAULT:
73
74
  return true;
74
75
  case ExpressionClass::FUNCTION:
75
- return FunctionExpression::Equal((FunctionExpression *)this, (FunctionExpression *)other);
76
+ return FunctionExpression::Equal(Cast<FunctionExpression>(), other.Cast<FunctionExpression>());
76
77
  case ExpressionClass::LAMBDA:
77
- return LambdaExpression::Equal((LambdaExpression *)this, (LambdaExpression *)other);
78
+ return LambdaExpression::Equal(Cast<LambdaExpression>(), other.Cast<LambdaExpression>());
78
79
  case ExpressionClass::OPERATOR:
79
- return OperatorExpression::Equal((OperatorExpression *)this, (OperatorExpression *)other);
80
+ return OperatorExpression::Equal(Cast<OperatorExpression>(), other.Cast<OperatorExpression>());
80
81
  case ExpressionClass::PARAMETER:
81
- return ParameterExpression::Equal((ParameterExpression *)this, (ParameterExpression *)other);
82
+ return ParameterExpression::Equal(Cast<ParameterExpression>(), other.Cast<ParameterExpression>());
82
83
  case ExpressionClass::POSITIONAL_REFERENCE:
83
- return PositionalReferenceExpression::Equal((PositionalReferenceExpression *)this,
84
- (PositionalReferenceExpression *)other);
84
+ return PositionalReferenceExpression::Equal(Cast<PositionalReferenceExpression>(),
85
+ other.Cast<PositionalReferenceExpression>());
85
86
  case ExpressionClass::STAR:
86
- return StarExpression::Equal((StarExpression *)this, (StarExpression *)other);
87
+ return StarExpression::Equal(Cast<StarExpression>(), other.Cast<StarExpression>());
87
88
  case ExpressionClass::SUBQUERY:
88
- return SubqueryExpression::Equal((SubqueryExpression *)this, (SubqueryExpression *)other);
89
+ return SubqueryExpression::Equal(Cast<SubqueryExpression>(), other.Cast<SubqueryExpression>());
89
90
  case ExpressionClass::WINDOW:
90
- return WindowExpression::Equal((WindowExpression *)this, (WindowExpression *)other);
91
+ return WindowExpression::Equal(Cast<WindowExpression>(), other.Cast<WindowExpression>());
91
92
  default:
92
93
  throw SerializationException("Unsupported type for expression comparison!");
93
94
  }
@@ -246,4 +247,19 @@ unique_ptr<ParsedExpression> ParsedExpression::Deserialize(Deserializer &source)
246
247
  return result;
247
248
  }
248
249
 
250
+ bool ParsedExpression::Equals(const unique_ptr<ParsedExpression> &left, const unique_ptr<ParsedExpression> &right) {
251
+ if (left.get() == right.get()) {
252
+ return true;
253
+ }
254
+ if (!left || !right) {
255
+ return false;
256
+ }
257
+ return left->Equals(*right);
258
+ }
259
+
260
+ bool ParsedExpression::ListEquals(const vector<unique_ptr<ParsedExpression>> &left,
261
+ const vector<unique_ptr<ParsedExpression>> &right) {
262
+ return ExpressionUtil::ListEquals(left, right);
263
+ }
264
+
249
265
  } // namespace duckdb
@@ -158,7 +158,7 @@ void ParsedExpressionIterator::EnumerateQueryNodeModifiers(
158
158
  for (auto &modifier : node.modifiers) {
159
159
  switch (modifier->type) {
160
160
  case ResultModifierType::LIMIT_MODIFIER: {
161
- auto &limit_modifier = (LimitModifier &)*modifier;
161
+ auto &limit_modifier = modifier->Cast<LimitModifier>();
162
162
  if (limit_modifier.limit) {
163
163
  callback(limit_modifier.limit);
164
164
  }
@@ -168,7 +168,7 @@ void ParsedExpressionIterator::EnumerateQueryNodeModifiers(
168
168
  } break;
169
169
 
170
170
  case ResultModifierType::LIMIT_PERCENT_MODIFIER: {
171
- auto &limit_modifier = (LimitPercentModifier &)*modifier;
171
+ auto &limit_modifier = modifier->Cast<LimitPercentModifier>();
172
172
  if (limit_modifier.limit) {
173
173
  callback(limit_modifier.limit);
174
174
  }
@@ -178,14 +178,14 @@ void ParsedExpressionIterator::EnumerateQueryNodeModifiers(
178
178
  } break;
179
179
 
180
180
  case ResultModifierType::ORDER_MODIFIER: {
181
- auto &order_modifier = (OrderModifier &)*modifier;
181
+ auto &order_modifier = modifier->Cast<OrderModifier>();
182
182
  for (auto &order : order_modifier.orders) {
183
183
  callback(order.expression);
184
184
  }
185
185
  } break;
186
186
 
187
187
  case ResultModifierType::DISTINCT_MODIFIER: {
188
- auto &distinct_modifier = (DistinctModifier &)*modifier;
188
+ auto &distinct_modifier = modifier->Cast<DistinctModifier>();
189
189
  for (auto &target : distinct_modifier.distinct_on_targets) {
190
190
  callback(target);
191
191
  }