duckdb 0.7.2-dev0.0 → 0.7.2-dev1138.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 (625) hide show
  1. package/binding.gyp +12 -7
  2. package/lib/duckdb.d.ts +55 -2
  3. package/lib/duckdb.js +20 -1
  4. package/package.json +1 -1
  5. package/src/connection.cpp +1 -2
  6. package/src/database.cpp +1 -1
  7. package/src/duckdb/extension/icu/icu-extension.cpp +4 -0
  8. package/src/duckdb/extension/icu/icu-list-range.cpp +207 -0
  9. package/src/duckdb/extension/icu/icu-table-range.cpp +194 -0
  10. package/src/duckdb/extension/icu/include/icu-list-range.hpp +17 -0
  11. package/src/duckdb/extension/icu/include/icu-table-range.hpp +17 -0
  12. package/src/duckdb/extension/icu/third_party/icu/stubdata/stubdata.cpp +1 -1
  13. package/src/duckdb/extension/json/include/json_common.hpp +1 -0
  14. package/src/duckdb/extension/json/include/json_functions.hpp +2 -0
  15. package/src/duckdb/extension/json/include/json_serializer.hpp +77 -0
  16. package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +147 -0
  17. package/src/duckdb/extension/json/json_functions/read_json.cpp +6 -5
  18. package/src/duckdb/extension/json/json_functions.cpp +12 -4
  19. package/src/duckdb/extension/json/json_scan.cpp +2 -2
  20. package/src/duckdb/extension/json/json_serializer.cpp +217 -0
  21. package/src/duckdb/extension/parquet/column_reader.cpp +94 -15
  22. package/src/duckdb/extension/parquet/column_writer.cpp +0 -1
  23. package/src/duckdb/extension/parquet/include/column_reader.hpp +1 -2
  24. package/src/duckdb/extension/parquet/include/decode_utils.hpp +5 -4
  25. package/src/duckdb/extension/parquet/include/generated_column_reader.hpp +1 -11
  26. package/src/duckdb/extension/parquet/include/parquet_timestamp.hpp +2 -1
  27. package/src/duckdb/extension/parquet/parquet-extension.cpp +12 -2
  28. package/src/duckdb/extension/parquet/parquet_reader.cpp +1 -1
  29. package/src/duckdb/extension/parquet/parquet_statistics.cpp +26 -32
  30. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +16 -6
  31. package/src/duckdb/src/catalog/catalog.cpp +34 -5
  32. package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +4 -0
  33. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +2 -21
  34. package/src/duckdb/src/catalog/catalog_entry/scalar_function_catalog_entry.cpp +7 -6
  35. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +3 -3
  36. package/src/duckdb/src/catalog/catalog_entry/table_function_catalog_entry.cpp +20 -1
  37. package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +8 -2
  38. package/src/duckdb/src/catalog/catalog_set.cpp +1 -0
  39. package/src/duckdb/src/catalog/default/default_functions.cpp +3 -0
  40. package/src/duckdb/src/catalog/dependency_list.cpp +12 -0
  41. package/src/duckdb/src/catalog/duck_catalog.cpp +34 -7
  42. package/src/duckdb/src/common/arrow/arrow_appender.cpp +48 -4
  43. package/src/duckdb/src/common/arrow/arrow_converter.cpp +1 -1
  44. package/src/duckdb/src/common/box_renderer.cpp +109 -23
  45. package/src/duckdb/src/common/enums/expression_type.cpp +8 -222
  46. package/src/duckdb/src/common/enums/join_type.cpp +3 -22
  47. package/src/duckdb/src/common/enums/logical_operator_type.cpp +2 -0
  48. package/src/duckdb/src/common/enums/statement_type.cpp +2 -0
  49. package/src/duckdb/src/common/exception.cpp +15 -1
  50. package/src/duckdb/src/common/field_writer.cpp +1 -0
  51. package/src/duckdb/src/common/hive_partitioning.cpp +3 -1
  52. package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
  53. package/src/duckdb/src/common/preserved_error.cpp +7 -5
  54. package/src/duckdb/src/common/progress_bar/progress_bar.cpp +7 -0
  55. package/src/duckdb/src/common/serializer/buffered_deserializer.cpp +4 -0
  56. package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +15 -2
  57. package/src/duckdb/src/common/serializer/enum_serializer.cpp +1176 -0
  58. package/src/duckdb/src/common/sort/comparators.cpp +14 -5
  59. package/src/duckdb/src/common/sort/sort_state.cpp +5 -7
  60. package/src/duckdb/src/common/sort/sorted_block.cpp +0 -1
  61. package/src/duckdb/src/common/string_util.cpp +4 -1
  62. package/src/duckdb/src/common/types/bit.cpp +166 -87
  63. package/src/duckdb/src/common/types/blob.cpp +1 -1
  64. package/src/duckdb/src/common/types/chunk_collection.cpp +2 -2
  65. package/src/duckdb/src/common/types/column_data_collection.cpp +39 -2
  66. package/src/duckdb/src/common/types/column_data_collection_segment.cpp +11 -6
  67. package/src/duckdb/src/common/types/data_chunk.cpp +1 -1
  68. package/src/duckdb/src/common/types/interval.cpp +0 -41
  69. package/src/duckdb/src/common/types/list_segment.cpp +658 -0
  70. package/src/duckdb/src/common/types/string_heap.cpp +1 -1
  71. package/src/duckdb/src/common/types/string_type.cpp +1 -1
  72. package/src/duckdb/src/common/types/time.cpp +13 -0
  73. package/src/duckdb/src/common/types/value.cpp +320 -154
  74. package/src/duckdb/src/common/types/vector.cpp +156 -128
  75. package/src/duckdb/src/common/types.cpp +313 -153
  76. package/src/duckdb/src/common/value_operations/comparison_operations.cpp +14 -22
  77. package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +10 -10
  78. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +11 -10
  79. package/src/duckdb/src/common/vector_operations/vector_cast.cpp +2 -1
  80. package/src/duckdb/src/execution/aggregate_hashtable.cpp +10 -5
  81. package/src/duckdb/src/execution/column_binding_resolver.cpp +21 -5
  82. package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +2 -1
  83. package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +2 -2
  84. package/src/duckdb/src/execution/index/art/art.cpp +19 -5
  85. package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +1 -1
  86. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +4 -5
  87. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +117 -26
  88. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +3 -0
  89. package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +5 -3
  90. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +64 -17
  91. package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +2 -0
  92. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -2
  93. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +13 -4
  94. package/src/duckdb/src/execution/operator/join/physical_join.cpp +0 -3
  95. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +6 -11
  96. package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +3 -1
  97. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +11 -4
  98. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +24 -19
  99. package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +3 -0
  100. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -1
  101. package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +2 -2
  102. package/src/duckdb/src/execution/operator/persistent/physical_delete.cpp +1 -3
  103. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -0
  104. package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +34 -0
  105. package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +20 -5
  106. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +20 -40
  107. package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +0 -4
  108. package/src/duckdb/src/execution/partitionable_hashtable.cpp +14 -2
  109. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +22 -16
  110. package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +97 -0
  111. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +95 -47
  112. package/src/duckdb/src/execution/physical_plan/plan_create_index.cpp +2 -1
  113. package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +5 -8
  114. package/src/duckdb/src/execution/physical_plan/plan_positional_join.cpp +14 -5
  115. package/src/duckdb/src/execution/physical_plan_generator.cpp +3 -0
  116. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +1 -0
  117. package/src/duckdb/src/execution/window_segment_tree.cpp +173 -1
  118. package/src/duckdb/src/function/aggregate/algebraic/avg.cpp +0 -6
  119. package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +99 -95
  120. package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +269 -0
  121. package/src/duckdb/src/function/aggregate/distributive/bool.cpp +2 -0
  122. package/src/duckdb/src/function/aggregate/distributive/count.cpp +3 -4
  123. package/src/duckdb/src/function/aggregate/distributive/first.cpp +1 -0
  124. package/src/duckdb/src/function/aggregate/distributive/minmax.cpp +2 -0
  125. package/src/duckdb/src/function/aggregate/distributive/sum.cpp +19 -16
  126. package/src/duckdb/src/function/aggregate/distributive_functions.cpp +1 -0
  127. package/src/duckdb/src/function/aggregate/holistic/approximate_quantile.cpp +5 -2
  128. package/src/duckdb/src/function/aggregate/holistic/mode.cpp +1 -1
  129. package/src/duckdb/src/function/aggregate/holistic/quantile.cpp +16 -1
  130. package/src/duckdb/src/function/aggregate/nested/list.cpp +6 -712
  131. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +58 -16
  132. package/src/duckdb/src/function/cast/bit_cast.cpp +0 -2
  133. package/src/duckdb/src/function/cast/blob_cast.cpp +0 -1
  134. package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
  135. package/src/duckdb/src/function/cast/enum_casts.cpp +25 -3
  136. package/src/duckdb/src/function/cast/list_casts.cpp +17 -4
  137. package/src/duckdb/src/function/cast/map_cast.cpp +5 -2
  138. package/src/duckdb/src/function/cast/string_cast.cpp +36 -10
  139. package/src/duckdb/src/function/cast/struct_cast.cpp +24 -4
  140. package/src/duckdb/src/function/cast/time_casts.cpp +2 -2
  141. package/src/duckdb/src/function/cast/union_casts.cpp +33 -7
  142. package/src/duckdb/src/function/function_binder.cpp +1 -8
  143. package/src/duckdb/src/function/scalar/bit/bitstring.cpp +100 -0
  144. package/src/duckdb/src/function/scalar/date/current.cpp +0 -2
  145. package/src/duckdb/src/function/scalar/date/date_diff.cpp +0 -1
  146. package/src/duckdb/src/function/scalar/date/date_part.cpp +18 -26
  147. package/src/duckdb/src/function/scalar/date/date_sub.cpp +0 -1
  148. package/src/duckdb/src/function/scalar/date/date_trunc.cpp +10 -14
  149. package/src/duckdb/src/function/scalar/generic/stats.cpp +2 -4
  150. package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +4 -146
  151. package/src/duckdb/src/function/scalar/list/flatten.cpp +5 -12
  152. package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +1 -1
  153. package/src/duckdb/src/function/scalar/list/list_concat.cpp +8 -12
  154. package/src/duckdb/src/function/scalar/list/list_extract.cpp +5 -12
  155. package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +7 -3
  156. package/src/duckdb/src/function/scalar/list/list_sort.cpp +25 -18
  157. package/src/duckdb/src/function/scalar/list/list_value.cpp +6 -10
  158. package/src/duckdb/src/function/scalar/map/map.cpp +47 -1
  159. package/src/duckdb/src/function/scalar/map/map_entries.cpp +61 -0
  160. package/src/duckdb/src/function/scalar/map/map_extract.cpp +68 -26
  161. package/src/duckdb/src/function/scalar/map/map_keys_values.cpp +97 -0
  162. package/src/duckdb/src/function/scalar/math/numeric.cpp +101 -17
  163. package/src/duckdb/src/function/scalar/math_functions.cpp +3 -0
  164. package/src/duckdb/src/function/scalar/nested_functions.cpp +3 -0
  165. package/src/duckdb/src/function/scalar/operators/add.cpp +0 -9
  166. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +29 -48
  167. package/src/duckdb/src/function/scalar/operators/bitwise.cpp +0 -63
  168. package/src/duckdb/src/function/scalar/operators/multiply.cpp +5 -6
  169. package/src/duckdb/src/function/scalar/operators/subtract.cpp +0 -6
  170. package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -6
  171. package/src/duckdb/src/function/scalar/string/hex.cpp +201 -0
  172. package/src/duckdb/src/function/scalar/string/instr.cpp +2 -6
  173. package/src/duckdb/src/function/scalar/string/length.cpp +2 -6
  174. package/src/duckdb/src/function/scalar/string/like.cpp +2 -6
  175. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +243 -0
  176. package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +79 -0
  177. package/src/duckdb/src/function/scalar/string/regexp.cpp +21 -80
  178. package/src/duckdb/src/function/scalar/string/substring.cpp +2 -6
  179. package/src/duckdb/src/function/scalar/string_functions.cpp +2 -0
  180. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +5 -10
  181. package/src/duckdb/src/function/scalar/struct/struct_insert.cpp +11 -14
  182. package/src/duckdb/src/function/scalar/struct/struct_pack.cpp +6 -7
  183. package/src/duckdb/src/function/table/arrow.cpp +5 -2
  184. package/src/duckdb/src/function/table/arrow_conversion.cpp +25 -1
  185. package/src/duckdb/src/function/table/checkpoint.cpp +5 -1
  186. package/src/duckdb/src/function/table/read_csv.cpp +60 -0
  187. package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +2 -2
  188. package/src/duckdb/src/function/table/system/test_all_types.cpp +2 -2
  189. package/src/duckdb/src/function/table/table_scan.cpp +9 -12
  190. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  191. package/src/duckdb/src/function/table_function.cpp +30 -11
  192. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +6 -0
  193. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +1 -1
  194. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +6 -8
  195. package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +3 -0
  196. package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +2 -1
  197. package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +8 -2
  198. package/src/duckdb/src/include/duckdb/common/constants.hpp +0 -19
  199. package/src/duckdb/src/include/duckdb/common/enums/aggregate_handling.hpp +2 -0
  200. package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -3
  201. package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +7 -4
  202. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +1 -0
  203. package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +2 -0
  204. package/src/duckdb/src/include/duckdb/common/enums/set_operation_type.hpp +2 -1
  205. package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +2 -1
  206. package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +2 -1
  207. package/src/duckdb/src/include/duckdb/common/exception.hpp +69 -2
  208. package/src/duckdb/src/include/duckdb/common/field_writer.hpp +12 -4
  209. package/src/duckdb/src/include/duckdb/common/helper.hpp +1 -1
  210. package/src/duckdb/src/include/duckdb/common/{http_stats.hpp → http_state.hpp} +18 -4
  211. package/src/duckdb/src/include/duckdb/common/operator/comparison_operators.hpp +45 -149
  212. package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +2 -0
  213. package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +45 -0
  214. package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +6 -1
  215. package/src/duckdb/src/include/duckdb/common/progress_bar/progress_bar.hpp +2 -0
  216. package/src/duckdb/src/include/duckdb/common/serializer/buffered_deserializer.hpp +4 -2
  217. package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +8 -2
  218. package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +113 -0
  219. package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +336 -0
  220. package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +268 -0
  221. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +126 -0
  222. package/src/duckdb/src/include/duckdb/common/serializer.hpp +13 -0
  223. package/src/duckdb/src/include/duckdb/common/string_util.hpp +25 -0
  224. package/src/duckdb/src/include/duckdb/common/types/bit.hpp +12 -7
  225. package/src/duckdb/src/include/duckdb/common/types/interval.hpp +39 -3
  226. package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +70 -0
  227. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +73 -3
  228. package/src/duckdb/src/include/duckdb/common/types/time.hpp +3 -0
  229. package/src/duckdb/src/include/duckdb/common/types/value.hpp +17 -48
  230. package/src/duckdb/src/include/duckdb/common/types/value_map.hpp +1 -1
  231. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -1
  232. package/src/duckdb/src/include/duckdb/common/types.hpp +45 -8
  233. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +2 -2
  234. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +1 -0
  235. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -14
  236. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_perfecthash_aggregate.hpp +1 -1
  237. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_cross_product.hpp +2 -0
  238. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_file_handle.hpp +1 -0
  239. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +10 -0
  240. package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_projection.hpp +5 -0
  241. package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +3 -0
  242. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +1 -3
  243. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +54 -0
  244. package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +5 -0
  245. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +18 -6
  246. package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +84 -0
  247. package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +2 -2
  248. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +28 -64
  249. package/src/duckdb/src/include/duckdb/function/function_binder.hpp +3 -6
  250. package/src/duckdb/src/include/duckdb/function/scalar/bit_functions.hpp +4 -0
  251. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +138 -0
  252. package/src/duckdb/src/include/duckdb/function/scalar/math_functions.hpp +8 -0
  253. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +59 -0
  254. package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
  255. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +4 -0
  256. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
  257. package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +12 -1
  258. package/src/duckdb/src/include/duckdb/function/table_function.hpp +10 -0
  259. package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -0
  260. package/src/duckdb/src/include/duckdb/main/client_config.hpp +2 -0
  261. package/src/duckdb/src/include/duckdb/main/client_data.hpp +3 -3
  262. package/src/duckdb/src/include/duckdb/main/config.hpp +3 -0
  263. package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +2 -0
  264. package/src/duckdb/src/include/duckdb/main/database.hpp +1 -0
  265. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +2 -0
  266. package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +2 -0
  267. package/src/duckdb/src/include/duckdb/main/relation/explain_relation.hpp +2 -1
  268. package/src/duckdb/src/include/duckdb/main/relation.hpp +2 -1
  269. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
  270. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  271. package/src/duckdb/src/include/duckdb/optimizer/rule/list.hpp +1 -0
  272. package/src/duckdb/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp +24 -0
  273. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +4 -0
  274. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
  275. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
  276. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +5 -0
  277. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -0
  278. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -0
  279. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -0
  280. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -0
  281. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -0
  282. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
  283. package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
  284. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +4 -2
  285. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -0
  286. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -0
  287. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -0
  288. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -0
  289. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +4 -2
  290. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -0
  291. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +5 -0
  292. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +5 -1
  293. package/src/duckdb/src/include/duckdb/parser/parsed_data/{alter_function_info.hpp → alter_scalar_function_info.hpp} +13 -13
  294. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +47 -0
  295. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +6 -0
  296. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_function_info.hpp +2 -1
  297. package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -0
  298. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -0
  299. package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
  300. package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +5 -0
  301. package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
  302. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +13 -2
  303. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +24 -1
  304. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -1
  305. package/src/duckdb/src/include/duckdb/parser/statement/multi_statement.hpp +28 -0
  306. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +6 -1
  307. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +4 -0
  308. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -0
  309. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
  310. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
  311. package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
  312. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +87 -0
  313. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
  314. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
  315. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -1
  316. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -0
  317. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +33 -0
  318. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -0
  319. package/src/duckdb/src/include/duckdb/planner/binder.hpp +15 -4
  320. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +3 -0
  321. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +3 -0
  322. package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +64 -0
  323. package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -2
  324. package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +4 -1
  325. package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +2 -2
  326. package/src/duckdb/src/include/duckdb/planner/expression_binder/select_binder.hpp +9 -38
  327. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
  328. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
  329. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
  330. package/src/duckdb/src/include/duckdb/planner/operator/logical_asof_join.hpp +22 -0
  331. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -2
  332. package/src/duckdb/src/include/duckdb/planner/operator/logical_distinct.hpp +3 -0
  333. package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +8 -2
  334. package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +2 -0
  335. package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +76 -44
  336. package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -2
  337. package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +1 -1
  338. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
  339. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
  340. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +2 -1
  341. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
  342. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
  343. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +2 -1
  344. package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +4 -3
  345. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +4 -3
  346. package/src/duckdb/src/include/duckdb/storage/index.hpp +5 -4
  347. package/src/duckdb/src/include/duckdb/storage/meta_block_reader.hpp +7 -0
  348. package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +93 -29
  349. package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +22 -3
  350. package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +8 -6
  351. package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +41 -0
  352. package/src/duckdb/src/include/duckdb/storage/statistics/node_statistics.hpp +26 -0
  353. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +114 -0
  354. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +62 -0
  355. package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -7
  356. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +74 -0
  357. package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +42 -0
  358. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +2 -3
  359. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
  360. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +21 -7
  361. package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +3 -2
  362. package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +5 -6
  363. package/src/duckdb/src/include/duckdb/storage/table/column_segment_tree.hpp +18 -0
  364. package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
  365. package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +6 -3
  366. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +41 -45
  367. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +23 -7
  368. package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +35 -0
  369. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +21 -29
  370. package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +6 -6
  371. package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +281 -26
  372. package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +0 -4
  373. package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -0
  374. package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +0 -1
  375. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +1 -1
  376. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +6 -3
  377. package/src/duckdb/src/include/duckdb.h +71 -2
  378. package/src/duckdb/src/include/duckdb.hpp +0 -1
  379. package/src/duckdb/src/main/capi/pending-c.cpp +16 -3
  380. package/src/duckdb/src/main/capi/result-c.cpp +27 -1
  381. package/src/duckdb/src/main/capi/stream-c.cpp +25 -0
  382. package/src/duckdb/src/main/capi/table_function-c.cpp +23 -0
  383. package/src/duckdb/src/main/client_context.cpp +38 -34
  384. package/src/duckdb/src/main/client_data.cpp +7 -6
  385. package/src/duckdb/src/main/config.cpp +70 -1
  386. package/src/duckdb/src/main/database.cpp +19 -2
  387. package/src/duckdb/src/main/extension/extension_install.cpp +7 -2
  388. package/src/duckdb/src/main/prepared_statement.cpp +4 -0
  389. package/src/duckdb/src/main/query_profiler.cpp +17 -15
  390. package/src/duckdb/src/main/relation/explain_relation.cpp +3 -3
  391. package/src/duckdb/src/main/relation.cpp +3 -2
  392. package/src/duckdb/src/main/settings/settings.cpp +20 -8
  393. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -0
  394. package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
  395. package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -6
  396. package/src/duckdb/src/optimizer/filter_pullup.cpp +3 -1
  397. package/src/duckdb/src/optimizer/filter_pushdown.cpp +14 -8
  398. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +107 -71
  399. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +32 -12
  400. package/src/duckdb/src/optimizer/optimizer.cpp +1 -0
  401. package/src/duckdb/src/optimizer/pullup/pullup_from_left.cpp +2 -2
  402. package/src/duckdb/src/optimizer/pushdown/pushdown_aggregate.cpp +33 -5
  403. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +1 -1
  404. package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +3 -0
  405. package/src/duckdb/src/optimizer/pushdown/pushdown_left_join.cpp +5 -12
  406. package/src/duckdb/src/optimizer/pushdown/pushdown_mark_join.cpp +2 -2
  407. package/src/duckdb/src/optimizer/pushdown/pushdown_single_join.cpp +1 -1
  408. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +1 -0
  409. package/src/duckdb/src/optimizer/rule/move_constants.cpp +10 -4
  410. package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +30 -0
  411. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +9 -2
  412. package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +9 -3
  413. package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +6 -7
  414. package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +14 -11
  415. package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
  416. package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +13 -15
  417. package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +0 -1
  418. package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +3 -75
  419. package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +7 -2
  420. package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -0
  421. package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +2 -3
  422. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +29 -32
  423. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +5 -5
  424. package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +3 -3
  425. package/src/duckdb/src/optimizer/statistics_propagator.cpp +2 -1
  426. package/src/duckdb/src/optimizer/unnest_rewriter.cpp +2 -2
  427. package/src/duckdb/src/parallel/meta_pipeline.cpp +0 -7
  428. package/src/duckdb/src/parser/common_table_expression_info.cpp +19 -0
  429. package/src/duckdb/src/parser/expression/between_expression.cpp +17 -0
  430. package/src/duckdb/src/parser/expression/case_expression.cpp +28 -0
  431. package/src/duckdb/src/parser/expression/cast_expression.cpp +17 -0
  432. package/src/duckdb/src/parser/expression/collate_expression.cpp +16 -0
  433. package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -0
  434. package/src/duckdb/src/parser/expression/comparison_expression.cpp +16 -0
  435. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +17 -0
  436. package/src/duckdb/src/parser/expression/constant_expression.cpp +14 -0
  437. package/src/duckdb/src/parser/expression/default_expression.cpp +7 -0
  438. package/src/duckdb/src/parser/expression/function_expression.cpp +35 -0
  439. package/src/duckdb/src/parser/expression/lambda_expression.cpp +16 -0
  440. package/src/duckdb/src/parser/expression/operator_expression.cpp +15 -0
  441. package/src/duckdb/src/parser/expression/parameter_expression.cpp +15 -0
  442. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +14 -0
  443. package/src/duckdb/src/parser/expression/star_expression.cpp +26 -6
  444. package/src/duckdb/src/parser/expression/subquery_expression.cpp +20 -0
  445. package/src/duckdb/src/parser/expression/window_expression.cpp +43 -0
  446. package/src/duckdb/src/parser/parsed_data/alter_info.cpp +7 -3
  447. package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +56 -0
  448. package/src/duckdb/src/parser/parsed_data/alter_table_function_info.cpp +51 -0
  449. package/src/duckdb/src/parser/parsed_data/create_scalar_function_info.cpp +3 -2
  450. package/src/duckdb/src/parser/parsed_data/create_table_function_info.cpp +6 -0
  451. package/src/duckdb/src/parser/parsed_data/sample_options.cpp +22 -10
  452. package/src/duckdb/src/parser/parsed_expression.cpp +72 -0
  453. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +15 -1
  454. package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +21 -0
  455. package/src/duckdb/src/parser/query_node/select_node.cpp +31 -0
  456. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +17 -0
  457. package/src/duckdb/src/parser/query_node.cpp +51 -1
  458. package/src/duckdb/src/parser/result_modifier.cpp +78 -0
  459. package/src/duckdb/src/parser/statement/multi_statement.cpp +18 -0
  460. package/src/duckdb/src/parser/statement/select_statement.cpp +12 -0
  461. package/src/duckdb/src/parser/tableref/basetableref.cpp +21 -0
  462. package/src/duckdb/src/parser/tableref/emptytableref.cpp +4 -0
  463. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +17 -0
  464. package/src/duckdb/src/parser/tableref/joinref.cpp +29 -0
  465. package/src/duckdb/src/parser/tableref/pivotref.cpp +373 -0
  466. package/src/duckdb/src/parser/tableref/subqueryref.cpp +15 -0
  467. package/src/duckdb/src/parser/tableref/table_function.cpp +17 -0
  468. package/src/duckdb/src/parser/tableref.cpp +49 -0
  469. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +11 -0
  470. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -1
  471. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +17 -2
  472. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +85 -42
  473. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
  474. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +1 -1
  475. package/src/duckdb/src/parser/transform/helpers/transform_alias.cpp +12 -6
  476. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +24 -0
  477. package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +7 -0
  478. package/src/duckdb/src/parser/transform/helpers/transform_orderby.cpp +0 -7
  479. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +3 -2
  480. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +4 -0
  481. package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +4 -0
  482. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +179 -0
  483. package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +3 -4
  484. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -0
  485. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +2 -3
  486. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +12 -1
  487. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +121 -0
  488. package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +2 -0
  489. package/src/duckdb/src/parser/transformer.cpp +15 -3
  490. package/src/duckdb/src/planner/bind_context.cpp +18 -25
  491. package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +9 -7
  492. package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +4 -3
  493. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +23 -12
  494. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +3 -2
  495. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +176 -0
  496. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -0
  497. package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +163 -24
  498. package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +2 -2
  499. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +109 -94
  500. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +11 -0
  501. package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +9 -4
  502. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +5 -3
  503. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +3 -2
  504. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +10 -1
  505. package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
  506. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +12 -8
  507. package/src/duckdb/src/planner/binder/statement/bind_logical_plan.cpp +17 -0
  508. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +4 -2
  509. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +19 -3
  510. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +366 -0
  511. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +11 -1
  512. package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -0
  513. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +61 -13
  514. package/src/duckdb/src/planner/binder.cpp +19 -24
  515. package/src/duckdb/src/planner/bound_result_modifier.cpp +27 -1
  516. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +9 -2
  517. package/src/duckdb/src/planner/expression/bound_expression.cpp +4 -0
  518. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +1 -1
  519. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +146 -0
  520. package/src/duckdb/src/planner/expression_binder/having_binder.cpp +6 -3
  521. package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -3
  522. package/src/duckdb/src/planner/expression_binder/select_binder.cpp +1 -132
  523. package/src/duckdb/src/planner/expression_binder.cpp +10 -3
  524. package/src/duckdb/src/planner/expression_iterator.cpp +17 -10
  525. package/src/duckdb/src/planner/filter/constant_filter.cpp +4 -6
  526. package/src/duckdb/src/planner/logical_operator.cpp +7 -2
  527. package/src/duckdb/src/planner/logical_operator_visitor.cpp +6 -0
  528. package/src/duckdb/src/planner/operator/logical_asof_join.cpp +8 -0
  529. package/src/duckdb/src/planner/operator/logical_distinct.cpp +3 -0
  530. package/src/duckdb/src/planner/planner.cpp +2 -1
  531. package/src/duckdb/src/planner/pragma_handler.cpp +10 -2
  532. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +3 -1
  533. package/src/duckdb/src/storage/buffer_manager.cpp +44 -46
  534. package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +1 -1
  535. package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +4 -15
  536. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +10 -4
  537. package/src/duckdb/src/storage/checkpoint_manager.cpp +9 -3
  538. package/src/duckdb/src/storage/compression/bitpacking.cpp +29 -25
  539. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +45 -46
  540. package/src/duckdb/src/storage/compression/numeric_constant.cpp +10 -11
  541. package/src/duckdb/src/storage/compression/patas.cpp +1 -1
  542. package/src/duckdb/src/storage/compression/rle.cpp +20 -15
  543. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +6 -6
  544. package/src/duckdb/src/storage/data_table.cpp +23 -23
  545. package/src/duckdb/src/storage/index.cpp +12 -1
  546. package/src/duckdb/src/storage/local_storage.cpp +27 -23
  547. package/src/duckdb/src/storage/meta_block_reader.cpp +22 -0
  548. package/src/duckdb/src/storage/statistics/base_statistics.cpp +373 -128
  549. package/src/duckdb/src/storage/statistics/column_statistics.cpp +57 -3
  550. package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +8 -9
  551. package/src/duckdb/src/storage/statistics/list_stats.cpp +121 -0
  552. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +591 -0
  553. package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +65 -0
  554. package/src/duckdb/src/storage/statistics/segment_statistics.cpp +2 -11
  555. package/src/duckdb/src/storage/statistics/string_stats.cpp +273 -0
  556. package/src/duckdb/src/storage/statistics/struct_stats.cpp +133 -0
  557. package/src/duckdb/src/storage/storage_info.cpp +2 -2
  558. package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +4 -10
  559. package/src/duckdb/src/storage/table/column_data.cpp +118 -62
  560. package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +10 -9
  561. package/src/duckdb/src/storage/table/column_segment.cpp +30 -45
  562. package/src/duckdb/src/storage/table/list_column_data.cpp +50 -71
  563. package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
  564. package/src/duckdb/src/storage/table/row_group.cpp +213 -143
  565. package/src/duckdb/src/storage/table/row_group_collection.cpp +151 -105
  566. package/src/duckdb/src/storage/table/scan_state.cpp +45 -33
  567. package/src/duckdb/src/storage/table/standard_column_data.cpp +11 -12
  568. package/src/duckdb/src/storage/table/struct_column_data.cpp +27 -34
  569. package/src/duckdb/src/storage/table/table_statistics.cpp +27 -7
  570. package/src/duckdb/src/storage/table/update_segment.cpp +23 -18
  571. package/src/duckdb/src/storage/wal_replay.cpp +8 -5
  572. package/src/duckdb/src/storage/write_ahead_log.cpp +2 -2
  573. package/src/duckdb/src/transaction/commit_state.cpp +11 -7
  574. package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
  575. package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +35 -0
  576. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +36 -2
  577. package/src/duckdb/third_party/libpg_query/include/nodes/primnodes.hpp +3 -3
  578. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +1022 -530
  579. package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +8 -0
  580. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24462 -22828
  581. package/src/duckdb/third_party/re2/re2/re2.cc +9 -0
  582. package/src/duckdb/third_party/re2/re2/re2.h +2 -0
  583. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +4 -4
  584. package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
  585. package/src/duckdb/ub_src_common_serializer.cpp +2 -0
  586. package/src/duckdb/ub_src_common_types.cpp +2 -0
  587. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  588. package/src/duckdb/ub_src_function_aggregate_distributive.cpp +2 -0
  589. package/src/duckdb/ub_src_function_scalar_bit.cpp +2 -0
  590. package/src/duckdb/ub_src_function_scalar_map.cpp +4 -0
  591. package/src/duckdb/ub_src_function_scalar_string.cpp +2 -0
  592. package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
  593. package/src/duckdb/ub_src_main_capi.cpp +2 -0
  594. package/src/duckdb/ub_src_optimizer_rule.cpp +2 -0
  595. package/src/duckdb/ub_src_parser.cpp +2 -0
  596. package/src/duckdb/ub_src_parser_parsed_data.cpp +4 -2
  597. package/src/duckdb/ub_src_parser_statement.cpp +2 -0
  598. package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
  599. package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
  600. package/src/duckdb/ub_src_parser_transform_tableref.cpp +2 -0
  601. package/src/duckdb/ub_src_planner_binder_expression.cpp +2 -0
  602. package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
  603. package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
  604. package/src/duckdb/ub_src_planner_operator.cpp +2 -0
  605. package/src/duckdb/ub_src_storage_statistics.cpp +6 -6
  606. package/src/duckdb/ub_src_storage_table.cpp +0 -2
  607. package/src/duckdb_node.hpp +2 -1
  608. package/src/statement.cpp +5 -5
  609. package/src/utils.cpp +27 -2
  610. package/test/extension.test.ts +44 -26
  611. package/test/syntax_error.test.ts +3 -1
  612. package/filelist.cache +0 -0
  613. package/src/duckdb/src/include/duckdb/main/loadable_extension.hpp +0 -59
  614. package/src/duckdb/src/include/duckdb/storage/statistics/list_statistics.hpp +0 -36
  615. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_statistics.hpp +0 -75
  616. package/src/duckdb/src/include/duckdb/storage/statistics/string_statistics.hpp +0 -49
  617. package/src/duckdb/src/include/duckdb/storage/statistics/struct_statistics.hpp +0 -36
  618. package/src/duckdb/src/include/duckdb/storage/statistics/validity_statistics.hpp +0 -45
  619. package/src/duckdb/src/parser/parsed_data/alter_function_info.cpp +0 -55
  620. package/src/duckdb/src/storage/statistics/list_statistics.cpp +0 -94
  621. package/src/duckdb/src/storage/statistics/numeric_statistics.cpp +0 -307
  622. package/src/duckdb/src/storage/statistics/string_statistics.cpp +0 -220
  623. package/src/duckdb/src/storage/statistics/struct_statistics.cpp +0 -108
  624. package/src/duckdb/src/storage/statistics/validity_statistics.cpp +0 -91
  625. package/src/duckdb/src/storage/table/segment_tree.cpp +0 -179
@@ -65,33 +65,33 @@ inline bool ValuePositionComparator::Final<duckdb::NotEquals>(const Value &lhs,
65
65
  // Non-strict inequalities must use strict comparisons for Definite
66
66
  template <>
67
67
  bool ValuePositionComparator::Definite<duckdb::LessThanEquals>(const Value &lhs, const Value &rhs) {
68
- return ValueOperations::DistinctLessThan(lhs, rhs);
68
+ return !ValuePositionComparator::Definite<duckdb::GreaterThan>(lhs, rhs);
69
+ }
70
+
71
+ template <>
72
+ bool ValuePositionComparator::Final<duckdb::GreaterThan>(const Value &lhs, const Value &rhs) {
73
+ return ValueOperations::DistinctGreaterThan(lhs, rhs);
69
74
  }
70
75
 
71
76
  template <>
72
77
  bool ValuePositionComparator::Final<duckdb::LessThanEquals>(const Value &lhs, const Value &rhs) {
73
- return ValueOperations::DistinctLessThanEquals(lhs, rhs);
78
+ return !ValuePositionComparator::Final<duckdb::GreaterThan>(lhs, rhs);
74
79
  }
75
80
 
76
81
  template <>
77
82
  bool ValuePositionComparator::Definite<duckdb::GreaterThanEquals>(const Value &lhs, const Value &rhs) {
78
- return ValueOperations::DistinctGreaterThan(lhs, rhs);
83
+ return !ValuePositionComparator::Definite<duckdb::GreaterThan>(rhs, lhs);
79
84
  }
80
85
 
81
86
  template <>
82
87
  bool ValuePositionComparator::Final<duckdb::GreaterThanEquals>(const Value &lhs, const Value &rhs) {
83
- return ValueOperations::DistinctGreaterThanEquals(lhs, rhs);
88
+ return !ValuePositionComparator::Final<duckdb::GreaterThan>(rhs, lhs);
84
89
  }
85
90
 
86
91
  // Strict inequalities just use strict for both Definite and Final
87
92
  template <>
88
93
  bool ValuePositionComparator::Final<duckdb::LessThan>(const Value &lhs, const Value &rhs) {
89
- return ValueOperations::DistinctLessThan(lhs, rhs);
90
- }
91
-
92
- template <>
93
- bool ValuePositionComparator::Final<duckdb::GreaterThan>(const Value &lhs, const Value &rhs) {
94
- return ValueOperations::DistinctGreaterThan(lhs, rhs);
94
+ return ValuePositionComparator::Final<duckdb::GreaterThan>(rhs, lhs);
95
95
  }
96
96
 
97
97
  template <class OP>
@@ -194,10 +194,7 @@ bool ValueOperations::GreaterThan(const Value &left, const Value &right) {
194
194
  }
195
195
 
196
196
  bool ValueOperations::GreaterThanEquals(const Value &left, const Value &right) {
197
- if (left.IsNull() || right.IsNull()) {
198
- throw InternalException("Comparison on NULL values");
199
- }
200
- return TemplatedBooleanOperation<duckdb::GreaterThanEquals>(left, right);
197
+ return !ValueOperations::GreaterThan(right, left);
201
198
  }
202
199
 
203
200
  bool ValueOperations::LessThan(const Value &left, const Value &right) {
@@ -205,7 +202,7 @@ bool ValueOperations::LessThan(const Value &left, const Value &right) {
205
202
  }
206
203
 
207
204
  bool ValueOperations::LessThanEquals(const Value &left, const Value &right) {
208
- return ValueOperations::GreaterThanEquals(right, left);
205
+ return !ValueOperations::GreaterThan(left, right);
209
206
  }
210
207
 
211
208
  bool ValueOperations::NotDistinctFrom(const Value &left, const Value &right) {
@@ -234,12 +231,7 @@ bool ValueOperations::DistinctGreaterThan(const Value &left, const Value &right)
234
231
  }
235
232
 
236
233
  bool ValueOperations::DistinctGreaterThanEquals(const Value &left, const Value &right) {
237
- if (left.IsNull()) {
238
- return true;
239
- } else if (right.IsNull()) {
240
- return false;
241
- }
242
- return TemplatedBooleanOperation<duckdb::GreaterThanEquals>(left, right);
234
+ return !ValueOperations::DistinctGreaterThan(right, left);
243
235
  }
244
236
 
245
237
  bool ValueOperations::DistinctLessThan(const Value &left, const Value &right) {
@@ -247,7 +239,7 @@ bool ValueOperations::DistinctLessThan(const Value &left, const Value &right) {
247
239
  }
248
240
 
249
241
  bool ValueOperations::DistinctLessThanEquals(const Value &left, const Value &right) {
250
- return ValueOperations::DistinctGreaterThanEquals(right, left);
242
+ return !ValueOperations::DistinctGreaterThan(left, right);
251
243
  }
252
244
 
253
245
  } // namespace duckdb
@@ -22,12 +22,12 @@ bool EqualsFloat(T left, T right) {
22
22
  }
23
23
 
24
24
  template <>
25
- bool Equals::Operation(float left, float right) {
25
+ bool Equals::Operation(const float &left, const float &right) {
26
26
  return EqualsFloat<float>(left, right);
27
27
  }
28
28
 
29
29
  template <>
30
- bool Equals::Operation(double left, double right) {
30
+ bool Equals::Operation(const double &left, const double &right) {
31
31
  return EqualsFloat<double>(left, right);
32
32
  }
33
33
 
@@ -49,12 +49,12 @@ bool GreaterThanFloat(T left, T right) {
49
49
  }
50
50
 
51
51
  template <>
52
- bool GreaterThan::Operation(float left, float right) {
52
+ bool GreaterThan::Operation(const float &left, const float &right) {
53
53
  return GreaterThanFloat<float>(left, right);
54
54
  }
55
55
 
56
56
  template <>
57
- bool GreaterThan::Operation(double left, double right) {
57
+ bool GreaterThan::Operation(const double &left, const double &right) {
58
58
  return GreaterThanFloat<double>(left, right);
59
59
  }
60
60
 
@@ -77,12 +77,12 @@ bool GreaterThanEqualsFloat(T left, T right) {
77
77
  }
78
78
 
79
79
  template <>
80
- bool GreaterThanEquals::Operation(float left, float right) {
80
+ bool GreaterThanEquals::Operation(const float &left, const float &right) {
81
81
  return GreaterThanEqualsFloat<float>(left, right);
82
82
  }
83
83
 
84
84
  template <>
85
- bool GreaterThanEquals::Operation(double left, double right) {
85
+ bool GreaterThanEquals::Operation(const double &left, const double &right) {
86
86
  return GreaterThanEqualsFloat<double>(left, right);
87
87
  }
88
88
 
@@ -127,14 +127,14 @@ template <>
127
127
  inline idx_t ComparisonSelector::Select<duckdb::LessThan>(Vector &left, Vector &right, const SelectionVector *sel,
128
128
  idx_t count, SelectionVector *true_sel,
129
129
  SelectionVector *false_sel) {
130
- return VectorOperations::LessThan(left, right, sel, count, true_sel, false_sel);
130
+ return VectorOperations::GreaterThan(right, left, sel, count, true_sel, false_sel);
131
131
  }
132
132
 
133
133
  template <>
134
134
  inline idx_t ComparisonSelector::Select<duckdb::LessThanEquals>(Vector &left, Vector &right, const SelectionVector *sel,
135
135
  idx_t count, SelectionVector *true_sel,
136
136
  SelectionVector *false_sel) {
137
- return VectorOperations::LessThanEquals(left, right, sel, count, true_sel, false_sel);
137
+ return VectorOperations::GreaterThanEquals(right, left, sel, count, true_sel, false_sel);
138
138
  }
139
139
 
140
140
  static void ComparesNotNull(UnifiedVectorFormat &ldata, UnifiedVectorFormat &rdata, ValidityMask &vresult,
@@ -272,7 +272,7 @@ void VectorOperations::GreaterThanEquals(Vector &left, Vector &right, Vector &re
272
272
  }
273
273
 
274
274
  void VectorOperations::LessThanEquals(Vector &left, Vector &right, Vector &result, idx_t count) {
275
- ComparisonExecutor::Execute<duckdb::LessThanEquals>(left, right, result, count);
275
+ ComparisonExecutor::Execute<duckdb::GreaterThanEquals>(right, left, result, count);
276
276
  }
277
277
 
278
278
  void VectorOperations::GreaterThan(Vector &left, Vector &right, Vector &result, idx_t count) {
@@ -280,7 +280,7 @@ void VectorOperations::GreaterThan(Vector &left, Vector &right, Vector &result,
280
280
  }
281
281
 
282
282
  void VectorOperations::LessThan(Vector &left, Vector &right, Vector &result, idx_t count) {
283
- ComparisonExecutor::Execute<duckdb::LessThan>(left, right, result, count);
283
+ ComparisonExecutor::Execute<duckdb::GreaterThan>(right, left, result, count);
284
284
  }
285
285
 
286
286
  } // namespace duckdb
@@ -401,14 +401,14 @@ idx_t PositionComparator::Definite<duckdb::DistinctLessThanEquals>(Vector &left,
401
401
  const SelectionVector &sel, idx_t count,
402
402
  SelectionVector *true_sel,
403
403
  SelectionVector &false_sel) {
404
- return VectorOperations::DistinctLessThan(left, right, &sel, count, true_sel, &false_sel);
404
+ return VectorOperations::DistinctGreaterThan(right, left, &sel, count, true_sel, &false_sel);
405
405
  }
406
406
 
407
407
  template <>
408
408
  idx_t PositionComparator::Final<duckdb::DistinctLessThanEquals>(Vector &left, Vector &right, const SelectionVector &sel,
409
409
  idx_t count, SelectionVector *true_sel,
410
410
  SelectionVector *false_sel) {
411
- return VectorOperations::DistinctLessThanEquals(left, right, &sel, count, true_sel, false_sel);
411
+ return VectorOperations::DistinctGreaterThanEquals(right, left, &sel, count, true_sel, false_sel);
412
412
  }
413
413
 
414
414
  template <>
@@ -432,7 +432,7 @@ template <>
432
432
  idx_t PositionComparator::Final<duckdb::DistinctLessThan>(Vector &left, Vector &right, const SelectionVector &sel,
433
433
  idx_t count, SelectionVector *true_sel,
434
434
  SelectionVector *false_sel) {
435
- return VectorOperations::DistinctLessThan(left, right, &sel, count, true_sel, false_sel);
435
+ return VectorOperations::DistinctGreaterThan(right, left, &sel, count, true_sel, false_sel);
436
436
  }
437
437
 
438
438
  template <>
@@ -869,7 +869,7 @@ idx_t VectorOperations::DistinctFrom(Vector &left, Vector &right, const Selectio
869
869
  // true := A == B with nulls being equal
870
870
  idx_t VectorOperations::NotDistinctFrom(Vector &left, Vector &right, const SelectionVector *sel, idx_t count,
871
871
  SelectionVector *true_sel, SelectionVector *false_sel) {
872
- return TemplatedDistinctSelectOperation<duckdb::NotDistinctFrom>(left, right, sel, count, true_sel, false_sel);
872
+ return count - TemplatedDistinctSelectOperation<duckdb::DistinctFrom>(left, right, sel, count, false_sel, true_sel);
873
873
  }
874
874
 
875
875
  // true := A > B with nulls being maximal
@@ -888,13 +888,13 @@ idx_t VectorOperations::DistinctGreaterThanNullsFirst(Vector &left, Vector &righ
888
888
  // true := A >= B with nulls being maximal
889
889
  idx_t VectorOperations::DistinctGreaterThanEquals(Vector &left, Vector &right, const SelectionVector *sel, idx_t count,
890
890
  SelectionVector *true_sel, SelectionVector *false_sel) {
891
- return TemplatedDistinctSelectOperation<duckdb::DistinctGreaterThanEquals>(left, right, sel, count, true_sel,
892
- false_sel);
891
+ return count -
892
+ TemplatedDistinctSelectOperation<duckdb::DistinctGreaterThan>(right, left, sel, count, false_sel, true_sel);
893
893
  }
894
894
  // true := A < B with nulls being maximal
895
895
  idx_t VectorOperations::DistinctLessThan(Vector &left, Vector &right, const SelectionVector *sel, idx_t count,
896
896
  SelectionVector *true_sel, SelectionVector *false_sel) {
897
- return TemplatedDistinctSelectOperation<duckdb::DistinctLessThan>(left, right, sel, count, true_sel, false_sel);
897
+ return TemplatedDistinctSelectOperation<duckdb::DistinctGreaterThan>(right, left, sel, count, true_sel, false_sel);
898
898
  }
899
899
 
900
900
  // true := A < B with nulls being minimal
@@ -907,8 +907,8 @@ idx_t VectorOperations::DistinctLessThanNullsFirst(Vector &left, Vector &right,
907
907
  // true := A <= B with nulls being maximal
908
908
  idx_t VectorOperations::DistinctLessThanEquals(Vector &left, Vector &right, const SelectionVector *sel, idx_t count,
909
909
  SelectionVector *true_sel, SelectionVector *false_sel) {
910
- return TemplatedDistinctSelectOperation<duckdb::DistinctLessThanEquals>(left, right, sel, count, true_sel,
911
- false_sel);
910
+ return TemplatedDistinctSelectOperation<duckdb::DistinctGreaterThanEquals>(right, left, sel, count, true_sel,
911
+ false_sel);
912
912
  }
913
913
 
914
914
  // true := A != B with nulls being equal, inputs selected
@@ -919,7 +919,8 @@ idx_t VectorOperations::NestedNotEquals(Vector &left, Vector &right, const Selec
919
919
  // true := A == B with nulls being equal, inputs selected
920
920
  idx_t VectorOperations::NestedEquals(Vector &left, Vector &right, const SelectionVector &sel, idx_t count,
921
921
  SelectionVector *true_sel, SelectionVector *false_sel) {
922
- return TemplatedDistinctSelectOperation<duckdb::NotDistinctFrom>(left, right, &sel, count, true_sel, false_sel);
922
+ return count -
923
+ TemplatedDistinctSelectOperation<duckdb::DistinctFrom>(left, right, &sel, count, false_sel, true_sel);
923
924
  }
924
925
 
925
926
  } // namespace duckdb
@@ -11,7 +11,8 @@ bool VectorOperations::TryCast(CastFunctionSet &set, GetCastFunctionInput &input
11
11
  auto cast_function = set.GetCastFunction(source.GetType(), result.GetType(), input);
12
12
  unique_ptr<FunctionLocalState> local_state;
13
13
  if (cast_function.init_local_state) {
14
- local_state = cast_function.init_local_state(*input.context);
14
+ CastLocalStateParameters lparameters(input.context, cast_function.cast_data);
15
+ local_state = cast_function.init_local_state(lparameters);
15
16
  }
16
17
  CastParameters parameters(cast_function.cast_data.get(), strict, error_message, local_state.get());
17
18
  return cast_function.function(source, result, count, parameters);
@@ -155,25 +155,30 @@ void GroupedAggregateHashTable::VerifyInternal() {
155
155
  D_ASSERT(count == entries);
156
156
  }
157
157
 
158
- idx_t GroupedAggregateHashTable::MaxCapacity() {
159
- idx_t max_pages = 0;
160
- idx_t max_tuples = 0;
158
+ idx_t GroupedAggregateHashTable::GetMaxCapacity(HtEntryType entry_type, idx_t tuple_size) {
159
+ idx_t max_pages;
160
+ idx_t max_tuples;
161
161
 
162
162
  switch (entry_type) {
163
163
  case HtEntryType::HT_WIDTH_32:
164
164
  max_pages = NumericLimits<uint8_t>::Maximum();
165
165
  max_tuples = NumericLimits<uint16_t>::Maximum();
166
166
  break;
167
- default:
168
- D_ASSERT(entry_type == HtEntryType::HT_WIDTH_64);
167
+ case HtEntryType::HT_WIDTH_64:
169
168
  max_pages = NumericLimits<uint32_t>::Maximum();
170
169
  max_tuples = NumericLimits<uint16_t>::Maximum();
171
170
  break;
171
+ default:
172
+ throw InternalException("Unsupported hash table width");
172
173
  }
173
174
 
174
175
  return max_pages * MinValue(max_tuples, (idx_t)Storage::BLOCK_SIZE / tuple_size);
175
176
  }
176
177
 
178
+ idx_t GroupedAggregateHashTable::MaxCapacity() {
179
+ return GetMaxCapacity(entry_type, tuple_size);
180
+ }
181
+
177
182
  void GroupedAggregateHashTable::Verify() {
178
183
  #ifdef DEBUG
179
184
  switch (entry_type) {
@@ -1,6 +1,7 @@
1
1
  #include "duckdb/execution/column_binding_resolver.hpp"
2
2
 
3
3
  #include "duckdb/planner/operator/logical_comparison_join.hpp"
4
+ #include "duckdb/planner/operator/logical_any_join.hpp"
4
5
  #include "duckdb/planner/operator/logical_create_index.hpp"
5
6
  #include "duckdb/planner/operator/logical_delim_join.hpp"
6
7
  #include "duckdb/planner/operator/logical_insert.hpp"
@@ -17,7 +18,10 @@ ColumnBindingResolver::ColumnBindingResolver() {
17
18
  }
18
19
 
19
20
  void ColumnBindingResolver::VisitOperator(LogicalOperator &op) {
20
- if (op.type == LogicalOperatorType::LOGICAL_COMPARISON_JOIN || op.type == LogicalOperatorType::LOGICAL_DELIM_JOIN) {
21
+ switch (op.type) {
22
+ case LogicalOperatorType::LOGICAL_ASOF_JOIN:
23
+ case LogicalOperatorType::LOGICAL_COMPARISON_JOIN:
24
+ case LogicalOperatorType::LOGICAL_DELIM_JOIN: {
21
25
  // special case: comparison join
22
26
  auto &comp_join = (LogicalComparisonJoin &)op;
23
27
  // first get the bindings of the LHS and resolve the LHS expressions
@@ -40,27 +44,36 @@ void ColumnBindingResolver::VisitOperator(LogicalOperator &op) {
40
44
  // finally update the bindings with the result bindings of the join
41
45
  bindings = op.GetColumnBindings();
42
46
  return;
43
- } else if (op.type == LogicalOperatorType::LOGICAL_ANY_JOIN) {
47
+ }
48
+ case LogicalOperatorType::LOGICAL_ANY_JOIN: {
44
49
  // ANY join, this join is different because we evaluate the expression on the bindings of BOTH join sides at
45
50
  // once i.e. we set the bindings first to the bindings of the entire join, and then resolve the expressions of
46
51
  // this operator
47
52
  VisitOperatorChildren(op);
48
53
  bindings = op.GetColumnBindings();
54
+ auto &any_join = (LogicalAnyJoin &)op;
55
+ if (any_join.join_type == JoinType::SEMI || any_join.join_type == JoinType::ANTI) {
56
+ auto right_bindings = op.children[1]->GetColumnBindings();
57
+ bindings.insert(bindings.end(), right_bindings.begin(), right_bindings.end());
58
+ }
49
59
  VisitOperatorExpressions(op);
50
60
  return;
51
- } else if (op.type == LogicalOperatorType::LOGICAL_CREATE_INDEX) {
61
+ }
62
+ case LogicalOperatorType::LOGICAL_CREATE_INDEX: {
52
63
  // CREATE INDEX statement, add the columns of the table with table index 0 to the binding set
53
64
  // afterwards bind the expressions of the CREATE INDEX statement
54
65
  auto &create_index = (LogicalCreateIndex &)op;
55
66
  bindings = LogicalOperator::GenerateColumnBindings(0, create_index.table.GetColumns().LogicalColumnCount());
56
67
  VisitOperatorExpressions(op);
57
68
  return;
58
- } else if (op.type == LogicalOperatorType::LOGICAL_GET) {
69
+ }
70
+ case LogicalOperatorType::LOGICAL_GET: {
59
71
  //! We first need to update the current set of bindings and then visit operator expressions
60
72
  bindings = op.GetColumnBindings();
61
73
  VisitOperatorExpressions(op);
62
74
  return;
63
- } else if (op.type == LogicalOperatorType::LOGICAL_INSERT) {
75
+ }
76
+ case LogicalOperatorType::LOGICAL_INSERT: {
64
77
  //! We want to execute the normal path, but also add a dummy 'excluded' binding if there is a
65
78
  // ON CONFLICT DO UPDATE clause
66
79
  auto &insert_op = (LogicalInsert &)op;
@@ -83,6 +96,9 @@ void ColumnBindingResolver::VisitOperator(LogicalOperator &op) {
83
96
  return;
84
97
  }
85
98
  }
99
+ default:
100
+ break;
101
+ }
86
102
  // general case
87
103
  // first visit the children of this operator
88
104
  VisitOperatorChildren(op);
@@ -11,7 +11,8 @@ unique_ptr<ExpressionState> ExpressionExecutor::InitializeState(const BoundCastE
11
11
  result->AddChild(expr.child.get());
12
12
  result->Finalize();
13
13
  if (expr.bound_cast.init_local_state) {
14
- result->local_state = expr.bound_cast.init_local_state(root.executor->GetContext());
14
+ CastLocalStateParameters parameters(root.executor->GetContext(), expr.bound_cast.cast_data);
15
+ result->local_state = expr.bound_cast.init_local_state(parameters);
15
16
  }
16
17
  return std::move(result);
17
18
  }
@@ -266,12 +266,12 @@ idx_t VectorOperations::GreaterThanEquals(Vector &left, Vector &right, const Sel
266
266
 
267
267
  idx_t VectorOperations::LessThan(Vector &left, Vector &right, const SelectionVector *sel, idx_t count,
268
268
  SelectionVector *true_sel, SelectionVector *false_sel) {
269
- return TemplatedSelectOperation<duckdb::LessThan>(left, right, sel, count, true_sel, false_sel);
269
+ return TemplatedSelectOperation<duckdb::GreaterThan>(right, left, sel, count, true_sel, false_sel);
270
270
  }
271
271
 
272
272
  idx_t VectorOperations::LessThanEquals(Vector &left, Vector &right, const SelectionVector *sel, idx_t count,
273
273
  SelectionVector *true_sel, SelectionVector *false_sel) {
274
- return TemplatedSelectOperation<duckdb::LessThanEquals>(left, right, sel, count, true_sel, false_sel);
274
+ return TemplatedSelectOperation<duckdb::GreaterThanEquals>(right, left, sel, count, true_sel, false_sel);
275
275
  }
276
276
 
277
277
  idx_t ExpressionExecutor::Select(const BoundComparisonExpression &expr, ExpressionState *state,
@@ -6,6 +6,7 @@
6
6
  #include "duckdb/storage/arena_allocator.hpp"
7
7
  #include "duckdb/execution/index/art/art_key.hpp"
8
8
  #include "duckdb/common/types/conflict_manager.hpp"
9
+ #include "duckdb/storage/table/scan_state.hpp"
9
10
 
10
11
  #include <algorithm>
11
12
  #include <cstring>
@@ -13,6 +14,18 @@
13
14
 
14
15
  namespace duckdb {
15
16
 
17
+ struct ARTIndexScanState : public IndexScanState {
18
+
19
+ //! Scan predicates (single predicate scan or range scan)
20
+ Value values[2];
21
+ //! Expressions of the scan predicates
22
+ ExpressionType expressions[2];
23
+ bool checked = false;
24
+ //! All scanned row IDs
25
+ vector<row_t> result_ids;
26
+ Iterator iterator;
27
+ };
28
+
16
29
  ART::ART(const vector<column_t> &column_ids, TableIOManager &table_io_manager,
17
30
  const vector<unique_ptr<Expression>> &unbound_expressions, IndexConstraintType constraint_type,
18
31
  AttachedDatabase &db, bool track_memory, idx_t block_id, idx_t block_offset)
@@ -330,8 +343,7 @@ bool ART::ConstructFromSorted(idx_t count, vector<Key> &keys, Vector &row_identi
330
343
  //===--------------------------------------------------------------------===//
331
344
  // Insert / Verification / Constraint Checking
332
345
  //===--------------------------------------------------------------------===//
333
-
334
- bool ART::Insert(IndexLock &lock, DataChunk &input, Vector &row_ids) {
346
+ PreservedError ART::Insert(IndexLock &lock, DataChunk &input, Vector &row_ids) {
335
347
 
336
348
  D_ASSERT(row_ids.GetType().InternalType() == ROW_TYPE);
337
349
  D_ASSERT(logical_types[0] == input.data[0].GetType());
@@ -375,12 +387,13 @@ bool ART::Insert(IndexLock &lock, DataChunk &input, Vector &row_ids) {
375
387
 
376
388
  IncreaseAndVerifyMemorySize(old_memory_size);
377
389
  if (failed_index != DConstants::INVALID_INDEX) {
378
- return false;
390
+ return PreservedError(ConstraintException("PRIMARY KEY or UNIQUE constraint violated: duplicate key \"%s\"",
391
+ AppendRowError(input, failed_index)));
379
392
  }
380
- return true;
393
+ return PreservedError();
381
394
  }
382
395
 
383
- bool ART::Append(IndexLock &lock, DataChunk &appended_data, Vector &row_identifiers) {
396
+ PreservedError ART::Append(IndexLock &lock, DataChunk &appended_data, Vector &row_identifiers) {
384
397
  DataChunk expression_result;
385
398
  expression_result.Initialize(Allocator::DefaultAllocator(), logical_types);
386
399
 
@@ -654,6 +667,7 @@ bool ART::SearchEqual(Key &key, idx_t max_count, vector<row_t> &result_ids) {
654
667
  }
655
668
 
656
669
  void ART::SearchEqualJoinNoFetch(Key &key, idx_t &result_size) {
670
+ result_size = 0;
657
671
 
658
672
  // we need to look for a leaf
659
673
  auto old_memory_size = memory_size;
@@ -3,13 +3,13 @@
3
3
  #include "duckdb/catalog/catalog_entry/aggregate_function_catalog_entry.hpp"
4
4
  #include "duckdb/common/vector_operations/vector_operations.hpp"
5
5
  #include "duckdb/execution/aggregate_hashtable.hpp"
6
- #include "duckdb/execution/partitionable_hashtable.hpp"
7
6
  #include "duckdb/main/client_context.hpp"
8
7
  #include "duckdb/parallel/pipeline.hpp"
9
8
  #include "duckdb/parallel/task_scheduler.hpp"
10
9
  #include "duckdb/parallel/thread_context.hpp"
11
10
  #include "duckdb/planner/expression/bound_aggregate_expression.hpp"
12
11
  #include "duckdb/planner/expression/bound_constant_expression.hpp"
12
+ #include "duckdb/planner/expression/bound_reference_expression.hpp"
13
13
  #include "duckdb/parallel/base_pipeline_event.hpp"
14
14
  #include "duckdb/common/atomic.hpp"
15
15
  #include "duckdb/execution/operator/aggregate/distinct_aggregate_data.hpp"
@@ -4,14 +4,13 @@
4
4
  #include "duckdb/planner/expression/bound_aggregate_expression.hpp"
5
5
  #include "duckdb/planner/expression/bound_reference_expression.hpp"
6
6
  #include "duckdb/storage/buffer_manager.hpp"
7
- #include "duckdb/storage/statistics/numeric_statistics.hpp"
8
7
 
9
8
  namespace duckdb {
10
9
 
11
10
  PhysicalPerfectHashAggregate::PhysicalPerfectHashAggregate(ClientContext &context, vector<LogicalType> types_p,
12
11
  vector<unique_ptr<Expression>> aggregates_p,
13
12
  vector<unique_ptr<Expression>> groups_p,
14
- vector<unique_ptr<BaseStatistics>> group_stats,
13
+ const vector<unique_ptr<BaseStatistics>> &group_stats,
15
14
  vector<idx_t> required_bits_p, idx_t estimated_cardinality)
16
15
  : PhysicalOperator(PhysicalOperatorType::PERFECT_HASH_GROUP_BY, std::move(types_p), estimated_cardinality),
17
16
  groups(std::move(groups_p)), aggregates(std::move(aggregates_p)), required_bits(std::move(required_bits_p)) {
@@ -19,9 +18,9 @@ PhysicalPerfectHashAggregate::PhysicalPerfectHashAggregate(ClientContext &contex
19
18
  group_minima.reserve(group_stats.size());
20
19
  for (auto &stats : group_stats) {
21
20
  D_ASSERT(stats);
22
- auto &nstats = (NumericStatistics &)*stats;
23
- D_ASSERT(!nstats.min.IsNull());
24
- group_minima.push_back(std::move(nstats.min));
21
+ auto &nstats = *stats;
22
+ D_ASSERT(NumericStats::HasMin(nstats));
23
+ group_minima.push_back(NumericStats::Min(nstats));
25
24
  }
26
25
  for (auto &expr : groups) {
27
26
  group_types.push_back(expr->return_type);