duckdb 0.7.2-dev12.0 → 0.7.2-dev1238.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 (631) 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 +14 -3
  28. package/src/duckdb/extension/parquet/parquet_reader.cpp +6 -1
  29. package/src/duckdb/extension/parquet/parquet_statistics.cpp +49 -36
  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/local_file_system.cpp +64 -7
  53. package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
  54. package/src/duckdb/src/common/preserved_error.cpp +7 -5
  55. package/src/duckdb/src/common/progress_bar/progress_bar.cpp +7 -0
  56. package/src/duckdb/src/common/serializer/buffered_deserializer.cpp +4 -0
  57. package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +15 -2
  58. package/src/duckdb/src/common/serializer/enum_serializer.cpp +1176 -0
  59. package/src/duckdb/src/common/sort/comparators.cpp +14 -5
  60. package/src/duckdb/src/common/sort/sort_state.cpp +5 -7
  61. package/src/duckdb/src/common/sort/sorted_block.cpp +0 -1
  62. package/src/duckdb/src/common/string_util.cpp +18 -1
  63. package/src/duckdb/src/common/types/bit.cpp +166 -87
  64. package/src/duckdb/src/common/types/blob.cpp +1 -1
  65. package/src/duckdb/src/common/types/chunk_collection.cpp +2 -2
  66. package/src/duckdb/src/common/types/column_data_collection.cpp +39 -2
  67. package/src/duckdb/src/common/types/column_data_collection_segment.cpp +12 -10
  68. package/src/duckdb/src/common/types/data_chunk.cpp +1 -1
  69. package/src/duckdb/src/common/types/interval.cpp +0 -41
  70. package/src/duckdb/src/common/types/list_segment.cpp +658 -0
  71. package/src/duckdb/src/common/types/string_heap.cpp +1 -1
  72. package/src/duckdb/src/common/types/string_type.cpp +1 -1
  73. package/src/duckdb/src/common/types/time.cpp +13 -0
  74. package/src/duckdb/src/common/types/validity_mask.cpp +24 -7
  75. package/src/duckdb/src/common/types/value.cpp +320 -154
  76. package/src/duckdb/src/common/types/vector.cpp +158 -134
  77. package/src/duckdb/src/common/types.cpp +313 -153
  78. package/src/duckdb/src/common/value_operations/comparison_operations.cpp +14 -22
  79. package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +10 -10
  80. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +11 -10
  81. package/src/duckdb/src/common/vector_operations/vector_cast.cpp +2 -1
  82. package/src/duckdb/src/execution/aggregate_hashtable.cpp +98 -74
  83. package/src/duckdb/src/execution/column_binding_resolver.cpp +21 -5
  84. package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +2 -1
  85. package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +2 -2
  86. package/src/duckdb/src/execution/index/art/art.cpp +19 -5
  87. package/src/duckdb/src/execution/join_hashtable.cpp +3 -1
  88. package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +1 -1
  89. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +4 -5
  90. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +117 -26
  91. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +3 -0
  92. package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +5 -3
  93. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +64 -17
  94. package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +2 -0
  95. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -2
  96. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +13 -4
  97. package/src/duckdb/src/execution/operator/join/physical_join.cpp +0 -3
  98. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +6 -11
  99. package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +3 -1
  100. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +11 -4
  101. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +24 -19
  102. package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +3 -0
  103. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -1
  104. package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +2 -2
  105. package/src/duckdb/src/execution/operator/persistent/physical_delete.cpp +1 -3
  106. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -0
  107. package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +34 -0
  108. package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +20 -5
  109. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +20 -40
  110. package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +2 -5
  111. package/src/duckdb/src/execution/partitionable_hashtable.cpp +20 -5
  112. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +22 -16
  113. package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +97 -0
  114. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +95 -47
  115. package/src/duckdb/src/execution/physical_plan/plan_create_index.cpp +2 -1
  116. package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +5 -8
  117. package/src/duckdb/src/execution/physical_plan/plan_positional_join.cpp +14 -5
  118. package/src/duckdb/src/execution/physical_plan_generator.cpp +3 -0
  119. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +23 -15
  120. package/src/duckdb/src/execution/window_segment_tree.cpp +173 -1
  121. package/src/duckdb/src/function/aggregate/algebraic/avg.cpp +0 -6
  122. package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +99 -95
  123. package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +269 -0
  124. package/src/duckdb/src/function/aggregate/distributive/bool.cpp +2 -0
  125. package/src/duckdb/src/function/aggregate/distributive/count.cpp +3 -4
  126. package/src/duckdb/src/function/aggregate/distributive/first.cpp +1 -0
  127. package/src/duckdb/src/function/aggregate/distributive/minmax.cpp +2 -0
  128. package/src/duckdb/src/function/aggregate/distributive/sum.cpp +19 -16
  129. package/src/duckdb/src/function/aggregate/distributive_functions.cpp +1 -0
  130. package/src/duckdb/src/function/aggregate/holistic/approximate_quantile.cpp +5 -2
  131. package/src/duckdb/src/function/aggregate/holistic/mode.cpp +1 -1
  132. package/src/duckdb/src/function/aggregate/holistic/quantile.cpp +16 -1
  133. package/src/duckdb/src/function/aggregate/nested/list.cpp +6 -712
  134. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +138 -45
  135. package/src/duckdb/src/function/cast/bit_cast.cpp +0 -2
  136. package/src/duckdb/src/function/cast/blob_cast.cpp +0 -1
  137. package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
  138. package/src/duckdb/src/function/cast/enum_casts.cpp +25 -3
  139. package/src/duckdb/src/function/cast/list_casts.cpp +17 -4
  140. package/src/duckdb/src/function/cast/map_cast.cpp +5 -2
  141. package/src/duckdb/src/function/cast/string_cast.cpp +36 -10
  142. package/src/duckdb/src/function/cast/struct_cast.cpp +24 -4
  143. package/src/duckdb/src/function/cast/time_casts.cpp +2 -2
  144. package/src/duckdb/src/function/cast/union_casts.cpp +33 -7
  145. package/src/duckdb/src/function/cast_rules.cpp +9 -4
  146. package/src/duckdb/src/function/function_binder.cpp +1 -8
  147. package/src/duckdb/src/function/pragma/pragma_queries.cpp +24 -1
  148. package/src/duckdb/src/function/scalar/bit/bitstring.cpp +100 -0
  149. package/src/duckdb/src/function/scalar/date/current.cpp +0 -2
  150. package/src/duckdb/src/function/scalar/date/date_diff.cpp +0 -1
  151. package/src/duckdb/src/function/scalar/date/date_part.cpp +18 -26
  152. package/src/duckdb/src/function/scalar/date/date_sub.cpp +0 -1
  153. package/src/duckdb/src/function/scalar/date/date_trunc.cpp +10 -14
  154. package/src/duckdb/src/function/scalar/generic/stats.cpp +2 -4
  155. package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +4 -146
  156. package/src/duckdb/src/function/scalar/list/flatten.cpp +5 -12
  157. package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +1 -1
  158. package/src/duckdb/src/function/scalar/list/list_concat.cpp +8 -12
  159. package/src/duckdb/src/function/scalar/list/list_extract.cpp +5 -12
  160. package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +7 -3
  161. package/src/duckdb/src/function/scalar/list/list_sort.cpp +25 -18
  162. package/src/duckdb/src/function/scalar/list/list_value.cpp +6 -10
  163. package/src/duckdb/src/function/scalar/map/map.cpp +47 -1
  164. package/src/duckdb/src/function/scalar/map/map_entries.cpp +61 -0
  165. package/src/duckdb/src/function/scalar/map/map_extract.cpp +68 -26
  166. package/src/duckdb/src/function/scalar/map/map_keys_values.cpp +97 -0
  167. package/src/duckdb/src/function/scalar/math/numeric.cpp +101 -17
  168. package/src/duckdb/src/function/scalar/math_functions.cpp +3 -0
  169. package/src/duckdb/src/function/scalar/nested_functions.cpp +3 -0
  170. package/src/duckdb/src/function/scalar/operators/add.cpp +0 -9
  171. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +29 -48
  172. package/src/duckdb/src/function/scalar/operators/bitwise.cpp +0 -63
  173. package/src/duckdb/src/function/scalar/operators/multiply.cpp +5 -6
  174. package/src/duckdb/src/function/scalar/operators/subtract.cpp +0 -6
  175. package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -6
  176. package/src/duckdb/src/function/scalar/string/hex.cpp +201 -0
  177. package/src/duckdb/src/function/scalar/string/instr.cpp +2 -6
  178. package/src/duckdb/src/function/scalar/string/length.cpp +2 -6
  179. package/src/duckdb/src/function/scalar/string/like.cpp +2 -6
  180. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +243 -0
  181. package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +79 -0
  182. package/src/duckdb/src/function/scalar/string/regexp.cpp +21 -80
  183. package/src/duckdb/src/function/scalar/string/substring.cpp +2 -6
  184. package/src/duckdb/src/function/scalar/string_functions.cpp +2 -0
  185. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +5 -10
  186. package/src/duckdb/src/function/scalar/struct/struct_insert.cpp +11 -14
  187. package/src/duckdb/src/function/scalar/struct/struct_pack.cpp +6 -7
  188. package/src/duckdb/src/function/table/arrow.cpp +5 -2
  189. package/src/duckdb/src/function/table/arrow_conversion.cpp +25 -1
  190. package/src/duckdb/src/function/table/checkpoint.cpp +5 -1
  191. package/src/duckdb/src/function/table/read_csv.cpp +60 -0
  192. package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +2 -2
  193. package/src/duckdb/src/function/table/system/test_all_types.cpp +2 -2
  194. package/src/duckdb/src/function/table/table_scan.cpp +9 -12
  195. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  196. package/src/duckdb/src/function/table_function.cpp +30 -11
  197. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +6 -0
  198. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +1 -1
  199. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +6 -8
  200. package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +3 -0
  201. package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +2 -1
  202. package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +8 -2
  203. package/src/duckdb/src/include/duckdb/common/constants.hpp +0 -19
  204. package/src/duckdb/src/include/duckdb/common/enums/aggregate_handling.hpp +2 -0
  205. package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -3
  206. package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +7 -4
  207. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +1 -0
  208. package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +2 -0
  209. package/src/duckdb/src/include/duckdb/common/enums/set_operation_type.hpp +2 -1
  210. package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +2 -1
  211. package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +2 -1
  212. package/src/duckdb/src/include/duckdb/common/exception.hpp +69 -2
  213. package/src/duckdb/src/include/duckdb/common/field_writer.hpp +12 -4
  214. package/src/duckdb/src/include/duckdb/common/helper.hpp +1 -1
  215. package/src/duckdb/src/include/duckdb/common/{http_stats.hpp → http_state.hpp} +18 -4
  216. package/src/duckdb/src/include/duckdb/common/operator/comparison_operators.hpp +45 -149
  217. package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +2 -0
  218. package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +45 -0
  219. package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +6 -1
  220. package/src/duckdb/src/include/duckdb/common/progress_bar/progress_bar.hpp +2 -0
  221. package/src/duckdb/src/include/duckdb/common/serializer/buffered_deserializer.hpp +4 -2
  222. package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +8 -2
  223. package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +113 -0
  224. package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +336 -0
  225. package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +268 -0
  226. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +126 -0
  227. package/src/duckdb/src/include/duckdb/common/serializer.hpp +13 -0
  228. package/src/duckdb/src/include/duckdb/common/string_util.hpp +27 -0
  229. package/src/duckdb/src/include/duckdb/common/types/bit.hpp +12 -7
  230. package/src/duckdb/src/include/duckdb/common/types/interval.hpp +39 -3
  231. package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +70 -0
  232. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +73 -3
  233. package/src/duckdb/src/include/duckdb/common/types/time.hpp +3 -0
  234. package/src/duckdb/src/include/duckdb/common/types/validity_mask.hpp +4 -1
  235. package/src/duckdb/src/include/duckdb/common/types/value.hpp +17 -48
  236. package/src/duckdb/src/include/duckdb/common/types/value_map.hpp +1 -1
  237. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -1
  238. package/src/duckdb/src/include/duckdb/common/types.hpp +45 -8
  239. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +2 -2
  240. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +35 -20
  241. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -14
  242. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_perfecthash_aggregate.hpp +1 -1
  243. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_cross_product.hpp +2 -0
  244. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_file_handle.hpp +1 -0
  245. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +10 -0
  246. package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_projection.hpp +5 -0
  247. package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +5 -1
  248. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +1 -3
  249. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +54 -0
  250. package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +5 -0
  251. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +18 -6
  252. package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +84 -0
  253. package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +2 -2
  254. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +28 -64
  255. package/src/duckdb/src/include/duckdb/function/function_binder.hpp +3 -6
  256. package/src/duckdb/src/include/duckdb/function/scalar/bit_functions.hpp +4 -0
  257. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +138 -0
  258. package/src/duckdb/src/include/duckdb/function/scalar/math_functions.hpp +8 -0
  259. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +59 -0
  260. package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
  261. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +4 -0
  262. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
  263. package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +12 -1
  264. package/src/duckdb/src/include/duckdb/function/table_function.hpp +10 -0
  265. package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -0
  266. package/src/duckdb/src/include/duckdb/main/client_config.hpp +2 -0
  267. package/src/duckdb/src/include/duckdb/main/client_data.hpp +3 -3
  268. package/src/duckdb/src/include/duckdb/main/config.hpp +3 -0
  269. package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +2 -0
  270. package/src/duckdb/src/include/duckdb/main/database.hpp +1 -0
  271. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +2 -0
  272. package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +2 -0
  273. package/src/duckdb/src/include/duckdb/main/relation/explain_relation.hpp +2 -1
  274. package/src/duckdb/src/include/duckdb/main/relation.hpp +2 -1
  275. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
  276. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  277. package/src/duckdb/src/include/duckdb/optimizer/rule/list.hpp +1 -0
  278. package/src/duckdb/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp +24 -0
  279. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +4 -0
  280. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
  281. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
  282. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +5 -0
  283. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -0
  284. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -0
  285. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -0
  286. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -0
  287. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -0
  288. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
  289. package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
  290. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +4 -2
  291. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -0
  292. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -0
  293. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -0
  294. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -0
  295. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +4 -2
  296. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -0
  297. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +5 -0
  298. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +5 -1
  299. package/src/duckdb/src/include/duckdb/parser/parsed_data/{alter_function_info.hpp → alter_scalar_function_info.hpp} +13 -13
  300. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +47 -0
  301. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +6 -0
  302. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_function_info.hpp +2 -1
  303. package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -0
  304. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -0
  305. package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
  306. package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +5 -0
  307. package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
  308. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +13 -2
  309. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +24 -1
  310. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -1
  311. package/src/duckdb/src/include/duckdb/parser/statement/multi_statement.hpp +28 -0
  312. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +6 -1
  313. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +4 -0
  314. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -0
  315. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
  316. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
  317. package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
  318. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +87 -0
  319. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
  320. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
  321. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -1
  322. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -0
  323. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +33 -0
  324. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -0
  325. package/src/duckdb/src/include/duckdb/planner/binder.hpp +15 -4
  326. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +3 -0
  327. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +3 -0
  328. package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +64 -0
  329. package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -2
  330. package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +4 -1
  331. package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +2 -2
  332. package/src/duckdb/src/include/duckdb/planner/expression_binder/select_binder.hpp +9 -38
  333. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
  334. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
  335. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
  336. package/src/duckdb/src/include/duckdb/planner/operator/logical_asof_join.hpp +22 -0
  337. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -2
  338. package/src/duckdb/src/include/duckdb/planner/operator/logical_distinct.hpp +3 -0
  339. package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +8 -2
  340. package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +2 -0
  341. package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +76 -44
  342. package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -2
  343. package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +1 -1
  344. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
  345. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
  346. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +2 -1
  347. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
  348. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
  349. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +2 -1
  350. package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +4 -3
  351. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +4 -3
  352. package/src/duckdb/src/include/duckdb/storage/index.hpp +5 -4
  353. package/src/duckdb/src/include/duckdb/storage/meta_block_reader.hpp +7 -0
  354. package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +93 -29
  355. package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +22 -3
  356. package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +8 -6
  357. package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +41 -0
  358. package/src/duckdb/src/include/duckdb/storage/statistics/node_statistics.hpp +26 -0
  359. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +114 -0
  360. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +62 -0
  361. package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -7
  362. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +74 -0
  363. package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +42 -0
  364. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +2 -3
  365. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
  366. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +21 -7
  367. package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +3 -2
  368. package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +5 -6
  369. package/src/duckdb/src/include/duckdb/storage/table/column_segment_tree.hpp +18 -0
  370. package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
  371. package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +6 -3
  372. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +41 -45
  373. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +23 -7
  374. package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +35 -0
  375. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +21 -29
  376. package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +6 -6
  377. package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +281 -26
  378. package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +0 -4
  379. package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -0
  380. package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +0 -1
  381. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +1 -1
  382. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +6 -3
  383. package/src/duckdb/src/include/duckdb.h +71 -2
  384. package/src/duckdb/src/include/duckdb.hpp +0 -1
  385. package/src/duckdb/src/main/capi/pending-c.cpp +16 -3
  386. package/src/duckdb/src/main/capi/result-c.cpp +27 -1
  387. package/src/duckdb/src/main/capi/stream-c.cpp +25 -0
  388. package/src/duckdb/src/main/capi/table_function-c.cpp +23 -0
  389. package/src/duckdb/src/main/client_context.cpp +38 -34
  390. package/src/duckdb/src/main/client_data.cpp +7 -6
  391. package/src/duckdb/src/main/config.cpp +70 -1
  392. package/src/duckdb/src/main/database.cpp +19 -2
  393. package/src/duckdb/src/main/extension/extension_install.cpp +7 -2
  394. package/src/duckdb/src/main/prepared_statement.cpp +4 -0
  395. package/src/duckdb/src/main/query_profiler.cpp +17 -15
  396. package/src/duckdb/src/main/relation/explain_relation.cpp +3 -3
  397. package/src/duckdb/src/main/relation.cpp +3 -2
  398. package/src/duckdb/src/main/settings/settings.cpp +20 -8
  399. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -0
  400. package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
  401. package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -6
  402. package/src/duckdb/src/optimizer/filter_pullup.cpp +3 -1
  403. package/src/duckdb/src/optimizer/filter_pushdown.cpp +14 -8
  404. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +107 -71
  405. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +32 -12
  406. package/src/duckdb/src/optimizer/optimizer.cpp +1 -0
  407. package/src/duckdb/src/optimizer/pullup/pullup_from_left.cpp +2 -2
  408. package/src/duckdb/src/optimizer/pushdown/pushdown_aggregate.cpp +33 -5
  409. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +1 -1
  410. package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +3 -0
  411. package/src/duckdb/src/optimizer/pushdown/pushdown_left_join.cpp +5 -12
  412. package/src/duckdb/src/optimizer/pushdown/pushdown_mark_join.cpp +2 -2
  413. package/src/duckdb/src/optimizer/pushdown/pushdown_single_join.cpp +1 -1
  414. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +1 -0
  415. package/src/duckdb/src/optimizer/rule/move_constants.cpp +10 -4
  416. package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +30 -0
  417. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +9 -2
  418. package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +9 -3
  419. package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +6 -7
  420. package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +14 -11
  421. package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
  422. package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +13 -15
  423. package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +0 -1
  424. package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +3 -75
  425. package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +7 -2
  426. package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -0
  427. package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +2 -3
  428. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +29 -32
  429. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +5 -5
  430. package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +3 -3
  431. package/src/duckdb/src/optimizer/statistics_propagator.cpp +2 -1
  432. package/src/duckdb/src/optimizer/unnest_rewriter.cpp +2 -2
  433. package/src/duckdb/src/parallel/meta_pipeline.cpp +0 -7
  434. package/src/duckdb/src/parser/common_table_expression_info.cpp +19 -0
  435. package/src/duckdb/src/parser/expression/between_expression.cpp +17 -0
  436. package/src/duckdb/src/parser/expression/case_expression.cpp +28 -0
  437. package/src/duckdb/src/parser/expression/cast_expression.cpp +17 -0
  438. package/src/duckdb/src/parser/expression/collate_expression.cpp +16 -0
  439. package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -0
  440. package/src/duckdb/src/parser/expression/comparison_expression.cpp +16 -0
  441. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +17 -0
  442. package/src/duckdb/src/parser/expression/constant_expression.cpp +14 -0
  443. package/src/duckdb/src/parser/expression/default_expression.cpp +7 -0
  444. package/src/duckdb/src/parser/expression/function_expression.cpp +35 -0
  445. package/src/duckdb/src/parser/expression/lambda_expression.cpp +16 -0
  446. package/src/duckdb/src/parser/expression/operator_expression.cpp +15 -0
  447. package/src/duckdb/src/parser/expression/parameter_expression.cpp +15 -0
  448. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +14 -0
  449. package/src/duckdb/src/parser/expression/star_expression.cpp +26 -6
  450. package/src/duckdb/src/parser/expression/subquery_expression.cpp +20 -0
  451. package/src/duckdb/src/parser/expression/window_expression.cpp +43 -0
  452. package/src/duckdb/src/parser/parsed_data/alter_info.cpp +7 -3
  453. package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +56 -0
  454. package/src/duckdb/src/parser/parsed_data/alter_table_function_info.cpp +51 -0
  455. package/src/duckdb/src/parser/parsed_data/create_scalar_function_info.cpp +3 -2
  456. package/src/duckdb/src/parser/parsed_data/create_table_function_info.cpp +6 -0
  457. package/src/duckdb/src/parser/parsed_data/sample_options.cpp +22 -10
  458. package/src/duckdb/src/parser/parsed_expression.cpp +72 -0
  459. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +15 -1
  460. package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +21 -0
  461. package/src/duckdb/src/parser/query_node/select_node.cpp +31 -0
  462. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +17 -0
  463. package/src/duckdb/src/parser/query_node.cpp +51 -1
  464. package/src/duckdb/src/parser/result_modifier.cpp +78 -0
  465. package/src/duckdb/src/parser/statement/multi_statement.cpp +18 -0
  466. package/src/duckdb/src/parser/statement/select_statement.cpp +12 -0
  467. package/src/duckdb/src/parser/tableref/basetableref.cpp +21 -0
  468. package/src/duckdb/src/parser/tableref/emptytableref.cpp +4 -0
  469. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +17 -0
  470. package/src/duckdb/src/parser/tableref/joinref.cpp +29 -0
  471. package/src/duckdb/src/parser/tableref/pivotref.cpp +373 -0
  472. package/src/duckdb/src/parser/tableref/subqueryref.cpp +15 -0
  473. package/src/duckdb/src/parser/tableref/table_function.cpp +17 -0
  474. package/src/duckdb/src/parser/tableref.cpp +49 -0
  475. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +11 -0
  476. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -1
  477. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +17 -2
  478. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +85 -42
  479. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
  480. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +1 -1
  481. package/src/duckdb/src/parser/transform/helpers/transform_alias.cpp +12 -6
  482. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +24 -0
  483. package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +7 -0
  484. package/src/duckdb/src/parser/transform/helpers/transform_orderby.cpp +0 -7
  485. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +3 -2
  486. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +4 -0
  487. package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +4 -0
  488. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +179 -0
  489. package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +3 -4
  490. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -0
  491. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +2 -3
  492. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +12 -1
  493. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +121 -0
  494. package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +2 -0
  495. package/src/duckdb/src/parser/transformer.cpp +15 -3
  496. package/src/duckdb/src/planner/bind_context.cpp +18 -25
  497. package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +9 -7
  498. package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +4 -3
  499. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +23 -12
  500. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +3 -2
  501. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +176 -0
  502. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -0
  503. package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +163 -24
  504. package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +2 -2
  505. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +109 -94
  506. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +11 -0
  507. package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +9 -4
  508. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +5 -3
  509. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +3 -2
  510. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +10 -1
  511. package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
  512. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +12 -8
  513. package/src/duckdb/src/planner/binder/statement/bind_logical_plan.cpp +17 -0
  514. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +4 -2
  515. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +19 -3
  516. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +366 -0
  517. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +11 -1
  518. package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -0
  519. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +61 -13
  520. package/src/duckdb/src/planner/binder.cpp +19 -24
  521. package/src/duckdb/src/planner/bound_result_modifier.cpp +27 -1
  522. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +9 -2
  523. package/src/duckdb/src/planner/expression/bound_expression.cpp +4 -0
  524. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +1 -1
  525. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +146 -0
  526. package/src/duckdb/src/planner/expression_binder/having_binder.cpp +6 -3
  527. package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -3
  528. package/src/duckdb/src/planner/expression_binder/select_binder.cpp +1 -132
  529. package/src/duckdb/src/planner/expression_binder.cpp +10 -3
  530. package/src/duckdb/src/planner/expression_iterator.cpp +17 -10
  531. package/src/duckdb/src/planner/filter/constant_filter.cpp +4 -6
  532. package/src/duckdb/src/planner/logical_operator.cpp +7 -2
  533. package/src/duckdb/src/planner/logical_operator_visitor.cpp +6 -0
  534. package/src/duckdb/src/planner/operator/logical_asof_join.cpp +8 -0
  535. package/src/duckdb/src/planner/operator/logical_distinct.cpp +3 -0
  536. package/src/duckdb/src/planner/planner.cpp +2 -1
  537. package/src/duckdb/src/planner/pragma_handler.cpp +10 -2
  538. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +3 -1
  539. package/src/duckdb/src/storage/buffer_manager.cpp +44 -46
  540. package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +1 -1
  541. package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +4 -15
  542. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +10 -4
  543. package/src/duckdb/src/storage/checkpoint_manager.cpp +9 -3
  544. package/src/duckdb/src/storage/compression/bitpacking.cpp +29 -25
  545. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +45 -46
  546. package/src/duckdb/src/storage/compression/numeric_constant.cpp +10 -11
  547. package/src/duckdb/src/storage/compression/patas.cpp +1 -1
  548. package/src/duckdb/src/storage/compression/rle.cpp +20 -15
  549. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +6 -6
  550. package/src/duckdb/src/storage/data_table.cpp +23 -23
  551. package/src/duckdb/src/storage/index.cpp +12 -1
  552. package/src/duckdb/src/storage/local_storage.cpp +27 -23
  553. package/src/duckdb/src/storage/meta_block_reader.cpp +22 -0
  554. package/src/duckdb/src/storage/statistics/base_statistics.cpp +373 -128
  555. package/src/duckdb/src/storage/statistics/column_statistics.cpp +57 -3
  556. package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +8 -9
  557. package/src/duckdb/src/storage/statistics/list_stats.cpp +121 -0
  558. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +591 -0
  559. package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +65 -0
  560. package/src/duckdb/src/storage/statistics/segment_statistics.cpp +2 -11
  561. package/src/duckdb/src/storage/statistics/string_stats.cpp +273 -0
  562. package/src/duckdb/src/storage/statistics/struct_stats.cpp +133 -0
  563. package/src/duckdb/src/storage/storage_info.cpp +2 -2
  564. package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +4 -10
  565. package/src/duckdb/src/storage/table/column_data.cpp +118 -62
  566. package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +10 -9
  567. package/src/duckdb/src/storage/table/column_segment.cpp +30 -45
  568. package/src/duckdb/src/storage/table/list_column_data.cpp +50 -71
  569. package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
  570. package/src/duckdb/src/storage/table/row_group.cpp +213 -143
  571. package/src/duckdb/src/storage/table/row_group_collection.cpp +151 -105
  572. package/src/duckdb/src/storage/table/scan_state.cpp +45 -33
  573. package/src/duckdb/src/storage/table/standard_column_data.cpp +11 -12
  574. package/src/duckdb/src/storage/table/struct_column_data.cpp +27 -34
  575. package/src/duckdb/src/storage/table/table_statistics.cpp +27 -7
  576. package/src/duckdb/src/storage/table/update_segment.cpp +23 -18
  577. package/src/duckdb/src/storage/wal_replay.cpp +8 -5
  578. package/src/duckdb/src/storage/write_ahead_log.cpp +2 -2
  579. package/src/duckdb/src/transaction/commit_state.cpp +11 -7
  580. package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
  581. package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +35 -0
  582. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +36 -2
  583. package/src/duckdb/third_party/libpg_query/include/nodes/primnodes.hpp +3 -3
  584. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +1022 -530
  585. package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +8 -0
  586. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24462 -22828
  587. package/src/duckdb/third_party/re2/re2/re2.cc +9 -0
  588. package/src/duckdb/third_party/re2/re2/re2.h +2 -0
  589. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +4 -4
  590. package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
  591. package/src/duckdb/ub_src_common_serializer.cpp +2 -0
  592. package/src/duckdb/ub_src_common_types.cpp +2 -0
  593. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  594. package/src/duckdb/ub_src_function_aggregate_distributive.cpp +2 -0
  595. package/src/duckdb/ub_src_function_scalar_bit.cpp +2 -0
  596. package/src/duckdb/ub_src_function_scalar_map.cpp +4 -0
  597. package/src/duckdb/ub_src_function_scalar_string.cpp +2 -0
  598. package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
  599. package/src/duckdb/ub_src_main_capi.cpp +2 -0
  600. package/src/duckdb/ub_src_optimizer_rule.cpp +2 -0
  601. package/src/duckdb/ub_src_parser.cpp +2 -0
  602. package/src/duckdb/ub_src_parser_parsed_data.cpp +4 -2
  603. package/src/duckdb/ub_src_parser_statement.cpp +2 -0
  604. package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
  605. package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
  606. package/src/duckdb/ub_src_parser_transform_tableref.cpp +2 -0
  607. package/src/duckdb/ub_src_planner_binder_expression.cpp +2 -0
  608. package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
  609. package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
  610. package/src/duckdb/ub_src_planner_operator.cpp +2 -0
  611. package/src/duckdb/ub_src_storage_statistics.cpp +6 -6
  612. package/src/duckdb/ub_src_storage_table.cpp +0 -2
  613. package/src/duckdb_node.hpp +2 -1
  614. package/src/statement.cpp +5 -5
  615. package/src/utils.cpp +27 -2
  616. package/test/extension.test.ts +44 -26
  617. package/test/syntax_error.test.ts +3 -1
  618. package/filelist.cache +0 -0
  619. package/src/duckdb/src/include/duckdb/main/loadable_extension.hpp +0 -59
  620. package/src/duckdb/src/include/duckdb/storage/statistics/list_statistics.hpp +0 -36
  621. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_statistics.hpp +0 -75
  622. package/src/duckdb/src/include/duckdb/storage/statistics/string_statistics.hpp +0 -49
  623. package/src/duckdb/src/include/duckdb/storage/statistics/struct_statistics.hpp +0 -36
  624. package/src/duckdb/src/include/duckdb/storage/statistics/validity_statistics.hpp +0 -45
  625. package/src/duckdb/src/parser/parsed_data/alter_function_info.cpp +0 -55
  626. package/src/duckdb/src/storage/statistics/list_statistics.cpp +0 -94
  627. package/src/duckdb/src/storage/statistics/numeric_statistics.cpp +0 -307
  628. package/src/duckdb/src/storage/statistics/string_statistics.cpp +0 -220
  629. package/src/duckdb/src/storage/statistics/struct_statistics.cpp +0 -108
  630. package/src/duckdb/src/storage/statistics/validity_statistics.cpp +0 -91
  631. package/src/duckdb/src/storage/table/segment_tree.cpp +0 -179
@@ -8,58 +8,29 @@
8
8
 
9
9
  #pragma once
10
10
 
11
- #include "duckdb/common/case_insensitive_map.hpp"
12
- #include "duckdb/parser/expression_map.hpp"
13
- #include "duckdb/planner/expression_binder.hpp"
11
+ #include "duckdb/planner/expression_binder/base_select_binder.hpp"
14
12
 
15
13
  namespace duckdb {
16
- class BoundColumnRefExpression;
17
- class WindowExpression;
18
-
19
- class BoundSelectNode;
20
-
21
- struct BoundGroupInformation {
22
- expression_map_t<idx_t> map;
23
- case_insensitive_map_t<idx_t> alias_map;
24
- };
25
14
 
26
15
  //! The SELECT binder is responsible for binding an expression within the SELECT clause of a SQL statement
27
- class SelectBinder : public ExpressionBinder {
16
+ class SelectBinder : public BaseSelectBinder {
28
17
  public:
29
18
  SelectBinder(Binder &binder, ClientContext &context, BoundSelectNode &node, BoundGroupInformation &info,
30
19
  case_insensitive_map_t<idx_t> alias_map);
31
20
  SelectBinder(Binder &binder, ClientContext &context, BoundSelectNode &node, BoundGroupInformation &info);
32
21
 
33
- bool BoundAggregates() {
34
- return bound_aggregate;
22
+ bool HasExpandedExpressions() {
23
+ return !expanded_expressions.empty();
35
24
  }
36
- void ResetBindings() {
37
- this->bound_aggregate = false;
38
- this->bound_columns.clear();
25
+ vector<unique_ptr<Expression>> &ExpandedExpressions() {
26
+ return expanded_expressions;
39
27
  }
40
28
 
41
29
  protected:
42
- BindResult BindExpression(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth,
43
- bool root_expression = false) override;
44
-
45
- BindResult BindAggregate(FunctionExpression &expr, AggregateFunctionCatalogEntry *function, idx_t depth) override;
46
-
47
- BindResult BindUnnest(FunctionExpression &function, idx_t depth) override;
48
-
49
- bool inside_window;
50
- bool bound_aggregate = false;
51
-
52
- BoundSelectNode &node;
53
- BoundGroupInformation &info;
54
- case_insensitive_map_t<idx_t> alias_map;
55
-
56
- protected:
57
- BindResult BindColumnRef(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth);
58
- BindResult BindGroupingFunction(OperatorExpression &op, idx_t depth) override;
59
- BindResult BindWindow(WindowExpression &expr, idx_t depth);
30
+ BindResult BindUnnest(FunctionExpression &function, idx_t depth, bool root_expression) override;
60
31
 
61
- idx_t TryBindGroup(ParsedExpression &expr, idx_t depth);
62
- BindResult BindGroup(ParsedExpression &expr, idx_t depth, idx_t group_index);
32
+ idx_t unnest_level = 0;
33
+ vector<unique_ptr<Expression>> expanded_expressions;
63
34
  };
64
35
 
65
36
  } // namespace duckdb
@@ -135,7 +135,7 @@ protected:
135
135
  virtual BindResult BindFunction(FunctionExpression &expr, ScalarFunctionCatalogEntry *function, idx_t depth);
136
136
  virtual BindResult BindLambdaFunction(FunctionExpression &expr, ScalarFunctionCatalogEntry *function, idx_t depth);
137
137
  virtual BindResult BindAggregate(FunctionExpression &expr, AggregateFunctionCatalogEntry *function, idx_t depth);
138
- virtual BindResult BindUnnest(FunctionExpression &expr, idx_t depth);
138
+ virtual BindResult BindUnnest(FunctionExpression &expr, idx_t depth, bool root_expression);
139
139
  virtual BindResult BindMacro(FunctionExpression &expr, ScalarMacroCatalogEntry *macro, idx_t depth,
140
140
  unique_ptr<ParsedExpression> *expr_ptr);
141
141
 
@@ -14,6 +14,7 @@ class LogicalOperator;
14
14
 
15
15
  class LogicalAggregate;
16
16
  class LogicalAnyJoin;
17
+ class LogicalAsOfJoin;
17
18
  class LogicalColumnDataGet;
18
19
  class LogicalComparisonJoin;
19
20
  class LogicalCopyToFile;
@@ -1,5 +1,6 @@
1
1
  #include "duckdb/planner/operator/logical_aggregate.hpp"
2
2
  #include "duckdb/planner/operator/logical_any_join.hpp"
3
+ #include "duckdb/planner/operator/logical_asof_join.hpp"
3
4
  #include "duckdb/planner/operator/logical_column_data_get.hpp"
4
5
  #include "duckdb/planner/operator/logical_comparison_join.hpp"
5
6
  #include "duckdb/planner/operator/logical_copy_to_file.hpp"
@@ -0,0 +1,22 @@
1
+ //===----------------------------------------------------------------------===//
2
+ // DuckDB
3
+ //
4
+ // duckdb/planner/operator/logical_asof_join.hpp
5
+ //
6
+ //
7
+ //===----------------------------------------------------------------------===//
8
+
9
+ #pragma once
10
+
11
+ #include "duckdb/planner/operator/logical_comparison_join.hpp"
12
+
13
+ namespace duckdb {
14
+
15
+ //! LogicalAsOfJoin represents a temporal-style join with one less-than inequality.
16
+ //! This inequality matches the greatest value on the right that satisfies the condition.
17
+ class LogicalAsOfJoin : public LogicalComparisonJoin {
18
+ public:
19
+ explicit LogicalAsOfJoin(JoinType type);
20
+ };
21
+
22
+ } // namespace duckdb
@@ -9,6 +9,7 @@
9
9
  #pragma once
10
10
 
11
11
  #include "duckdb/common/constants.hpp"
12
+ #include "duckdb/common/enums/joinref_type.hpp"
12
13
  #include "duckdb/common/unordered_set.hpp"
13
14
  #include "duckdb/planner/joinside.hpp"
14
15
  #include "duckdb/planner/operator/logical_join.hpp"
@@ -34,10 +35,12 @@ public:
34
35
  FieldReader &reader);
35
36
 
36
37
  public:
37
- static unique_ptr<LogicalOperator> CreateJoin(JoinType type, unique_ptr<LogicalOperator> left_child,
38
+ static unique_ptr<LogicalOperator> CreateJoin(JoinType type, JoinRefType ref_type,
39
+ unique_ptr<LogicalOperator> left_child,
38
40
  unique_ptr<LogicalOperator> right_child,
39
41
  unique_ptr<Expression> condition);
40
- static unique_ptr<LogicalOperator> CreateJoin(JoinType type, unique_ptr<LogicalOperator> left_child,
42
+ static unique_ptr<LogicalOperator> CreateJoin(JoinType type, JoinRefType ref_type,
43
+ unique_ptr<LogicalOperator> left_child,
41
44
  unique_ptr<LogicalOperator> right_child,
42
45
  vector<JoinCondition> conditions,
43
46
  vector<unique_ptr<Expression>> arbitrary_expressions);
@@ -9,6 +9,7 @@
9
9
  #pragma once
10
10
 
11
11
  #include "duckdb/planner/logical_operator.hpp"
12
+ #include "duckdb/planner/bound_result_modifier.hpp"
12
13
 
13
14
  namespace duckdb {
14
15
 
@@ -22,6 +23,8 @@ public:
22
23
  }
23
24
  //! The set of distinct targets (optional).
24
25
  vector<unique_ptr<Expression>> distinct_targets;
26
+ //! The order by modifier (optional, only for distinct on)
27
+ unique_ptr<BoundOrderModifier> order_by;
25
28
 
26
29
  public:
27
30
  string ParamsToString() const override;
@@ -25,6 +25,13 @@ public:
25
25
  vector<GroupingSet> grouping_sets;
26
26
  };
27
27
 
28
+ struct BoundUnnestNode {
29
+ //! The index of the UNNEST node
30
+ idx_t index;
31
+ //! The set of expressions
32
+ vector<unique_ptr<Expression>> expressions;
33
+ };
34
+
28
35
  //! Bound equivalent of SelectNode
29
36
  class BoundSelectNode : public BoundQueryNode {
30
37
  public:
@@ -78,9 +85,8 @@ public:
78
85
  //! Window functions to compute (only used if HasWindow is true)
79
86
  vector<unique_ptr<Expression>> windows;
80
87
 
81
- idx_t unnest_index;
82
88
  //! Unnest expression
83
- vector<unique_ptr<Expression>> unnests;
89
+ unordered_map<idx_t, BoundUnnestNode> unnests;
84
90
 
85
91
  //! Index of pruned node
86
92
  idx_t prune_index;
@@ -17,6 +17,7 @@ namespace duckdb {
17
17
  class BlockManager;
18
18
  class BufferHandle;
19
19
  class BufferManager;
20
+ class BufferPool;
20
21
  class DatabaseInstance;
21
22
  class FileBuffer;
22
23
 
@@ -55,6 +56,7 @@ class BlockHandle {
55
56
  friend struct BufferEvictionNode;
56
57
  friend class BufferHandle;
57
58
  friend class BufferManager;
59
+ friend class BufferPool;
58
60
 
59
61
  public:
60
62
  BlockHandle(BlockManager &block_manager, block_id_t block_id);
@@ -23,23 +23,75 @@ class DatabaseInstance;
23
23
  class TemporaryDirectoryHandle;
24
24
  struct EvictionQueue;
25
25
 
26
+ //! The BufferPool is in charge of handling memory management for one or more databases. It defines memory limits
27
+ //! and implements priority eviction among all users of the pool.
28
+ class BufferPool {
29
+ friend class BlockHandle;
30
+ friend class BlockManager;
31
+ friend class BufferManager;
32
+
33
+ public:
34
+ explicit BufferPool(idx_t maximum_memory);
35
+ virtual ~BufferPool();
36
+
37
+ //! Set a new memory limit to the buffer pool, throws an exception if the new limit is too low and not enough
38
+ //! blocks can be evicted
39
+ void SetLimit(idx_t limit, const char *exception_postscript);
40
+
41
+ idx_t GetUsedMemory() {
42
+ return current_memory;
43
+ }
44
+ idx_t GetMaxMemory() {
45
+ return maximum_memory;
46
+ }
47
+
48
+ protected:
49
+ //! Evict blocks until the currently used memory + extra_memory fit, returns false if this was not possible
50
+ //! (i.e. not enough blocks could be evicted)
51
+ //! If the "buffer" argument is specified AND the system can find a buffer to re-use for the given allocation size
52
+ //! "buffer" will be made to point to the re-usable memory. Note that this is not guaranteed.
53
+ //! Returns a pair. result.first indicates if eviction was successful. result.second contains the
54
+ //! reservation handle, which can be moved to the BlockHandle that will own the reservation.
55
+ struct EvictionResult {
56
+ bool success;
57
+ TempBufferPoolReservation reservation;
58
+ };
59
+ virtual EvictionResult EvictBlocks(idx_t extra_memory, idx_t memory_limit,
60
+ unique_ptr<FileBuffer> *buffer = nullptr);
61
+
62
+ //! Garbage collect eviction queue
63
+ void PurgeQueue();
64
+ void AddToEvictionQueue(shared_ptr<BlockHandle> &handle);
65
+
66
+ private:
67
+ //! The lock for changing the memory limit
68
+ mutex limit_lock;
69
+ //! The current amount of memory that is occupied by the buffer manager (in bytes)
70
+ atomic<idx_t> current_memory;
71
+ //! The maximum amount of memory that the buffer manager can keep (in bytes)
72
+ atomic<idx_t> maximum_memory;
73
+ //! Eviction queue
74
+ unique_ptr<EvictionQueue> queue;
75
+ //! Total number of insertions into the eviction queue. This guides the schedule for calling PurgeQueue.
76
+ atomic<uint32_t> queue_insertions;
77
+ };
78
+
26
79
  struct TemporaryFileInformation {
27
80
  string path;
28
81
  idx_t size;
29
82
  };
30
83
 
31
- //! The buffer manager is in charge of handling memory management for the database. It hands out memory buffers that can
32
- //! be used by the database internally.
33
- //
34
- //! BlockIds are NOT unique within the context of a BufferManager. A buffer manager
35
- //! can be shared by many BlockManagers.
84
+ //! The BufferManager is in charge of handling memory management for a singke database. It cooperatively shares a
85
+ //! BufferPool with other BufferManagers, belonging to different databases. It hands out memory buffers that can
86
+ //! be used by the database internally, and offers configuration options specific to a database, which need not be
87
+ //! shared by the BufferPool, including whether to support swapping temp buffers to disk, and where to swap them to.
36
88
  class BufferManager {
37
89
  friend class BufferHandle;
38
90
  friend class BlockHandle;
39
91
  friend class BlockManager;
40
92
 
41
93
  public:
42
- BufferManager(DatabaseInstance &db, string temp_directory, idx_t maximum_memory);
94
+ BufferManager(DatabaseInstance &db, string temp_directory);
43
95
  virtual ~BufferManager();
44
96
 
45
97
  //! Registers an in-memory buffer that cannot be unloaded until it is destroyed
@@ -58,21 +110,17 @@ public:
58
110
  BufferHandle Pin(shared_ptr<BlockHandle> &handle);
59
111
  void Unpin(shared_ptr<BlockHandle> &handle);
60
112
 
61
- //! Set a new memory limit to the buffer manager, throws an exception if the new limit is too low and not enough
62
- //! blocks can be evicted
63
- void SetLimit(idx_t limit = (idx_t)-1);
64
-
65
113
  DUCKDB_API static BufferManager &GetBufferManager(ClientContext &context);
66
114
  DUCKDB_API static BufferManager &GetBufferManager(DatabaseInstance &db);
67
115
  DUCKDB_API static BufferManager &GetBufferManager(AttachedDatabase &db);
68
116
 
69
117
  //! Returns the currently allocated memory
70
118
  idx_t GetUsedMemory() {
71
- return current_memory;
119
+ return buffer_pool.current_memory;
72
120
  }
73
121
  //! Returns the maximum available memory
74
122
  idx_t GetMaxMemory() {
75
- return maximum_memory;
123
+ return buffer_pool.maximum_memory;
76
124
  }
77
125
 
78
126
  //! Increases the currently allocated memory, but the actual allocation does not go through the buffer manager
@@ -92,6 +140,10 @@ public:
92
140
  return db;
93
141
  }
94
142
 
143
+ BufferPool &GetBufferPool() {
144
+ return buffer_pool;
145
+ }
146
+
95
147
  static idx_t GetAllocSize(idx_t block_size) {
96
148
  return AlignValue<idx_t, Storage::SECTOR_SIZE>(block_size + Storage::BLOCK_HEADER_SIZE);
97
149
  }
@@ -103,6 +155,11 @@ public:
103
155
  DUCKDB_API void ReserveMemory(idx_t size);
104
156
  DUCKDB_API void FreeReservedMemory(idx_t size);
105
157
 
158
+ //! Set a new memory limit to the buffer pool, throws an exception if the new limit is too low and not enough
159
+ //! blocks can be evicted. (Sugar for calling method directly on the BufferPool.)
160
+ void SetLimit(idx_t limit = (idx_t)-1) {
161
+ buffer_pool.SetLimit(limit, InMemoryWarning());
162
+ }
106
163
  //! Returns a list of all temporary files
107
164
  vector<TemporaryFileInformation> GetTemporaryFiles();
108
165
 
@@ -113,25 +170,6 @@ private:
113
170
  //! This needs to be private to prevent creating blocks without ever pinning them:
114
171
  //! blocks that are never pinned are never added to the eviction queue
115
172
  shared_ptr<BlockHandle> RegisterMemory(idx_t block_size, bool can_destroy);
116
- //! Evict blocks until the currently used memory + extra_memory fit, returns false if this was not possible
117
- //! (i.e. not enough blocks could be evicted)
118
- //! If the "buffer" argument is specified AND the system can find a buffer to re-use for the given allocation size
119
- //! "buffer" will be made to point to the re-usable memory. Note that this is not guaranteed.
120
- //! Returns a pair. result.first indicates if eviction was successful. result.second contains the
121
- //! reservation handle, which can be moved to the BlockHandle that will own the reservation.
122
- struct EvictionResult {
123
- bool success;
124
- TempBufferPoolReservation reservation;
125
- };
126
- EvictionResult EvictBlocks(idx_t extra_memory, idx_t memory_limit, unique_ptr<FileBuffer> *buffer = nullptr);
127
-
128
- //! Helper
129
- template <typename... ARGS>
130
- TempBufferPoolReservation EvictBlocksOrThrow(idx_t extra_memory, idx_t limit, unique_ptr<FileBuffer> *buffer,
131
- ARGS...);
132
-
133
- //! Garbage collect eviction queue
134
- void PurgeQueue();
135
173
 
136
174
  //! Write a temporary buffer to disk
137
175
  void WriteTemporaryBuffer(block_id_t block_id, FileBuffer &buffer);
@@ -144,9 +182,7 @@ private:
144
182
 
145
183
  void RequireTemporaryDirectory();
146
184
 
147
- void AddToEvictionQueue(shared_ptr<BlockHandle> &handle);
148
-
149
- string InMemoryWarning();
185
+ const char *InMemoryWarning();
150
186
 
151
187
  static data_ptr_t BufferAllocatorAllocate(PrivateAllocatorData *private_data, idx_t size);
152
188
  static void BufferAllocatorFree(PrivateAllocatorData *private_data, data_ptr_t pointer, idx_t size);
@@ -157,27 +193,23 @@ private:
157
193
  //! overwrites the data within with garbage. Any readers that do not hold the pin will notice
158
194
  void VerifyZeroReaders(shared_ptr<BlockHandle> &handle);
159
195
 
196
+ //! Helper
197
+ template <typename... ARGS>
198
+ TempBufferPoolReservation EvictBlocksOrThrow(idx_t extra_memory, unique_ptr<FileBuffer> *buffer, ARGS...);
199
+
160
200
  private:
161
201
  //! The database instance
162
202
  DatabaseInstance &db;
163
- //! The lock for changing the memory limit
164
- mutex limit_lock;
165
- //! The current amount of memory that is occupied by the buffer manager (in bytes)
166
- atomic<idx_t> current_memory;
167
- //! The maximum amount of memory that the buffer manager can keep (in bytes)
168
- atomic<idx_t> maximum_memory;
203
+ //! The buffer pool
204
+ BufferPool &buffer_pool;
169
205
  //! The directory name where temporary files are stored
170
206
  string temp_directory;
171
207
  //! Lock for creating the temp handle
172
208
  mutex temp_handle_lock;
173
209
  //! Handle for the temporary directory
174
210
  unique_ptr<TemporaryDirectoryHandle> temp_directory_handle;
175
- //! Eviction queue
176
- unique_ptr<EvictionQueue> queue;
177
211
  //! The temporary id used for managed buffers
178
212
  atomic<block_id_t> temporary_id;
179
- //! Total number of insertions into the eviction queue. This guides the schedule for calling PurgeQueue.
180
- atomic<uint32_t> queue_insertions;
181
213
  //! Allocator associated with the buffer manager, that passes all allocations through this buffer manager
182
214
  Allocator buffer_allocator;
183
215
  //! Block manager for temp data
@@ -12,6 +12,7 @@
12
12
 
13
13
  namespace duckdb {
14
14
  class DuckTableEntry;
15
+ class TableStatistics;
15
16
 
16
17
  //! The table data writer is responsible for writing the data of a table to
17
18
  //! storage.
@@ -30,7 +31,7 @@ public:
30
31
 
31
32
  CompressionType GetColumnCompressionType(idx_t i);
32
33
 
33
- virtual void FinalizeTable(vector<unique_ptr<BaseStatistics>> &&global_stats, DataTableInfo *info) = 0;
34
+ virtual void FinalizeTable(TableStatistics &&global_stats, DataTableInfo *info) = 0;
34
35
  virtual unique_ptr<RowGroupWriter> GetRowGroupWriter(RowGroup &row_group) = 0;
35
36
 
36
37
  virtual void AddRowGroup(RowGroupPointer &&row_group_pointer, unique_ptr<RowGroupWriter> &&writer);
@@ -47,7 +48,7 @@ public:
47
48
  MetaBlockWriter &table_data_writer, MetaBlockWriter &meta_data_writer);
48
49
 
49
50
  public:
50
- virtual void FinalizeTable(vector<unique_ptr<BaseStatistics>> &&global_stats, DataTableInfo *info) override;
51
+ virtual void FinalizeTable(TableStatistics &&global_stats, DataTableInfo *info) override;
51
52
  virtual unique_ptr<RowGroupWriter> GetRowGroupWriter(RowGroup &row_group) override;
52
53
 
53
54
  private:
@@ -44,7 +44,7 @@ protected:
44
44
  virtual void WriteMacro(ScalarMacroCatalogEntry &table);
45
45
  virtual void WriteTableMacro(TableMacroCatalogEntry &table);
46
46
  virtual void WriteIndex(IndexCatalogEntry &index_catalog);
47
- virtual void WriteType(TypeCatalogEntry &table);
47
+ virtual void WriteType(TypeCatalogEntry &type);
48
48
  };
49
49
 
50
50
  class CheckpointReader {
@@ -18,7 +18,7 @@
18
18
  #include "duckdb/function/compression/compression.hpp"
19
19
  #include "duckdb/main/config.hpp"
20
20
  #include "duckdb/storage/buffer_manager.hpp"
21
- #include "duckdb/storage/statistics/numeric_statistics.hpp"
21
+
22
22
  #include "duckdb/storage/table/column_data_checkpointer.hpp"
23
23
  #include "duckdb/storage/table/column_segment.hpp"
24
24
  #include "duckdb/common/operator/subtract.hpp"
@@ -150,7 +150,7 @@ public:
150
150
 
151
151
  if (is_valid) {
152
152
  T floating_point_value = Load<T>((const_data_ptr_t)&value);
153
- NumericStatistics::Update<T>(current_segment->stats, floating_point_value);
153
+ NumericStats::Update<T>(current_segment->stats.statistics, floating_point_value);
154
154
  } else {
155
155
  //! FIXME: find a cheaper alternative to storing a NULL
156
156
  // store this as "value_identical", only using 9 bits for a NULL
@@ -17,7 +17,7 @@
17
17
  #include "duckdb/function/compression_function.hpp"
18
18
  #include "duckdb/main/config.hpp"
19
19
  #include "duckdb/storage/buffer_manager.hpp"
20
- #include "duckdb/storage/statistics/numeric_statistics.hpp"
20
+
21
21
  #include "duckdb/storage/table/column_data_checkpointer.hpp"
22
22
  #include "duckdb/storage/table/column_segment.hpp"
23
23
  #include "duckdb/common/operator/subtract.hpp"
@@ -17,13 +17,14 @@
17
17
  #include "duckdb/function/compression_function.hpp"
18
18
  #include "duckdb/main/config.hpp"
19
19
  #include "duckdb/storage/buffer_manager.hpp"
20
- #include "duckdb/storage/statistics/numeric_statistics.hpp"
20
+
21
21
  #include "duckdb/storage/table/column_data_checkpointer.hpp"
22
22
  #include "duckdb/storage/table/column_segment.hpp"
23
23
  #include "duckdb/common/operator/subtract.hpp"
24
24
 
25
25
  #include "duckdb/storage/compression/chimp/algorithm/flag_buffer.hpp"
26
26
  #include "duckdb/storage/compression/chimp/algorithm/leading_zero_buffer.hpp"
27
+ #include "duckdb/storage/table/scan_state.hpp"
27
28
 
28
29
  namespace duckdb {
29
30
 
@@ -18,7 +18,7 @@
18
18
  #include "duckdb/function/compression/compression.hpp"
19
19
  #include "duckdb/main/config.hpp"
20
20
  #include "duckdb/storage/buffer_manager.hpp"
21
- #include "duckdb/storage/statistics/numeric_statistics.hpp"
21
+
22
22
  #include "duckdb/storage/table/column_data_checkpointer.hpp"
23
23
  #include "duckdb/storage/table/column_segment.hpp"
24
24
  #include "duckdb/common/operator/subtract.hpp"
@@ -49,7 +49,7 @@ public:
49
49
  }
50
50
 
51
51
  if (is_valid) {
52
- NumericStatistics::Update<VALUE_TYPE>(state_wrapper->current_segment->stats, value);
52
+ NumericStats::Update<VALUE_TYPE>(state_wrapper->current_segment->stats.statistics, value);
53
53
  }
54
54
 
55
55
  state_wrapper->WriteValue(Load<EXACT_TYPE>((const_data_ptr_t)&value));
@@ -17,7 +17,7 @@
17
17
  #include "duckdb/function/compression_function.hpp"
18
18
  #include "duckdb/main/config.hpp"
19
19
  #include "duckdb/storage/buffer_manager.hpp"
20
- #include "duckdb/storage/statistics/numeric_statistics.hpp"
20
+
21
21
  #include "duckdb/storage/table/column_data_checkpointer.hpp"
22
22
  #include "duckdb/storage/table/column_segment.hpp"
23
23
  #include "duckdb/common/operator/subtract.hpp"
@@ -17,10 +17,11 @@
17
17
  #include "duckdb/function/compression_function.hpp"
18
18
  #include "duckdb/main/config.hpp"
19
19
  #include "duckdb/storage/buffer_manager.hpp"
20
- #include "duckdb/storage/statistics/numeric_statistics.hpp"
20
+
21
21
  #include "duckdb/storage/table/column_data_checkpointer.hpp"
22
22
  #include "duckdb/storage/table/column_segment.hpp"
23
23
  #include "duckdb/common/operator/subtract.hpp"
24
+ #include "duckdb/storage/table/scan_state.hpp"
24
25
 
25
26
  namespace duckdb {
26
27
 
@@ -18,12 +18,15 @@
18
18
  namespace duckdb {
19
19
 
20
20
  struct DataPointer {
21
+ DataPointer(BaseStatistics stats) : statistics(std::move(stats)) {
22
+ }
23
+
21
24
  uint64_t row_start;
22
25
  uint64_t tuple_count;
23
26
  BlockPointer block_pointer;
24
27
  CompressionType compression_type;
25
28
  //! Type-specific statistics of the segment
26
- unique_ptr<BaseStatistics> statistics;
29
+ BaseStatistics statistics;
27
30
  };
28
31
 
29
32
  struct RowGroupPointer {
@@ -31,8 +34,6 @@ struct RowGroupPointer {
31
34
  uint64_t tuple_count;
32
35
  //! The data pointers of the column segments stored in the row group
33
36
  vector<BlockPointer> data_pointers;
34
- //! The per-column statistics of the row group
35
- vector<unique_ptr<BaseStatistics>> statistics;
36
37
  //! The versions information of the row group (if any)
37
38
  shared_ptr<VersionNode> versions;
38
39
  };
@@ -39,6 +39,7 @@ class Transaction;
39
39
  class WriteAheadLog;
40
40
  class TableDataWriter;
41
41
  class ConflictManager;
42
+ class TableScanState;
42
43
  enum class VerifyExistenceType : uint8_t;
43
44
 
44
45
  //! DataTable represents a physical table on disk
@@ -150,8 +151,8 @@ public:
150
151
 
151
152
  //! Append a chunk with the row ids [row_start, ..., row_start + chunk.size()] to all indexes of the table, returns
152
153
  //! whether or not the append succeeded
153
- bool AppendToIndexes(DataChunk &chunk, row_t row_start);
154
- static bool AppendToIndexes(TableIndexList &indexes, DataChunk &chunk, row_t row_start);
154
+ PreservedError AppendToIndexes(DataChunk &chunk, row_t row_start);
155
+ static PreservedError AppendToIndexes(TableIndexList &indexes, DataChunk &chunk, row_t row_start);
155
156
  //! Remove a chunk with the row ids [row_start, ..., row_start + chunk.size()] from all indexes of the table
156
157
  void RemoveFromIndexes(TableAppendState &state, DataChunk &chunk, row_t row_start);
157
158
  //! Remove the chunk with the specified set of row identifiers from all indexes of the table
@@ -169,7 +170,7 @@ public:
169
170
  //! Get statistics of a physical column within the table
170
171
  unique_ptr<BaseStatistics> GetStatistics(ClientContext &context, column_t column_id);
171
172
  //! Sets statistics of a physical column within the table
172
- void SetStatistics(column_t column_id, const std::function<void(BaseStatistics &)> &set_fun);
173
+ void SetDistinct(column_t column_id, unique_ptr<DistinctStatistics> distinct_stats);
173
174
 
174
175
  //! Checkpoint the table to the specified table data writer
175
176
  void Checkpoint(TableDataWriter &writer);
@@ -14,7 +14,6 @@
14
14
  #include "duckdb/common/sort/sort.hpp"
15
15
  #include "duckdb/parser/parsed_expression.hpp"
16
16
  #include "duckdb/planner/expression.hpp"
17
- #include "duckdb/storage/table/scan_state.hpp"
18
17
  #include "duckdb/storage/meta_block_writer.hpp"
19
18
  #include "duckdb/execution/expression_executor.hpp"
20
19
  #include "duckdb/common/types/constraint_conflict_info.hpp"
@@ -27,6 +26,7 @@ class Transaction;
27
26
  class ConflictManager;
28
27
 
29
28
  struct IndexLock;
29
+ struct IndexScanState;
30
30
 
31
31
  //! The index is an abstract base class that serves as the basis for indexes
32
32
  class Index {
@@ -80,9 +80,9 @@ public:
80
80
  //! Obtain a lock on the index
81
81
  virtual void InitializeLock(IndexLock &state);
82
82
  //! Called when data is appended to the index. The lock obtained from InitializeLock must be held
83
- virtual bool Append(IndexLock &state, DataChunk &entries, Vector &row_identifiers) = 0;
83
+ virtual PreservedError Append(IndexLock &state, DataChunk &entries, Vector &row_identifiers) = 0;
84
84
  //! Obtains a lock and calls Append while holding that lock
85
- bool Append(DataChunk &entries, Vector &row_identifiers);
85
+ PreservedError Append(DataChunk &entries, Vector &row_identifiers);
86
86
  //! Verify that data can be appended to the index without a constraint violation
87
87
  virtual void VerifyAppend(DataChunk &chunk) = 0;
88
88
  //! Verify that data can be appended to the index without a constraint violation using the conflict manager
@@ -96,7 +96,7 @@ public:
96
96
  void Delete(DataChunk &entries, Vector &row_identifiers);
97
97
 
98
98
  //! Insert a chunk of entries into the index
99
- virtual bool Insert(IndexLock &lock, DataChunk &input, Vector &row_identifiers) = 0;
99
+ virtual PreservedError Insert(IndexLock &lock, DataChunk &input, Vector &row_identifiers) = 0;
100
100
 
101
101
  //! Merge another index into this index. The lock obtained from InitializeLock must be held, and the other
102
102
  //! index must also be locked during the merge
@@ -147,6 +147,7 @@ public:
147
147
 
148
148
  //! Execute the index expressions on an input chunk
149
149
  void ExecuteExpressions(DataChunk &input, DataChunk &result);
150
+ static string AppendRowError(DataChunk &input, idx_t index);
150
151
 
151
152
  protected:
152
153
  //! Lock used for any changes to the index
@@ -36,7 +36,14 @@ public:
36
36
  //! Read content of size read_size into the buffer
37
37
  void ReadData(data_ptr_t buffer, idx_t read_size) override;
38
38
 
39
+ ClientContext &GetContext() override;
40
+ Catalog *GetCatalog() override;
41
+ void SetCatalog(Catalog *catalog_p);
42
+ void SetContext(ClientContext *context_p);
43
+
39
44
  private:
40
45
  void ReadNewBlock(block_id_t id);
46
+ Catalog *catalog = nullptr;
47
+ ClientContext *context = nullptr;
41
48
  };
42
49
  } // namespace duckdb