duckdb 0.7.2-dev12.0 → 0.7.2-dev1244.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
@@ -9,13 +9,12 @@
9
9
  #pragma once
10
10
 
11
11
  #include "duckdb/common/types/data_chunk.hpp"
12
- #include "duckdb/storage/table/append_state.hpp"
13
- #include "duckdb/storage/table/scan_state.hpp"
14
12
  #include "duckdb/storage/statistics/base_statistics.hpp"
15
13
  #include "duckdb/storage/data_pointer.hpp"
16
14
  #include "duckdb/storage/table/persistent_table_data.hpp"
17
15
  #include "duckdb/storage/statistics/segment_statistics.hpp"
18
- #include "duckdb/storage/table/column_checkpoint_state.hpp"
16
+ #include "duckdb/storage/table/segment_tree.hpp"
17
+ #include "duckdb/storage/table/column_segment_tree.hpp"
19
18
  #include "duckdb/common/mutex.hpp"
20
19
 
21
20
  namespace duckdb {
@@ -31,7 +30,7 @@ struct TransactionData;
31
30
  struct DataTableInfo;
32
31
 
33
32
  struct ColumnCheckpointInfo {
34
- ColumnCheckpointInfo(CompressionType compression_type_p) : compression_type(compression_type_p) {};
33
+ explicit ColumnCheckpointInfo(CompressionType compression_type_p) : compression_type(compression_type_p) {};
35
34
  CompressionType compression_type;
36
35
  };
37
36
 
@@ -44,14 +43,16 @@ public:
44
43
  ColumnData(ColumnData &other, idx_t start, ColumnData *parent);
45
44
  virtual ~ColumnData();
46
45
 
46
+ //! The start row
47
+ const idx_t start;
48
+ //! The count of the column data
49
+ idx_t count;
47
50
  //! The block manager
48
51
  BlockManager &block_manager;
49
52
  //! Table info for the column
50
53
  DataTableInfo &info;
51
54
  //! The column index of the column, either within the parent table or within the parent
52
55
  idx_t column_index;
53
- //! The start row
54
- idx_t start;
55
56
  //! The type of the column
56
57
  LogicalType type;
57
58
  //! The parent column (if any)
@@ -60,6 +61,9 @@ public:
60
61
  public:
61
62
  virtual bool CheckZonemap(ColumnScanState &state, TableFilter &filter) = 0;
62
63
 
64
+ BlockManager &GetBlockManager() {
65
+ return block_manager;
66
+ }
63
67
  DatabaseInstance &GetDatabase() const;
64
68
  DataTableInfo &GetTableInfo() const;
65
69
  virtual idx_t GetMaxEntry();
@@ -93,6 +97,8 @@ public:
93
97
  virtual void InitializeAppend(ColumnAppendState &state);
94
98
  //! Append a vector of type [type] to the end of the column
95
99
  virtual void Append(BaseStatistics &stats, ColumnAppendState &state, Vector &vector, idx_t count);
100
+ //! Append a vector of type [type] to the end of the column
101
+ void Append(ColumnAppendState &state, Vector &vector, idx_t count);
96
102
  virtual void AppendData(BaseStatistics &stats, ColumnAppendState &state, UnifiedVectorFormat &vdata, idx_t count);
97
103
  //! Revert a set of appends to the ColumnData
98
104
  virtual void RevertAppend(row_t start_row);
@@ -127,6 +133,8 @@ public:
127
133
  virtual void GetStorageInfo(idx_t row_group_index, vector<idx_t> col_path, TableStorageInfo &result);
128
134
  virtual void Verify(RowGroup &parent);
129
135
 
136
+ bool CheckZonemap(TableFilter &filter);
137
+
130
138
  static shared_ptr<ColumnData> CreateColumn(BlockManager &block_manager, DataTableInfo &info, idx_t column_index,
131
139
  idx_t start_row, const LogicalType &type, ColumnData *parent = nullptr);
132
140
  static shared_ptr<ColumnData> CreateColumn(ColumnData &other, idx_t start_row, ColumnData *parent = nullptr);
@@ -135,6 +143,10 @@ public:
135
143
  ColumnData *parent = nullptr);
136
144
  static unique_ptr<ColumnData> CreateColumnUnique(ColumnData &other, idx_t start_row, ColumnData *parent = nullptr);
137
145
 
146
+ void MergeStatistics(const BaseStatistics &other);
147
+ void MergeIntoStatistics(BaseStatistics &other);
148
+ unique_ptr<BaseStatistics> GetStatistics();
149
+
138
150
  protected:
139
151
  //! Append a transient segment
140
152
  void AppendTransientSegment(SegmentLock &l, idx_t start_row);
@@ -148,13 +160,15 @@ protected:
148
160
 
149
161
  protected:
150
162
  //! The segments holding the data of this column segment
151
- SegmentTree data;
163
+ ColumnSegmentTree data;
152
164
  //! The lock for the updates
153
165
  mutex update_lock;
154
166
  //! The updates for this column segment
155
167
  unique_ptr<UpdateSegment> updates;
156
168
  //! The internal version of the column data
157
169
  idx_t version;
170
+ //! The stats of the root segment
171
+ unique_ptr<SegmentStatistics> stats;
158
172
  };
159
173
 
160
174
  } // namespace duckdb
@@ -10,6 +10,7 @@
10
10
 
11
11
  #include "duckdb/storage/table/column_data.hpp"
12
12
  #include "duckdb/function/compression_function.hpp"
13
+ #include "duckdb/storage/table/column_checkpoint_state.hpp"
13
14
 
14
15
  namespace duckdb {
15
16
 
@@ -25,7 +26,7 @@ public:
25
26
  RowGroup &GetRowGroup();
26
27
  ColumnCheckpointState &GetCheckpointState();
27
28
 
28
- void Checkpoint(vector<SegmentNode> nodes);
29
+ void Checkpoint(vector<SegmentNode<ColumnSegment>> nodes);
29
30
 
30
31
  private:
31
32
  void ScanSegments(const std::function<void(Vector &, idx_t)> &callback);
@@ -40,7 +41,7 @@ private:
40
41
  ColumnCheckpointState &state;
41
42
  bool is_validity;
42
43
  Vector intermediate;
43
- vector<SegmentNode> nodes;
44
+ vector<SegmentNode<ColumnSegment>> nodes;
44
45
  vector<CompressionFunction *> compression_functions;
45
46
  ColumnCheckpointInfo &checkpoint_info;
46
47
  };
@@ -9,14 +9,13 @@
9
9
  #pragma once
10
10
 
11
11
  #include "duckdb/storage/block.hpp"
12
- #include "duckdb/storage/table/segment_tree.hpp"
13
12
  #include "duckdb/common/types.hpp"
14
13
  #include "duckdb/common/types/vector.hpp"
15
14
  #include "duckdb/storage/buffer_manager.hpp"
16
15
  #include "duckdb/storage/statistics/segment_statistics.hpp"
17
16
  #include "duckdb/storage/storage_lock.hpp"
18
- #include "duckdb/storage/table/scan_state.hpp"
19
17
  #include "duckdb/function/compression_function.hpp"
18
+ #include "duckdb/storage/table/segment_base.hpp"
20
19
 
21
20
  namespace duckdb {
22
21
  class ColumnSegment;
@@ -35,9 +34,9 @@ struct ColumnAppendState;
35
34
  enum class ColumnSegmentType : uint8_t { TRANSIENT, PERSISTENT };
36
35
  //! TableFilter represents a filter pushed down into the table scan.
37
36
 
38
- class ColumnSegment : public SegmentBase {
37
+ class ColumnSegment : public SegmentBase<ColumnSegment> {
39
38
  public:
40
- ~ColumnSegment() override;
39
+ ~ColumnSegment();
41
40
 
42
41
  //! The database instance
43
42
  DatabaseInstance &db;
@@ -57,7 +56,7 @@ public:
57
56
  static unique_ptr<ColumnSegment> CreatePersistentSegment(DatabaseInstance &db, BlockManager &block_manager,
58
57
  block_id_t id, idx_t offset, const LogicalType &type_p,
59
58
  idx_t start, idx_t count, CompressionType compression_type,
60
- unique_ptr<BaseStatistics> statistics);
59
+ BaseStatistics statistics);
61
60
  static unique_ptr<ColumnSegment> CreateTransientSegment(DatabaseInstance &db, const LogicalType &type, idx_t start,
62
61
  idx_t segment_size = Storage::BLOCK_SIZE);
63
62
  static unique_ptr<ColumnSegment> CreateSegment(ColumnSegment &other, idx_t start);
@@ -124,7 +123,7 @@ public:
124
123
 
125
124
  public:
126
125
  ColumnSegment(DatabaseInstance &db, shared_ptr<BlockHandle> block, LogicalType type, ColumnSegmentType segment_type,
127
- idx_t start, idx_t count, CompressionFunction *function, unique_ptr<BaseStatistics> statistics,
126
+ idx_t start, idx_t count, CompressionFunction *function, BaseStatistics statistics,
128
127
  block_id_t block_id, idx_t offset, idx_t segment_size);
129
128
  ColumnSegment(ColumnSegment &other, idx_t start);
130
129
 
@@ -0,0 +1,18 @@
1
+ //===----------------------------------------------------------------------===//
2
+ // DuckDB
3
+ //
4
+ // duckdb/storage/table/column_segment_tree.hpp
5
+ //
6
+ //
7
+ //===----------------------------------------------------------------------===//
8
+
9
+ #pragma once
10
+
11
+ #include "duckdb/storage/table/segment_tree.hpp"
12
+ #include "duckdb/storage/table/column_segment.hpp"
13
+
14
+ namespace duckdb {
15
+
16
+ class ColumnSegmentTree : public SegmentTree<ColumnSegment> {};
17
+
18
+ } // namespace duckdb
@@ -61,7 +61,7 @@ public:
61
61
  void GetStorageInfo(idx_t row_group_index, vector<idx_t> col_path, TableStorageInfo &result) override;
62
62
 
63
63
  private:
64
- list_entry_t FetchListEntry(idx_t row_idx);
64
+ uint64_t FetchListOffset(idx_t row_idx);
65
65
  };
66
66
 
67
67
  } // namespace duckdb
@@ -10,8 +10,8 @@
10
10
 
11
11
  #include "duckdb/common/constants.hpp"
12
12
  #include "duckdb/common/vector.hpp"
13
- #include "duckdb/storage/table/segment_tree.hpp"
14
13
  #include "duckdb/storage/data_pointer.hpp"
14
+ #include "duckdb/storage/table/table_statistics.hpp"
15
15
 
16
16
  namespace duckdb {
17
17
  class BaseStatistics;
@@ -21,8 +21,11 @@ public:
21
21
  explicit PersistentTableData(idx_t column_count);
22
22
  ~PersistentTableData();
23
23
 
24
- vector<RowGroupPointer> row_groups;
25
- vector<unique_ptr<BaseStatistics>> column_stats;
24
+ TableStatistics table_stats;
25
+ idx_t total_rows;
26
+ idx_t row_group_count;
27
+ block_id_t block_id;
28
+ idx_t offset;
26
29
  };
27
30
 
28
31
  } // namespace duckdb
@@ -9,14 +9,14 @@
9
9
  #pragma once
10
10
 
11
11
  #include "duckdb/common/vector_size.hpp"
12
- #include "duckdb/storage/table/segment_base.hpp"
13
12
  #include "duckdb/storage/table/chunk_info.hpp"
14
- #include "duckdb/storage/table/append_state.hpp"
15
- #include "duckdb/storage/table/scan_state.hpp"
16
13
  #include "duckdb/storage/statistics/segment_statistics.hpp"
14
+ #include "duckdb/common/types/data_chunk.hpp"
17
15
  #include "duckdb/common/enums/scan_options.hpp"
18
16
  #include "duckdb/common/mutex.hpp"
19
17
  #include "duckdb/parser/column_list.hpp"
18
+ #include "duckdb/storage/table/segment_base.hpp"
19
+ #include "duckdb/storage/block.hpp"
20
20
 
21
21
  namespace duckdb {
22
22
  class AttachedDatabase;
@@ -27,21 +27,27 @@ class DataTable;
27
27
  class PartialBlockManager;
28
28
  struct DataTableInfo;
29
29
  class ExpressionExecutor;
30
+ class RowGroupCollection;
30
31
  class RowGroupWriter;
31
32
  class UpdateSegment;
33
+ class TableStatistics;
32
34
  class TableStorageInfo;
33
35
  class Vector;
34
36
  struct ColumnCheckpointState;
35
37
  struct RowGroupPointer;
36
38
  struct TransactionData;
37
39
  struct VersionNode;
40
+ class CollectionScanState;
41
+ class TableFilterSet;
42
+ struct ColumnFetchState;
43
+ struct RowGroupAppendState;
38
44
 
39
45
  struct RowGroupWriteData {
40
46
  vector<unique_ptr<ColumnCheckpointState>> states;
41
- vector<unique_ptr<BaseStatistics>> statistics;
47
+ vector<BaseStatistics> statistics;
42
48
  };
43
49
 
44
- class RowGroup : public SegmentBase {
50
+ class RowGroup : public SegmentBase<RowGroup> {
45
51
  public:
46
52
  friend class ColumnData;
47
53
  friend class VersionDeleteState;
@@ -51,48 +57,33 @@ public:
51
57
  static constexpr const idx_t ROW_GROUP_VECTOR_COUNT = ROW_GROUP_SIZE / STANDARD_VECTOR_SIZE;
52
58
 
53
59
  public:
54
- RowGroup(AttachedDatabase &db, BlockManager &block_manager, DataTableInfo &table_info, idx_t start, idx_t count);
55
- RowGroup(AttachedDatabase &db, BlockManager &block_manager, DataTableInfo &table_info,
56
- const vector<LogicalType> &types, RowGroupPointer &&pointer);
57
- RowGroup(RowGroup &row_group, idx_t start);
60
+ RowGroup(RowGroupCollection &collection, idx_t start, idx_t count);
61
+ RowGroup(RowGroupCollection &collection, RowGroupPointer &&pointer);
62
+ RowGroup(RowGroup &row_group, RowGroupCollection &collection, idx_t start);
58
63
  ~RowGroup();
59
64
 
60
65
  private:
61
- //! The database instance
62
- AttachedDatabase &db;
63
- //! The block manager
64
- BlockManager &block_manager;
65
- //! The table info of this row_group
66
- DataTableInfo &table_info;
66
+ //! The RowGroupCollection this row-group is a part of
67
+ RowGroupCollection &collection;
67
68
  //! The version info of the row_group (inserted and deleted tuple info)
68
69
  shared_ptr<VersionNode> version_info;
69
70
  //! The column data of the row_group
70
71
  vector<shared_ptr<ColumnData>> columns;
71
- //! The segment statistics for each of the columns
72
- vector<shared_ptr<SegmentStatistics>> stats;
73
72
 
74
73
  public:
75
- DatabaseInstance &GetDatabase();
76
- BlockManager &GetBlockManager() {
77
- return block_manager;
78
- }
79
- DataTableInfo &GetTableInfo() {
80
- return table_info;
81
- }
82
- idx_t GetColumnIndex(ColumnData *data) {
83
- for (idx_t i = 0; i < columns.size(); i++) {
84
- if (columns[i].get() == data) {
85
- return i;
86
- }
87
- }
88
- return 0;
74
+ RowGroupCollection &GetCollection() {
75
+ return collection;
89
76
  }
77
+ DatabaseInstance &GetDatabase();
78
+ BlockManager &GetBlockManager();
79
+ DataTableInfo &GetTableInfo();
90
80
 
91
- unique_ptr<RowGroup> AlterType(const LogicalType &target_type, idx_t changed_idx, ExpressionExecutor &executor,
92
- RowGroupScanState &scan_state, DataChunk &scan_chunk);
93
- unique_ptr<RowGroup> AddColumn(ColumnDefinition &new_column, ExpressionExecutor &executor,
94
- Expression *default_value, Vector &intermediate);
95
- unique_ptr<RowGroup> RemoveColumn(idx_t removed_column);
81
+ unique_ptr<RowGroup> AlterType(RowGroupCollection &collection, const LogicalType &target_type, idx_t changed_idx,
82
+ ExpressionExecutor &executor, CollectionScanState &scan_state,
83
+ DataChunk &scan_chunk);
84
+ unique_ptr<RowGroup> AddColumn(RowGroupCollection &collection, ColumnDefinition &new_column,
85
+ ExpressionExecutor &executor, Expression *default_value, Vector &intermediate);
86
+ unique_ptr<RowGroup> RemoveColumn(RowGroupCollection &collection, idx_t removed_column);
96
87
 
97
88
  void CommitDrop();
98
89
  void CommitDropColumn(idx_t index);
@@ -100,16 +91,16 @@ public:
100
91
  void InitializeEmpty(const vector<LogicalType> &types);
101
92
 
102
93
  //! Initialize a scan over this row_group
103
- bool InitializeScan(RowGroupScanState &state);
104
- bool InitializeScanWithOffset(RowGroupScanState &state, idx_t vector_offset);
94
+ bool InitializeScan(CollectionScanState &state);
95
+ bool InitializeScanWithOffset(CollectionScanState &state, idx_t vector_offset);
105
96
  //! Checks the given set of table filters against the row-group statistics. Returns false if the entire row group
106
97
  //! can be skipped.
107
98
  bool CheckZonemap(TableFilterSet &filters, const vector<column_t> &column_ids);
108
99
  //! Checks the given set of table filters against the per-segment statistics. Returns false if any segments were
109
100
  //! skipped.
110
- bool CheckZonemapSegments(RowGroupScanState &state);
111
- void Scan(TransactionData transaction, RowGroupScanState &state, DataChunk &result);
112
- void ScanCommitted(RowGroupScanState &state, DataChunk &result, TableScanType type);
101
+ bool CheckZonemapSegments(CollectionScanState &state);
102
+ void Scan(TransactionData transaction, CollectionScanState &state, DataChunk &result);
103
+ void ScanCommitted(CollectionScanState &state, DataChunk &result, TableScanType type);
113
104
 
114
105
  idx_t GetSelVector(TransactionData transaction, idx_t vector_idx, SelectionVector &sel_vector, idx_t max_count);
115
106
  idx_t GetCommittedSelVector(transaction_t start_time, transaction_t transaction_id, idx_t vector_idx,
@@ -132,9 +123,9 @@ public:
132
123
  idx_t Delete(TransactionData transaction, DataTable *table, row_t *row_ids, idx_t count);
133
124
 
134
125
  RowGroupWriteData WriteToDisk(PartialBlockManager &manager, const vector<CompressionType> &compression_types);
135
- RowGroupPointer Checkpoint(RowGroupWriter &writer, vector<unique_ptr<BaseStatistics>> &global_stats);
126
+ RowGroupPointer Checkpoint(RowGroupWriter &writer, TableStatistics &global_stats);
136
127
  static void Serialize(RowGroupPointer &pointer, Serializer &serializer);
137
- static RowGroupPointer Deserialize(Deserializer &source, const ColumnList &columns);
128
+ static RowGroupPointer Deserialize(Deserializer &source, const vector<LogicalType> &columns);
138
129
 
139
130
  void InitializeAppend(RowGroupAppendState &append_state);
140
131
  void Append(RowGroupAppendState &append_state, DataChunk &chunk, idx_t append_count);
@@ -154,13 +145,16 @@ public:
154
145
 
155
146
  void Verify();
156
147
 
157
- void NextVector(RowGroupScanState &state);
148
+ void NextVector(CollectionScanState &state);
158
149
 
159
150
  private:
160
151
  ChunkInfo *GetChunkInfo(idx_t vector_idx);
152
+ ColumnData &GetColumn(idx_t c);
153
+ idx_t GetColumnCount() const;
154
+ vector<shared_ptr<ColumnData>> &GetColumns();
161
155
 
162
156
  template <TableScanType TYPE>
163
- void TemplatedScan(TransactionData transaction, RowGroupScanState &state, DataChunk &result);
157
+ void TemplatedScan(TransactionData transaction, CollectionScanState &state, DataChunk &result);
164
158
 
165
159
  static void CheckpointDeletes(VersionNode *versions, Serializer &serializer);
166
160
  static shared_ptr<VersionNode> DeserializeDeletes(Deserializer &source);
@@ -168,6 +162,8 @@ private:
168
162
  private:
169
163
  mutex row_group_lock;
170
164
  mutex stats_lock;
165
+ vector<BlockPointer> column_pointers;
166
+ unique_ptr<atomic<bool>[]> is_loaded;
171
167
  };
172
168
 
173
169
  struct VersionNode {
@@ -15,13 +15,17 @@
15
15
 
16
16
  namespace duckdb {
17
17
  struct ParallelTableScanState;
18
-
18
+ struct ParallelCollectionScanState;
19
+ class CreateIndexScanState;
20
+ class CollectionScanState;
19
21
  class PersistentTableData;
20
22
  class TableDataWriter;
21
23
  class TableIndexList;
22
24
  class TableStatistics;
23
-
25
+ struct TableAppendState;
26
+ class DuckTransaction;
24
27
  class BoundConstraint;
28
+ class RowGroupSegmentTree;
25
29
 
26
30
  class RowGroupCollection {
27
31
  public:
@@ -46,8 +50,8 @@ public:
46
50
  void InitializeCreateIndexScan(CreateIndexScanState &state);
47
51
  void InitializeScanWithOffset(CollectionScanState &state, const vector<column_t> &column_ids, idx_t start_row,
48
52
  idx_t end_row);
49
- static bool InitializeScanInRowGroup(CollectionScanState &state, RowGroup *row_group, idx_t vector_index,
50
- idx_t max_row);
53
+ static bool InitializeScanInRowGroup(CollectionScanState &state, RowGroupCollection &collection,
54
+ RowGroup &row_group, idx_t vector_index, idx_t max_row);
51
55
  void InitializeParallelScan(ParallelCollectionScanState &state);
52
56
  bool NextParallelScan(ClientContext &context, ParallelCollectionScanState &state, CollectionScanState &scan_state);
53
57
 
@@ -78,7 +82,7 @@ public:
78
82
  void UpdateColumn(TransactionData transaction, Vector &row_ids, const vector<column_t> &column_path,
79
83
  DataChunk &updates);
80
84
 
81
- void Checkpoint(TableDataWriter &writer, vector<unique_ptr<BaseStatistics>> &global_stats);
85
+ void Checkpoint(TableDataWriter &writer, TableStatistics &global_stats);
82
86
 
83
87
  void CommitDropColumn(idx_t index);
84
88
  void CommitDropTable();
@@ -93,8 +97,18 @@ public:
93
97
  vector<column_t> bound_columns, Expression &cast_expr);
94
98
  void VerifyNewConstraint(DataTable &parent, const BoundConstraint &constraint);
95
99
 
100
+ void CopyStats(TableStatistics &stats);
96
101
  unique_ptr<BaseStatistics> CopyStats(column_t column_id);
97
- void SetStatistics(column_t column_id, const std::function<void(BaseStatistics &)> &set_fun);
102
+ void SetDistinct(column_t column_id, unique_ptr<DistinctStatistics> distinct_stats);
103
+
104
+ AttachedDatabase &GetAttached();
105
+ DatabaseInstance &GetDatabase();
106
+ BlockManager &GetBlockManager() {
107
+ return block_manager;
108
+ }
109
+ DataTableInfo &GetTableInfo() {
110
+ return *info;
111
+ }
98
112
 
99
113
  private:
100
114
  bool IsEmpty(SegmentLock &) const;
@@ -104,11 +118,13 @@ private:
104
118
  BlockManager &block_manager;
105
119
  //! The number of rows in the table
106
120
  atomic<idx_t> total_rows;
121
+ //! The data table info
107
122
  shared_ptr<DataTableInfo> info;
123
+ //! The column types of the row group collection
108
124
  vector<LogicalType> types;
109
125
  idx_t row_start;
110
126
  //! The segment trees holding the various row_groups of the table
111
- shared_ptr<SegmentTree> row_groups;
127
+ shared_ptr<RowGroupSegmentTree> row_groups;
112
128
  //! Table statistics
113
129
  TableStatistics stats;
114
130
  };
@@ -0,0 +1,35 @@
1
+ //===----------------------------------------------------------------------===//
2
+ // DuckDB
3
+ //
4
+ // duckdb/storage/table/row_group_segment_tree.hpp
5
+ //
6
+ //
7
+ //===----------------------------------------------------------------------===//
8
+
9
+ #pragma once
10
+
11
+ #include "duckdb/storage/table/segment_tree.hpp"
12
+ #include "duckdb/storage/table/row_group.hpp"
13
+
14
+ namespace duckdb {
15
+ struct DataTableInfo;
16
+ class PersistentTableData;
17
+ class MetaBlockReader;
18
+
19
+ class RowGroupSegmentTree : public SegmentTree<RowGroup, true> {
20
+ public:
21
+ RowGroupSegmentTree(RowGroupCollection &collection);
22
+ ~RowGroupSegmentTree() override;
23
+
24
+ void Initialize(PersistentTableData &data);
25
+
26
+ protected:
27
+ unique_ptr<RowGroup> LoadSegment() override;
28
+
29
+ RowGroupCollection &collection;
30
+ idx_t current_row_group;
31
+ idx_t max_row_group;
32
+ unique_ptr<MetaBlockReader> reader;
33
+ };
34
+
35
+ } // namespace duckdb
@@ -25,10 +25,12 @@ class RowGroupCollection;
25
25
  class UpdateSegment;
26
26
  class TableScanState;
27
27
  class ColumnSegment;
28
+ class ColumnSegmentTree;
28
29
  class ValiditySegment;
29
30
  class TableFilterSet;
30
31
  class ColumnData;
31
32
  class DuckTransaction;
33
+ class RowGroupSegmentTree;
32
34
 
33
35
  struct SegmentScanState {
34
36
  virtual ~SegmentScanState() {
@@ -45,6 +47,8 @@ typedef unordered_map<block_id_t, BufferHandle> buffer_handle_set_t;
45
47
  struct ColumnScanState {
46
48
  //! The column segment that is currently being scanned
47
49
  ColumnSegment *current = nullptr;
50
+ //! Column segment tree
51
+ ColumnSegmentTree *segment_tree = nullptr;
48
52
  //! The current row index of the scan
49
53
  idx_t row_index = 0;
50
54
  //! The internal row index (i.e. the position of the SegmentScanState)
@@ -64,14 +68,15 @@ struct ColumnScanState {
64
68
  //! We initialize one SegmentScanState per segment, however, if scanning a DataChunk requires us to scan over more
65
69
  //! than one Segment, we need to keep the scan states of the previous segments around
66
70
  vector<unique_ptr<SegmentScanState>> previous_states;
71
+ //! The last read offset in the child state (used for LIST columns only)
72
+ idx_t last_offset = 0;
67
73
 
68
74
  public:
75
+ void Initialize(const LogicalType &type);
69
76
  //! Move the scan state forward by "count" rows (including all child states)
70
77
  void Next(idx_t count);
71
78
  //! Move ONLY this state forward by "count" rows (i.e. not the child states)
72
79
  void NextInternal(idx_t count);
73
- //! Move the scan state forward by STANDARD_VECTOR_SIZE rows
74
- void NextVector();
75
80
  };
76
81
 
77
82
  struct ColumnFetchState {
@@ -83,50 +88,33 @@ struct ColumnFetchState {
83
88
  BufferHandle &GetOrInsertHandle(ColumnSegment &segment);
84
89
  };
85
90
 
86
- class RowGroupScanState {
91
+ class CollectionScanState {
87
92
  public:
88
- RowGroupScanState(CollectionScanState &parent_p)
89
- : row_group(nullptr), vector_index(0), max_row(0), parent(parent_p) {
90
- }
93
+ CollectionScanState(TableScanState &parent_p);
91
94
 
92
95
  //! The current row_group we are scanning
93
- RowGroup *row_group = nullptr;
96
+ RowGroup *row_group;
94
97
  //! The vector index within the row_group
95
- idx_t vector_index = 0;
96
- //! The maximum row index of this row_group scan
97
- idx_t max_row = 0;
98
+ idx_t vector_index;
99
+ //! The maximum row within the row group
100
+ idx_t max_row_group_row;
98
101
  //! Child column scans
99
102
  unique_ptr<ColumnScanState[]> column_scans;
100
-
101
- public:
102
- const vector<column_t> &GetColumnIds();
103
- TableFilterSet *GetFilters();
104
- AdaptiveFilter *GetAdaptiveFilter();
105
- idx_t GetParentMaxRow();
106
-
107
- private:
108
- //! The parent scan state
109
- CollectionScanState &parent;
110
- };
111
-
112
- class CollectionScanState {
113
- public:
114
- CollectionScanState(TableScanState &parent_p)
115
- : row_group_state(*this), max_row(0), batch_index(0), parent(parent_p) {};
116
-
117
- //! The row_group scan state
118
- RowGroupScanState row_group_state;
103
+ //! Row group segment tree
104
+ RowGroupSegmentTree *row_groups;
119
105
  //! The total maximum row index
120
106
  idx_t max_row;
121
107
  //! The current batch index
122
108
  idx_t batch_index;
123
109
 
124
110
  public:
111
+ void Initialize(const vector<LogicalType> &types);
125
112
  const vector<column_t> &GetColumnIds();
126
113
  TableFilterSet *GetFilters();
127
114
  AdaptiveFilter *GetAdaptiveFilter();
128
115
  bool Scan(DuckTransaction &transaction, DataChunk &result);
129
116
  bool ScanCommitted(DataChunk &result, TableScanType type);
117
+ bool ScanCommitted(DataChunk &result, SegmentLock &l, TableScanType type);
130
118
 
131
119
  private:
132
120
  TableScanState &parent;
@@ -158,12 +146,16 @@ private:
158
146
  };
159
147
 
160
148
  struct ParallelCollectionScanState {
149
+ ParallelCollectionScanState();
150
+
161
151
  //! The row group collection we are scanning
162
152
  RowGroupCollection *collection;
163
153
  RowGroup *current_row_group;
164
154
  idx_t vector_index;
165
155
  idx_t max_row;
166
156
  idx_t batch_index;
157
+ atomic<idx_t> processed_rows;
158
+ mutex lock;
167
159
  };
168
160
 
169
161
  struct ParallelTableScanState {
@@ -13,13 +13,12 @@
13
13
 
14
14
  namespace duckdb {
15
15
 
16
+ template <class T>
16
17
  class SegmentBase {
17
18
  public:
18
19
  SegmentBase(idx_t start, idx_t count) : start(start), count(count), next(nullptr) {
19
20
  }
20
- virtual ~SegmentBase() {
21
- }
22
- SegmentBase *Next() {
21
+ T *Next() {
23
22
  #ifndef DUCKDB_R_BUILD
24
23
  return next.load();
25
24
  #else
@@ -32,12 +31,13 @@ public:
32
31
  //! The amount of entries in this storage chunk
33
32
  atomic<idx_t> count;
34
33
  //! The next segment after this one
35
-
36
34
  #ifndef DUCKDB_R_BUILD
37
- atomic<SegmentBase *> next;
35
+ atomic<T *> next;
38
36
  #else
39
- SegmentBase *next;
37
+ T *next;
40
38
  #endif
39
+ //! The index within the segment tree
40
+ idx_t index;
41
41
  };
42
42
 
43
43
  } // namespace duckdb