duckdb 0.7.1 → 0.7.2-dev1034.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 (590) 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/json/include/json_common.hpp +1 -0
  13. package/src/duckdb/extension/json/include/json_functions.hpp +2 -0
  14. package/src/duckdb/extension/json/include/json_serializer.hpp +77 -0
  15. package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +147 -0
  16. package/src/duckdb/extension/json/json_functions/read_json.cpp +6 -5
  17. package/src/duckdb/extension/json/json_functions.cpp +12 -4
  18. package/src/duckdb/extension/json/json_scan.cpp +2 -2
  19. package/src/duckdb/extension/json/json_serializer.cpp +217 -0
  20. package/src/duckdb/extension/parquet/column_reader.cpp +94 -15
  21. package/src/duckdb/extension/parquet/column_writer.cpp +0 -1
  22. package/src/duckdb/extension/parquet/include/column_reader.hpp +1 -2
  23. package/src/duckdb/extension/parquet/include/decode_utils.hpp +5 -4
  24. package/src/duckdb/extension/parquet/include/generated_column_reader.hpp +1 -11
  25. package/src/duckdb/extension/parquet/include/parquet_timestamp.hpp +2 -1
  26. package/src/duckdb/extension/parquet/parquet-extension.cpp +12 -2
  27. package/src/duckdb/extension/parquet/parquet_reader.cpp +1 -1
  28. package/src/duckdb/extension/parquet/parquet_statistics.cpp +26 -32
  29. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +16 -6
  30. package/src/duckdb/src/catalog/catalog.cpp +34 -5
  31. package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +4 -0
  32. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +2 -21
  33. package/src/duckdb/src/catalog/catalog_entry/scalar_function_catalog_entry.cpp +7 -6
  34. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +3 -3
  35. package/src/duckdb/src/catalog/catalog_entry/table_function_catalog_entry.cpp +20 -1
  36. package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +8 -2
  37. package/src/duckdb/src/catalog/catalog_set.cpp +1 -0
  38. package/src/duckdb/src/catalog/default/default_functions.cpp +3 -0
  39. package/src/duckdb/src/catalog/dependency_list.cpp +12 -0
  40. package/src/duckdb/src/catalog/duck_catalog.cpp +34 -7
  41. package/src/duckdb/src/common/arrow/arrow_appender.cpp +48 -4
  42. package/src/duckdb/src/common/arrow/arrow_converter.cpp +1 -1
  43. package/src/duckdb/src/common/box_renderer.cpp +109 -23
  44. package/src/duckdb/src/common/enums/expression_type.cpp +8 -222
  45. package/src/duckdb/src/common/enums/join_type.cpp +3 -22
  46. package/src/duckdb/src/common/enums/logical_operator_type.cpp +2 -0
  47. package/src/duckdb/src/common/enums/statement_type.cpp +2 -0
  48. package/src/duckdb/src/common/exception.cpp +15 -1
  49. package/src/duckdb/src/common/field_writer.cpp +1 -0
  50. package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
  51. package/src/duckdb/src/common/preserved_error.cpp +7 -5
  52. package/src/duckdb/src/common/serializer/buffered_deserializer.cpp +4 -0
  53. package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +15 -2
  54. package/src/duckdb/src/common/serializer/enum_serializer.cpp +1176 -0
  55. package/src/duckdb/src/common/sort/sort_state.cpp +5 -7
  56. package/src/duckdb/src/common/sort/sorted_block.cpp +0 -1
  57. package/src/duckdb/src/common/string_util.cpp +4 -1
  58. package/src/duckdb/src/common/types/bit.cpp +166 -87
  59. package/src/duckdb/src/common/types/blob.cpp +1 -1
  60. package/src/duckdb/src/common/types/chunk_collection.cpp +2 -2
  61. package/src/duckdb/src/common/types/column_data_collection.cpp +39 -2
  62. package/src/duckdb/src/common/types/column_data_collection_segment.cpp +11 -6
  63. package/src/duckdb/src/common/types/data_chunk.cpp +1 -1
  64. package/src/duckdb/src/common/types/time.cpp +13 -0
  65. package/src/duckdb/src/common/types/value.cpp +320 -154
  66. package/src/duckdb/src/common/types/vector.cpp +155 -127
  67. package/src/duckdb/src/common/types.cpp +313 -153
  68. package/src/duckdb/src/common/vector_operations/vector_cast.cpp +2 -1
  69. package/src/duckdb/src/execution/aggregate_hashtable.cpp +10 -5
  70. package/src/duckdb/src/execution/column_binding_resolver.cpp +21 -5
  71. package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +2 -1
  72. package/src/duckdb/src/execution/index/art/art.cpp +6 -5
  73. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +4 -5
  74. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +117 -26
  75. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +3 -0
  76. package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +5 -3
  77. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +64 -17
  78. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -2
  79. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +12 -4
  80. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +6 -11
  81. package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +3 -1
  82. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +6 -3
  83. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +6 -14
  84. package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +2 -2
  85. package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +34 -0
  86. package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +20 -5
  87. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +20 -40
  88. package/src/duckdb/src/execution/partitionable_hashtable.cpp +14 -2
  89. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +21 -16
  90. package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +97 -0
  91. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +95 -47
  92. package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +5 -8
  93. package/src/duckdb/src/execution/physical_plan/plan_positional_join.cpp +14 -5
  94. package/src/duckdb/src/execution/physical_plan_generator.cpp +3 -0
  95. package/src/duckdb/src/execution/window_segment_tree.cpp +173 -1
  96. package/src/duckdb/src/function/aggregate/algebraic/avg.cpp +0 -6
  97. package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +99 -95
  98. package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +269 -0
  99. package/src/duckdb/src/function/aggregate/distributive/bool.cpp +2 -0
  100. package/src/duckdb/src/function/aggregate/distributive/count.cpp +3 -4
  101. package/src/duckdb/src/function/aggregate/distributive/first.cpp +1 -0
  102. package/src/duckdb/src/function/aggregate/distributive/minmax.cpp +2 -0
  103. package/src/duckdb/src/function/aggregate/distributive/sum.cpp +19 -16
  104. package/src/duckdb/src/function/aggregate/distributive_functions.cpp +1 -0
  105. package/src/duckdb/src/function/aggregate/holistic/approximate_quantile.cpp +5 -2
  106. package/src/duckdb/src/function/aggregate/holistic/mode.cpp +1 -1
  107. package/src/duckdb/src/function/aggregate/holistic/quantile.cpp +16 -1
  108. package/src/duckdb/src/function/aggregate/nested/list.cpp +8 -8
  109. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +58 -16
  110. package/src/duckdb/src/function/cast/bit_cast.cpp +0 -2
  111. package/src/duckdb/src/function/cast/blob_cast.cpp +0 -1
  112. package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
  113. package/src/duckdb/src/function/cast/enum_casts.cpp +25 -3
  114. package/src/duckdb/src/function/cast/list_casts.cpp +17 -4
  115. package/src/duckdb/src/function/cast/map_cast.cpp +5 -2
  116. package/src/duckdb/src/function/cast/string_cast.cpp +36 -10
  117. package/src/duckdb/src/function/cast/struct_cast.cpp +24 -4
  118. package/src/duckdb/src/function/cast/time_casts.cpp +2 -2
  119. package/src/duckdb/src/function/cast/union_casts.cpp +33 -7
  120. package/src/duckdb/src/function/function_binder.cpp +1 -8
  121. package/src/duckdb/src/function/scalar/bit/bitstring.cpp +100 -0
  122. package/src/duckdb/src/function/scalar/date/current.cpp +0 -2
  123. package/src/duckdb/src/function/scalar/date/date_diff.cpp +0 -1
  124. package/src/duckdb/src/function/scalar/date/date_part.cpp +18 -26
  125. package/src/duckdb/src/function/scalar/date/date_sub.cpp +0 -1
  126. package/src/duckdb/src/function/scalar/date/date_trunc.cpp +10 -14
  127. package/src/duckdb/src/function/scalar/generic/stats.cpp +2 -4
  128. package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +4 -146
  129. package/src/duckdb/src/function/scalar/list/flatten.cpp +5 -12
  130. package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +1 -1
  131. package/src/duckdb/src/function/scalar/list/list_concat.cpp +8 -12
  132. package/src/duckdb/src/function/scalar/list/list_extract.cpp +5 -12
  133. package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +7 -3
  134. package/src/duckdb/src/function/scalar/list/list_value.cpp +6 -10
  135. package/src/duckdb/src/function/scalar/map/map.cpp +47 -1
  136. package/src/duckdb/src/function/scalar/map/map_entries.cpp +61 -0
  137. package/src/duckdb/src/function/scalar/map/map_extract.cpp +68 -26
  138. package/src/duckdb/src/function/scalar/map/map_keys_values.cpp +97 -0
  139. package/src/duckdb/src/function/scalar/math/numeric.cpp +101 -17
  140. package/src/duckdb/src/function/scalar/math_functions.cpp +3 -0
  141. package/src/duckdb/src/function/scalar/nested_functions.cpp +3 -0
  142. package/src/duckdb/src/function/scalar/operators/add.cpp +0 -9
  143. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +29 -48
  144. package/src/duckdb/src/function/scalar/operators/bitwise.cpp +0 -63
  145. package/src/duckdb/src/function/scalar/operators/multiply.cpp +5 -6
  146. package/src/duckdb/src/function/scalar/operators/subtract.cpp +0 -6
  147. package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -6
  148. package/src/duckdb/src/function/scalar/string/hex.cpp +201 -0
  149. package/src/duckdb/src/function/scalar/string/instr.cpp +2 -6
  150. package/src/duckdb/src/function/scalar/string/length.cpp +2 -6
  151. package/src/duckdb/src/function/scalar/string/like.cpp +2 -6
  152. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +243 -0
  153. package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +79 -0
  154. package/src/duckdb/src/function/scalar/string/regexp.cpp +21 -80
  155. package/src/duckdb/src/function/scalar/string/substring.cpp +2 -6
  156. package/src/duckdb/src/function/scalar/string_functions.cpp +2 -0
  157. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +5 -10
  158. package/src/duckdb/src/function/scalar/struct/struct_insert.cpp +11 -14
  159. package/src/duckdb/src/function/scalar/struct/struct_pack.cpp +6 -7
  160. package/src/duckdb/src/function/table/arrow.cpp +5 -2
  161. package/src/duckdb/src/function/table/arrow_conversion.cpp +25 -1
  162. package/src/duckdb/src/function/table/checkpoint.cpp +5 -1
  163. package/src/duckdb/src/function/table/read_csv.cpp +55 -0
  164. package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +2 -2
  165. package/src/duckdb/src/function/table/system/test_all_types.cpp +2 -2
  166. package/src/duckdb/src/function/table/table_scan.cpp +1 -1
  167. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  168. package/src/duckdb/src/function/table_function.cpp +30 -11
  169. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +6 -0
  170. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +1 -1
  171. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +6 -8
  172. package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +3 -0
  173. package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +2 -1
  174. package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +8 -2
  175. package/src/duckdb/src/include/duckdb/common/constants.hpp +0 -19
  176. package/src/duckdb/src/include/duckdb/common/enums/aggregate_handling.hpp +2 -0
  177. package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -3
  178. package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +7 -4
  179. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +1 -0
  180. package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +2 -0
  181. package/src/duckdb/src/include/duckdb/common/enums/set_operation_type.hpp +2 -1
  182. package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +2 -1
  183. package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +2 -1
  184. package/src/duckdb/src/include/duckdb/common/exception.hpp +69 -2
  185. package/src/duckdb/src/include/duckdb/common/field_writer.hpp +12 -4
  186. package/src/duckdb/src/include/duckdb/common/{http_stats.hpp → http_state.hpp} +18 -4
  187. package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +2 -0
  188. package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +45 -0
  189. package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +6 -1
  190. package/src/duckdb/src/include/duckdb/common/serializer/buffered_deserializer.hpp +4 -2
  191. package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +8 -2
  192. package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +113 -0
  193. package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +336 -0
  194. package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +268 -0
  195. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +126 -0
  196. package/src/duckdb/src/include/duckdb/common/serializer.hpp +13 -0
  197. package/src/duckdb/src/include/duckdb/common/string_util.hpp +25 -0
  198. package/src/duckdb/src/include/duckdb/common/types/bit.hpp +12 -7
  199. package/src/duckdb/src/include/duckdb/common/types/time.hpp +3 -0
  200. package/src/duckdb/src/include/duckdb/common/types/value.hpp +17 -48
  201. package/src/duckdb/src/include/duckdb/common/types/value_map.hpp +1 -1
  202. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -1
  203. package/src/duckdb/src/include/duckdb/common/types.hpp +45 -8
  204. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +2 -2
  205. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +1 -0
  206. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +2 -2
  207. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_perfecthash_aggregate.hpp +1 -1
  208. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_cross_product.hpp +2 -0
  209. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_file_handle.hpp +1 -0
  210. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +6 -0
  211. package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_projection.hpp +5 -0
  212. package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +3 -0
  213. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +1 -3
  214. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +54 -0
  215. package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +5 -0
  216. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +18 -6
  217. package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +84 -0
  218. package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +2 -2
  219. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +28 -64
  220. package/src/duckdb/src/include/duckdb/function/function_binder.hpp +3 -6
  221. package/src/duckdb/src/include/duckdb/function/scalar/bit_functions.hpp +4 -0
  222. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +138 -0
  223. package/src/duckdb/src/include/duckdb/function/scalar/math_functions.hpp +8 -0
  224. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +59 -0
  225. package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
  226. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +4 -0
  227. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
  228. package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +12 -1
  229. package/src/duckdb/src/include/duckdb/function/table_function.hpp +10 -0
  230. package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -0
  231. package/src/duckdb/src/include/duckdb/main/client_data.hpp +3 -3
  232. package/src/duckdb/src/include/duckdb/main/config.hpp +3 -0
  233. package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +2 -0
  234. package/src/duckdb/src/include/duckdb/main/database.hpp +1 -0
  235. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +2 -0
  236. package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +2 -0
  237. package/src/duckdb/src/include/duckdb/main/relation/explain_relation.hpp +2 -1
  238. package/src/duckdb/src/include/duckdb/main/relation.hpp +2 -1
  239. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
  240. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  241. package/src/duckdb/src/include/duckdb/optimizer/rule/list.hpp +1 -0
  242. package/src/duckdb/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp +24 -0
  243. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +4 -0
  244. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
  245. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
  246. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +5 -0
  247. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -0
  248. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -0
  249. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -0
  250. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -0
  251. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -0
  252. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
  253. package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
  254. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +4 -2
  255. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -0
  256. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -0
  257. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -0
  258. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -0
  259. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +4 -2
  260. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -0
  261. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +5 -0
  262. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +5 -1
  263. package/src/duckdb/src/include/duckdb/parser/parsed_data/{alter_function_info.hpp → alter_scalar_function_info.hpp} +13 -13
  264. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +47 -0
  265. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +6 -0
  266. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_function_info.hpp +2 -1
  267. package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -0
  268. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -0
  269. package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
  270. package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +5 -0
  271. package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
  272. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +13 -2
  273. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +24 -1
  274. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -1
  275. package/src/duckdb/src/include/duckdb/parser/statement/multi_statement.hpp +28 -0
  276. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +6 -1
  277. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +4 -0
  278. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -0
  279. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
  280. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
  281. package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
  282. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +87 -0
  283. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
  284. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
  285. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -1
  286. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -0
  287. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +33 -0
  288. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -0
  289. package/src/duckdb/src/include/duckdb/planner/binder.hpp +15 -4
  290. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +3 -0
  291. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +3 -0
  292. package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +64 -0
  293. package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -2
  294. package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +4 -1
  295. package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +2 -2
  296. package/src/duckdb/src/include/duckdb/planner/expression_binder/select_binder.hpp +9 -38
  297. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
  298. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
  299. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
  300. package/src/duckdb/src/include/duckdb/planner/operator/logical_asof_join.hpp +22 -0
  301. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -2
  302. package/src/duckdb/src/include/duckdb/planner/operator/logical_distinct.hpp +3 -0
  303. package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +8 -2
  304. package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +2 -0
  305. package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +76 -44
  306. package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -2
  307. package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +1 -1
  308. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
  309. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
  310. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +1 -1
  311. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
  312. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
  313. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +1 -1
  314. package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +5 -2
  315. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +3 -3
  316. package/src/duckdb/src/include/duckdb/storage/index.hpp +4 -3
  317. package/src/duckdb/src/include/duckdb/storage/meta_block_reader.hpp +7 -0
  318. package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +93 -29
  319. package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +22 -3
  320. package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +8 -6
  321. package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +41 -0
  322. package/src/duckdb/src/include/duckdb/storage/statistics/node_statistics.hpp +26 -0
  323. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +114 -0
  324. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +62 -0
  325. package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -7
  326. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +74 -0
  327. package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +42 -0
  328. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +2 -3
  329. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
  330. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +6 -3
  331. package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +3 -2
  332. package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +7 -5
  333. package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
  334. package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +6 -2
  335. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +10 -6
  336. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +8 -5
  337. package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +37 -0
  338. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +10 -1
  339. package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +4 -3
  340. package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +271 -26
  341. package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -0
  342. package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +0 -1
  343. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +1 -1
  344. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -2
  345. package/src/duckdb/src/include/duckdb.h +50 -2
  346. package/src/duckdb/src/include/duckdb.hpp +0 -1
  347. package/src/duckdb/src/main/capi/pending-c.cpp +16 -3
  348. package/src/duckdb/src/main/capi/result-c.cpp +27 -1
  349. package/src/duckdb/src/main/capi/stream-c.cpp +25 -0
  350. package/src/duckdb/src/main/client_context.cpp +38 -34
  351. package/src/duckdb/src/main/client_data.cpp +7 -6
  352. package/src/duckdb/src/main/config.cpp +70 -1
  353. package/src/duckdb/src/main/database.cpp +19 -2
  354. package/src/duckdb/src/main/extension/extension_install.cpp +7 -2
  355. package/src/duckdb/src/main/prepared_statement.cpp +4 -0
  356. package/src/duckdb/src/main/query_profiler.cpp +17 -15
  357. package/src/duckdb/src/main/relation/explain_relation.cpp +3 -3
  358. package/src/duckdb/src/main/relation.cpp +3 -2
  359. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -0
  360. package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
  361. package/src/duckdb/src/optimizer/filter_combiner.cpp +1 -1
  362. package/src/duckdb/src/optimizer/filter_pullup.cpp +3 -1
  363. package/src/duckdb/src/optimizer/filter_pushdown.cpp +14 -8
  364. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +105 -71
  365. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +31 -12
  366. package/src/duckdb/src/optimizer/optimizer.cpp +1 -0
  367. package/src/duckdb/src/optimizer/pullup/pullup_from_left.cpp +2 -2
  368. package/src/duckdb/src/optimizer/pushdown/pushdown_aggregate.cpp +33 -5
  369. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +1 -1
  370. package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +3 -0
  371. package/src/duckdb/src/optimizer/pushdown/pushdown_left_join.cpp +5 -12
  372. package/src/duckdb/src/optimizer/pushdown/pushdown_mark_join.cpp +2 -2
  373. package/src/duckdb/src/optimizer/pushdown/pushdown_single_join.cpp +1 -1
  374. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +1 -0
  375. package/src/duckdb/src/optimizer/rule/move_constants.cpp +10 -4
  376. package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +30 -0
  377. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +9 -2
  378. package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +9 -3
  379. package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +6 -7
  380. package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +14 -11
  381. package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
  382. package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +13 -15
  383. package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +0 -1
  384. package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +3 -75
  385. package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +7 -2
  386. package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -0
  387. package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +2 -3
  388. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +29 -32
  389. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +5 -5
  390. package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +3 -3
  391. package/src/duckdb/src/optimizer/statistics_propagator.cpp +2 -1
  392. package/src/duckdb/src/optimizer/unnest_rewriter.cpp +2 -2
  393. package/src/duckdb/src/parallel/meta_pipeline.cpp +0 -4
  394. package/src/duckdb/src/parser/common_table_expression_info.cpp +19 -0
  395. package/src/duckdb/src/parser/expression/between_expression.cpp +17 -0
  396. package/src/duckdb/src/parser/expression/case_expression.cpp +28 -0
  397. package/src/duckdb/src/parser/expression/cast_expression.cpp +17 -0
  398. package/src/duckdb/src/parser/expression/collate_expression.cpp +16 -0
  399. package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -0
  400. package/src/duckdb/src/parser/expression/comparison_expression.cpp +16 -0
  401. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +17 -0
  402. package/src/duckdb/src/parser/expression/constant_expression.cpp +14 -0
  403. package/src/duckdb/src/parser/expression/default_expression.cpp +7 -0
  404. package/src/duckdb/src/parser/expression/function_expression.cpp +35 -0
  405. package/src/duckdb/src/parser/expression/lambda_expression.cpp +16 -0
  406. package/src/duckdb/src/parser/expression/operator_expression.cpp +15 -0
  407. package/src/duckdb/src/parser/expression/parameter_expression.cpp +15 -0
  408. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +14 -0
  409. package/src/duckdb/src/parser/expression/star_expression.cpp +26 -6
  410. package/src/duckdb/src/parser/expression/subquery_expression.cpp +20 -0
  411. package/src/duckdb/src/parser/expression/window_expression.cpp +43 -0
  412. package/src/duckdb/src/parser/parsed_data/alter_info.cpp +7 -3
  413. package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +56 -0
  414. package/src/duckdb/src/parser/parsed_data/alter_table_function_info.cpp +51 -0
  415. package/src/duckdb/src/parser/parsed_data/create_scalar_function_info.cpp +3 -2
  416. package/src/duckdb/src/parser/parsed_data/create_table_function_info.cpp +6 -0
  417. package/src/duckdb/src/parser/parsed_data/sample_options.cpp +22 -10
  418. package/src/duckdb/src/parser/parsed_expression.cpp +72 -0
  419. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +15 -1
  420. package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +21 -0
  421. package/src/duckdb/src/parser/query_node/select_node.cpp +31 -0
  422. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +17 -0
  423. package/src/duckdb/src/parser/query_node.cpp +51 -1
  424. package/src/duckdb/src/parser/result_modifier.cpp +78 -0
  425. package/src/duckdb/src/parser/statement/multi_statement.cpp +18 -0
  426. package/src/duckdb/src/parser/statement/select_statement.cpp +12 -0
  427. package/src/duckdb/src/parser/tableref/basetableref.cpp +21 -0
  428. package/src/duckdb/src/parser/tableref/emptytableref.cpp +4 -0
  429. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +17 -0
  430. package/src/duckdb/src/parser/tableref/joinref.cpp +29 -0
  431. package/src/duckdb/src/parser/tableref/pivotref.cpp +373 -0
  432. package/src/duckdb/src/parser/tableref/subqueryref.cpp +15 -0
  433. package/src/duckdb/src/parser/tableref/table_function.cpp +17 -0
  434. package/src/duckdb/src/parser/tableref.cpp +49 -0
  435. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +11 -0
  436. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -1
  437. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +17 -2
  438. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +63 -42
  439. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
  440. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +1 -1
  441. package/src/duckdb/src/parser/transform/helpers/transform_alias.cpp +12 -6
  442. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +24 -0
  443. package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +7 -0
  444. package/src/duckdb/src/parser/transform/helpers/transform_orderby.cpp +0 -7
  445. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +3 -2
  446. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +4 -0
  447. package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +4 -0
  448. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +179 -0
  449. package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +3 -4
  450. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -0
  451. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +2 -3
  452. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +12 -1
  453. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +121 -0
  454. package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +2 -0
  455. package/src/duckdb/src/parser/transformer.cpp +15 -3
  456. package/src/duckdb/src/planner/bind_context.cpp +18 -25
  457. package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +9 -7
  458. package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +4 -3
  459. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +23 -12
  460. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +3 -2
  461. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +176 -0
  462. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -0
  463. package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +163 -24
  464. package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +2 -2
  465. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +109 -94
  466. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +11 -0
  467. package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +9 -4
  468. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +5 -3
  469. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +3 -2
  470. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +9 -1
  471. package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
  472. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +12 -8
  473. package/src/duckdb/src/planner/binder/statement/bind_logical_plan.cpp +17 -0
  474. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +4 -2
  475. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +19 -3
  476. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +366 -0
  477. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +11 -1
  478. package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -0
  479. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +61 -13
  480. package/src/duckdb/src/planner/binder.cpp +19 -24
  481. package/src/duckdb/src/planner/bound_result_modifier.cpp +27 -1
  482. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +9 -2
  483. package/src/duckdb/src/planner/expression/bound_expression.cpp +4 -0
  484. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +1 -1
  485. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +146 -0
  486. package/src/duckdb/src/planner/expression_binder/having_binder.cpp +6 -3
  487. package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -3
  488. package/src/duckdb/src/planner/expression_binder/select_binder.cpp +1 -132
  489. package/src/duckdb/src/planner/expression_binder.cpp +10 -3
  490. package/src/duckdb/src/planner/expression_iterator.cpp +17 -10
  491. package/src/duckdb/src/planner/filter/constant_filter.cpp +4 -6
  492. package/src/duckdb/src/planner/logical_operator.cpp +7 -2
  493. package/src/duckdb/src/planner/logical_operator_visitor.cpp +6 -0
  494. package/src/duckdb/src/planner/operator/logical_asof_join.cpp +8 -0
  495. package/src/duckdb/src/planner/operator/logical_distinct.cpp +3 -0
  496. package/src/duckdb/src/planner/planner.cpp +2 -1
  497. package/src/duckdb/src/planner/pragma_handler.cpp +10 -2
  498. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +3 -1
  499. package/src/duckdb/src/storage/buffer_manager.cpp +44 -46
  500. package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +1 -1
  501. package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +4 -15
  502. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +10 -4
  503. package/src/duckdb/src/storage/checkpoint_manager.cpp +9 -3
  504. package/src/duckdb/src/storage/compression/bitpacking.cpp +28 -24
  505. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +43 -45
  506. package/src/duckdb/src/storage/compression/numeric_constant.cpp +9 -10
  507. package/src/duckdb/src/storage/compression/patas.cpp +1 -1
  508. package/src/duckdb/src/storage/compression/rle.cpp +19 -15
  509. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +5 -5
  510. package/src/duckdb/src/storage/data_table.cpp +20 -20
  511. package/src/duckdb/src/storage/index.cpp +12 -1
  512. package/src/duckdb/src/storage/local_storage.cpp +20 -23
  513. package/src/duckdb/src/storage/meta_block_reader.cpp +22 -0
  514. package/src/duckdb/src/storage/statistics/base_statistics.cpp +373 -128
  515. package/src/duckdb/src/storage/statistics/column_statistics.cpp +57 -3
  516. package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +8 -9
  517. package/src/duckdb/src/storage/statistics/list_stats.cpp +121 -0
  518. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +591 -0
  519. package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +65 -0
  520. package/src/duckdb/src/storage/statistics/segment_statistics.cpp +2 -11
  521. package/src/duckdb/src/storage/statistics/string_stats.cpp +273 -0
  522. package/src/duckdb/src/storage/statistics/struct_stats.cpp +133 -0
  523. package/src/duckdb/src/storage/storage_info.cpp +2 -2
  524. package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +4 -10
  525. package/src/duckdb/src/storage/table/column_data.cpp +45 -46
  526. package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +7 -8
  527. package/src/duckdb/src/storage/table/column_segment.cpp +13 -14
  528. package/src/duckdb/src/storage/table/list_column_data.cpp +41 -59
  529. package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
  530. package/src/duckdb/src/storage/table/row_group.cpp +38 -32
  531. package/src/duckdb/src/storage/table/row_group_collection.cpp +94 -78
  532. package/src/duckdb/src/storage/table/scan_state.cpp +22 -3
  533. package/src/duckdb/src/storage/table/standard_column_data.cpp +7 -6
  534. package/src/duckdb/src/storage/table/struct_column_data.cpp +16 -16
  535. package/src/duckdb/src/storage/table/table_statistics.cpp +27 -7
  536. package/src/duckdb/src/storage/table/update_segment.cpp +20 -18
  537. package/src/duckdb/src/storage/wal_replay.cpp +8 -5
  538. package/src/duckdb/src/storage/write_ahead_log.cpp +2 -2
  539. package/src/duckdb/src/transaction/commit_state.cpp +11 -7
  540. package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
  541. package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +35 -0
  542. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +36 -2
  543. package/src/duckdb/third_party/libpg_query/include/nodes/primnodes.hpp +3 -3
  544. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +1022 -530
  545. package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +8 -0
  546. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24462 -22828
  547. package/src/duckdb/third_party/re2/re2/re2.cc +9 -0
  548. package/src/duckdb/third_party/re2/re2/re2.h +2 -0
  549. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +4 -4
  550. package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
  551. package/src/duckdb/ub_src_common_serializer.cpp +2 -0
  552. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  553. package/src/duckdb/ub_src_function_aggregate_distributive.cpp +2 -0
  554. package/src/duckdb/ub_src_function_scalar_bit.cpp +2 -0
  555. package/src/duckdb/ub_src_function_scalar_map.cpp +4 -0
  556. package/src/duckdb/ub_src_function_scalar_string.cpp +2 -0
  557. package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
  558. package/src/duckdb/ub_src_main_capi.cpp +2 -0
  559. package/src/duckdb/ub_src_optimizer_rule.cpp +2 -0
  560. package/src/duckdb/ub_src_parser.cpp +2 -0
  561. package/src/duckdb/ub_src_parser_parsed_data.cpp +4 -2
  562. package/src/duckdb/ub_src_parser_statement.cpp +2 -0
  563. package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
  564. package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
  565. package/src/duckdb/ub_src_parser_transform_tableref.cpp +2 -0
  566. package/src/duckdb/ub_src_planner_binder_expression.cpp +2 -0
  567. package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
  568. package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
  569. package/src/duckdb/ub_src_planner_operator.cpp +2 -0
  570. package/src/duckdb/ub_src_storage_statistics.cpp +6 -6
  571. package/src/duckdb/ub_src_storage_table.cpp +0 -2
  572. package/src/duckdb_node.hpp +2 -1
  573. package/src/statement.cpp +5 -5
  574. package/src/utils.cpp +27 -2
  575. package/test/extension.test.ts +44 -26
  576. package/test/syntax_error.test.ts +3 -1
  577. package/filelist.cache +0 -0
  578. package/src/duckdb/src/include/duckdb/main/loadable_extension.hpp +0 -59
  579. package/src/duckdb/src/include/duckdb/storage/statistics/list_statistics.hpp +0 -36
  580. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_statistics.hpp +0 -75
  581. package/src/duckdb/src/include/duckdb/storage/statistics/string_statistics.hpp +0 -49
  582. package/src/duckdb/src/include/duckdb/storage/statistics/struct_statistics.hpp +0 -36
  583. package/src/duckdb/src/include/duckdb/storage/statistics/validity_statistics.hpp +0 -45
  584. package/src/duckdb/src/parser/parsed_data/alter_function_info.cpp +0 -55
  585. package/src/duckdb/src/storage/statistics/list_statistics.cpp +0 -94
  586. package/src/duckdb/src/storage/statistics/numeric_statistics.cpp +0 -307
  587. package/src/duckdb/src/storage/statistics/string_statistics.cpp +0 -220
  588. package/src/duckdb/src/storage/statistics/struct_statistics.cpp +0 -108
  589. package/src/duckdb/src/storage/statistics/validity_statistics.cpp +0 -91
  590. package/src/duckdb/src/storage/table/segment_tree.cpp +0 -179
@@ -23,6 +23,8 @@ class TableStatistics;
23
23
 
24
24
  class BoundConstraint;
25
25
 
26
+ class RowGroupSegmentTree;
27
+
26
28
  class RowGroupCollection {
27
29
  public:
28
30
  RowGroupCollection(shared_ptr<DataTableInfo> info, BlockManager &block_manager, vector<LogicalType> types,
@@ -46,8 +48,8 @@ public:
46
48
  void InitializeCreateIndexScan(CreateIndexScanState &state);
47
49
  void InitializeScanWithOffset(CollectionScanState &state, const vector<column_t> &column_ids, idx_t start_row,
48
50
  idx_t end_row);
49
- static bool InitializeScanInRowGroup(CollectionScanState &state, RowGroup *row_group, idx_t vector_index,
50
- idx_t max_row);
51
+ static bool InitializeScanInRowGroup(CollectionScanState &state, ParallelCollectionScanState &parallel_state,
52
+ idx_t vector_index, idx_t max_row);
51
53
  void InitializeParallelScan(ParallelCollectionScanState &state);
52
54
  bool NextParallelScan(ClientContext &context, ParallelCollectionScanState &state, CollectionScanState &scan_state);
53
55
 
@@ -78,7 +80,7 @@ public:
78
80
  void UpdateColumn(TransactionData transaction, Vector &row_ids, const vector<column_t> &column_path,
79
81
  DataChunk &updates);
80
82
 
81
- void Checkpoint(TableDataWriter &writer, vector<unique_ptr<BaseStatistics>> &global_stats);
83
+ void Checkpoint(TableDataWriter &writer, TableStatistics &global_stats);
82
84
 
83
85
  void CommitDropColumn(idx_t index);
84
86
  void CommitDropTable();
@@ -93,8 +95,9 @@ public:
93
95
  vector<column_t> bound_columns, Expression &cast_expr);
94
96
  void VerifyNewConstraint(DataTable &parent, const BoundConstraint &constraint);
95
97
 
98
+ void CopyStats(TableStatistics &stats);
96
99
  unique_ptr<BaseStatistics> CopyStats(column_t column_id);
97
- void SetStatistics(column_t column_id, const std::function<void(BaseStatistics &)> &set_fun);
100
+ void SetDistinct(column_t column_id, unique_ptr<DistinctStatistics> distinct_stats);
98
101
 
99
102
  private:
100
103
  bool IsEmpty(SegmentLock &) const;
@@ -108,7 +111,7 @@ private:
108
111
  vector<LogicalType> types;
109
112
  idx_t row_start;
110
113
  //! The segment trees holding the various row_groups of the table
111
- shared_ptr<SegmentTree> row_groups;
114
+ shared_ptr<RowGroupSegmentTree> row_groups;
112
115
  //! Table statistics
113
116
  TableStatistics stats;
114
117
  };
@@ -0,0 +1,37 @@
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(DataTableInfo &table_info_p, BlockManager &block_manager_p, vector<LogicalType> column_types_p);
22
+ ~RowGroupSegmentTree() override;
23
+
24
+ void Initialize(PersistentTableData &data);
25
+
26
+ protected:
27
+ unique_ptr<RowGroup> LoadSegment() override;
28
+
29
+ DataTableInfo &info;
30
+ BlockManager &block_manager;
31
+ vector<LogicalType> column_types;
32
+ idx_t current_row_group;
33
+ idx_t max_row_group;
34
+ unique_ptr<MetaBlockReader> reader;
35
+ };
36
+
37
+ } // 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,6 +68,8 @@ 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:
69
75
  //! Move the scan state forward by "count" rows (including all child states)
@@ -112,10 +118,12 @@ private:
112
118
  class CollectionScanState {
113
119
  public:
114
120
  CollectionScanState(TableScanState &parent_p)
115
- : row_group_state(*this), max_row(0), batch_index(0), parent(parent_p) {};
121
+ : row_group_state(*this), row_groups(nullptr), max_row(0), batch_index(0), parent(parent_p) {};
116
122
 
117
123
  //! The row_group scan state
118
124
  RowGroupScanState row_group_state;
125
+ //! Row group segment tree
126
+ RowGroupSegmentTree *row_groups;
119
127
  //! The total maximum row index
120
128
  idx_t max_row;
121
129
  //! The current batch index
@@ -127,6 +135,7 @@ public:
127
135
  AdaptiveFilter *GetAdaptiveFilter();
128
136
  bool Scan(DuckTransaction &transaction, DataChunk &result);
129
137
  bool ScanCommitted(DataChunk &result, TableScanType type);
138
+ bool ScanCommitted(DataChunk &result, SegmentLock &l, TableScanType type);
130
139
 
131
140
  private:
132
141
  TableScanState &parent;
@@ -13,13 +13,14 @@
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
21
  virtual ~SegmentBase() {
21
22
  }
22
- SegmentBase *Next() {
23
+ T *Next() {
23
24
  #ifndef DUCKDB_R_BUILD
24
25
  return next.load();
25
26
  #else
@@ -34,9 +35,9 @@ public:
34
35
  //! The next segment after this one
35
36
 
36
37
  #ifndef DUCKDB_R_BUILD
37
- atomic<SegmentBase *> next;
38
+ atomic<T *> next;
38
39
  #else
39
- SegmentBase *next;
40
+ T *next;
40
41
  #endif
41
42
  };
42
43
 
@@ -10,71 +10,316 @@
10
10
 
11
11
  #include "duckdb/common/constants.hpp"
12
12
  #include "duckdb/storage/storage_lock.hpp"
13
- #include "duckdb/storage/table/segment_base.hpp"
14
13
  #include "duckdb/storage/table/segment_lock.hpp"
15
14
  #include "duckdb/common/vector.hpp"
16
15
  #include "duckdb/common/mutex.hpp"
16
+ #include "duckdb/common/string_util.hpp"
17
17
 
18
18
  namespace duckdb {
19
19
 
20
+ template <class T>
20
21
  struct SegmentNode {
21
22
  idx_t row_start;
22
- unique_ptr<SegmentBase> node;
23
+ unique_ptr<T> node;
23
24
  };
24
25
 
25
26
  //! The SegmentTree maintains a list of all segments of a specific column in a table, and allows searching for a segment
26
27
  //! by row number
28
+ template <class T, bool SUPPORTS_LAZY_LOADING = false>
27
29
  class SegmentTree {
30
+ private:
31
+ class SegmentIterationHelper;
32
+
28
33
  public:
34
+ explicit SegmentTree() : finished_loading(true) {
35
+ }
36
+ virtual ~SegmentTree() {
37
+ }
38
+
29
39
  //! Locks the segment tree. All methods to the segment tree either lock the segment tree, or take an already
30
40
  //! obtained lock.
31
- SegmentLock Lock();
41
+ SegmentLock Lock() {
42
+ return SegmentLock(node_lock);
43
+ }
32
44
 
33
- bool IsEmpty(SegmentLock &);
45
+ bool IsEmpty(SegmentLock &l) {
46
+ return GetRootSegment(l) == nullptr;
47
+ }
34
48
 
35
49
  //! Gets a pointer to the first segment. Useful for scans.
36
- SegmentBase *GetRootSegment();
37
- SegmentBase *GetRootSegment(SegmentLock &);
50
+ T *GetRootSegment() {
51
+ auto l = Lock();
52
+ return GetRootSegment(l);
53
+ }
54
+
55
+ T *GetRootSegment(SegmentLock &l) {
56
+ if (nodes.empty()) {
57
+ LoadNextSegment(l);
58
+ }
59
+ return nodes.empty() ? nullptr : nodes[0].node.get();
60
+ }
38
61
  //! Obtains ownership of the data of the segment tree
39
- vector<SegmentNode> MoveSegments(SegmentLock &);
62
+ vector<SegmentNode<T>> MoveSegments(SegmentLock &l) {
63
+ LoadAllSegments(l);
64
+ return std::move(nodes);
65
+ }
40
66
  //! Gets a pointer to the nth segment. Negative numbers start from the back.
41
- SegmentBase *GetSegmentByIndex(int64_t index);
42
- SegmentBase *GetSegmentByIndex(SegmentLock &, int64_t index);
67
+ T *GetSegmentByIndex(int64_t index) {
68
+ auto l = Lock();
69
+ return GetSegmentByIndex(l, index);
70
+ }
71
+ T *GetSegmentByIndex(SegmentLock &l, int64_t index) {
72
+ if (index < 0) {
73
+ // load all segments
74
+ LoadAllSegments(l);
75
+ index = nodes.size() + index;
76
+ if (index < 0) {
77
+ return nullptr;
78
+ }
79
+ return nodes[index].node.get();
80
+ } else {
81
+ // lazily load segments until we reach the specific segment
82
+ while (idx_t(index) >= nodes.size() && LoadNextSegment(l)) {
83
+ }
84
+ if (idx_t(index) >= nodes.size()) {
85
+ return nullptr;
86
+ }
87
+ return nodes[index].node.get();
88
+ }
89
+ }
90
+ //! Gets the next segment
91
+ T *GetNextSegment(T *segment) {
92
+ if (!SUPPORTS_LAZY_LOADING) {
93
+ return segment->Next();
94
+ }
95
+ if (finished_loading) {
96
+ return segment->Next();
97
+ }
98
+ auto l = Lock();
99
+ return GetNextSegment(l, segment);
100
+ }
101
+ T *GetNextSegment(SegmentLock &l, T *segment) {
102
+ if (!segment) {
103
+ return nullptr;
104
+ }
105
+ #ifdef DEBUG
106
+ D_ASSERT(nodes[segment->index].node.get() == segment);
107
+ #endif
108
+ return GetSegmentByIndex(l, segment->index + 1);
109
+ }
43
110
 
44
111
  //! Gets a pointer to the last segment. Useful for appends.
45
- SegmentBase *GetLastSegment();
46
- SegmentBase *GetLastSegment(SegmentLock &);
112
+ T *GetLastSegment(SegmentLock &l) {
113
+ LoadAllSegments(l);
114
+ if (nodes.empty()) {
115
+ return nullptr;
116
+ }
117
+ return nodes.back().node.get();
118
+ }
47
119
  //! Gets a pointer to a specific column segment for the given row
48
- SegmentBase *GetSegment(idx_t row_number);
49
- SegmentBase *GetSegment(SegmentLock &, idx_t row_number);
120
+ T *GetSegment(idx_t row_number) {
121
+ auto l = Lock();
122
+ return GetSegment(l, row_number);
123
+ }
124
+ T *GetSegment(SegmentLock &l, idx_t row_number) {
125
+ return nodes[GetSegmentIndex(l, row_number)].node.get();
126
+ }
50
127
 
51
128
  //! Append a column segment to the tree
52
- void AppendSegment(unique_ptr<SegmentBase> segment);
53
- void AppendSegment(SegmentLock &, unique_ptr<SegmentBase> segment);
129
+ void AppendSegmentInternal(SegmentLock &l, unique_ptr<T> segment) {
130
+ D_ASSERT(segment);
131
+ // add the node to the list of nodes
132
+ if (!nodes.empty()) {
133
+ nodes.back().node->next = segment.get();
134
+ }
135
+ SegmentNode<T> node;
136
+ segment->index = nodes.size();
137
+ node.row_start = segment->start;
138
+ node.node = std::move(segment);
139
+ nodes.push_back(std::move(node));
140
+ }
141
+ void AppendSegment(unique_ptr<T> segment) {
142
+ auto l = Lock();
143
+ AppendSegment(l, std::move(segment));
144
+ }
145
+ void AppendSegment(SegmentLock &l, unique_ptr<T> segment) {
146
+ LoadAllSegments(l);
147
+ AppendSegmentInternal(l, std::move(segment));
148
+ }
54
149
  //! Debug method, check whether the segment is in the segment tree
55
- bool HasSegment(SegmentBase *segment);
56
- bool HasSegment(SegmentLock &, SegmentBase *segment);
150
+ bool HasSegment(T *segment) {
151
+ auto l = Lock();
152
+ return HasSegment(l, segment);
153
+ }
154
+ bool HasSegment(SegmentLock &, T *segment) {
155
+ return segment->index < nodes.size() && nodes[segment->index].node.get() == segment;
156
+ }
57
157
 
58
158
  //! Replace this tree with another tree, taking over its nodes in-place
59
- void Replace(SegmentTree &other);
60
- void Replace(SegmentLock &, SegmentTree &other);
159
+ void Replace(SegmentTree<T> &other) {
160
+ auto l = Lock();
161
+ Replace(l, other);
162
+ }
163
+ void Replace(SegmentLock &l, SegmentTree<T> &other) {
164
+ other.LoadAllSegments(l);
165
+ nodes = std::move(other.nodes);
166
+ }
61
167
 
62
168
  //! Erase all segments after a specific segment
63
- void EraseSegments(SegmentLock &, idx_t segment_start);
169
+ void EraseSegments(SegmentLock &l, idx_t segment_start) {
170
+ LoadAllSegments(l);
171
+ if (segment_start >= nodes.size() - 1) {
172
+ return;
173
+ }
174
+ nodes.erase(nodes.begin() + segment_start + 1, nodes.end());
175
+ }
64
176
 
65
177
  //! Get the segment index of the column segment for the given row
66
- idx_t GetSegmentIndex(idx_t row_number);
67
- idx_t GetSegmentIndex(SegmentLock &, idx_t row_number);
68
- bool TryGetSegmentIndex(SegmentLock &, idx_t row_number, idx_t &);
178
+ idx_t GetSegmentIndex(SegmentLock &l, idx_t row_number) {
179
+ idx_t segment_index;
180
+ if (TryGetSegmentIndex(l, row_number, segment_index)) {
181
+ return segment_index;
182
+ }
183
+ string error;
184
+ error = StringUtil::Format("Attempting to find row number \"%lld\" in %lld nodes\n", row_number, nodes.size());
185
+ for (idx_t i = 0; i < nodes.size(); i++) {
186
+ error += StringUtil::Format("Node %lld: Start %lld, Count %lld", i, nodes[i].row_start,
187
+ nodes[i].node->count.load());
188
+ }
189
+ throw InternalException("Could not find node in column segment tree!\n%s%s", error, Exception::GetStackTrace());
190
+ }
191
+
192
+ bool TryGetSegmentIndex(SegmentLock &l, idx_t row_number, idx_t &result) {
193
+ // load segments until the row number is within bounds
194
+ while (nodes.empty() || (row_number >= (nodes.back().row_start + nodes.back().node->count))) {
195
+ if (!LoadNextSegment(l)) {
196
+ break;
197
+ }
198
+ }
199
+ if (nodes.empty()) {
200
+ return false;
201
+ }
202
+ D_ASSERT(!nodes.empty());
203
+ D_ASSERT(row_number >= nodes[0].row_start);
204
+ D_ASSERT(row_number < nodes.back().row_start + nodes.back().node->count);
205
+ idx_t lower = 0;
206
+ idx_t upper = nodes.size() - 1;
207
+ // binary search to find the node
208
+ while (lower <= upper) {
209
+ idx_t index = (lower + upper) / 2;
210
+ D_ASSERT(index < nodes.size());
211
+ auto &entry = nodes[index];
212
+ D_ASSERT(entry.row_start == entry.node->start);
213
+ if (row_number < entry.row_start) {
214
+ upper = index - 1;
215
+ } else if (row_number >= entry.row_start + entry.node->count) {
216
+ lower = index + 1;
217
+ } else {
218
+ result = index;
219
+ return true;
220
+ }
221
+ }
222
+ return false;
223
+ }
69
224
 
70
- void Verify(SegmentLock &);
71
- void Verify();
225
+ void Verify(SegmentLock &) {
226
+ #ifdef DEBUG
227
+ idx_t base_start = nodes.empty() ? 0 : nodes[0].node->start;
228
+ for (idx_t i = 0; i < nodes.size(); i++) {
229
+ D_ASSERT(nodes[i].row_start == nodes[i].node->start);
230
+ D_ASSERT(nodes[i].node->start == base_start);
231
+ base_start += nodes[i].node->count;
232
+ }
233
+ #endif
234
+ }
235
+ void Verify() {
236
+ #ifdef DEBUG
237
+ auto l = Lock();
238
+ Verify(l);
239
+ #endif
240
+ }
241
+
242
+ SegmentIterationHelper Segments() {
243
+ return SegmentIterationHelper(*this);
244
+ }
245
+
246
+ protected:
247
+ atomic<bool> finished_loading;
248
+
249
+ //! Load the next segment - only used when lazily loading
250
+ virtual unique_ptr<T> LoadSegment() {
251
+ return nullptr;
252
+ }
72
253
 
73
254
  private:
74
255
  //! The nodes in the tree, can be binary searched
75
- vector<SegmentNode> nodes;
256
+ vector<SegmentNode<T>> nodes;
76
257
  //! Lock to access or modify the nodes
77
258
  mutex node_lock;
259
+
260
+ private:
261
+ class SegmentIterationHelper {
262
+ public:
263
+ explicit SegmentIterationHelper(SegmentTree &tree) : tree(tree) {
264
+ }
265
+
266
+ private:
267
+ SegmentTree &tree;
268
+
269
+ private:
270
+ class SegmentIterator {
271
+ public:
272
+ SegmentIterator(SegmentTree &tree_p, T *current_p) : tree(tree_p), current(current_p) {
273
+ }
274
+
275
+ SegmentTree &tree;
276
+ T *current;
277
+
278
+ public:
279
+ void Next() {
280
+ current = tree.GetNextSegment(current);
281
+ }
282
+
283
+ SegmentIterator &operator++() {
284
+ Next();
285
+ return *this;
286
+ }
287
+ bool operator!=(const SegmentIterator &other) const {
288
+ return current != other.current;
289
+ }
290
+ T &operator*() const {
291
+ D_ASSERT(current);
292
+ return *current;
293
+ }
294
+ };
295
+
296
+ public:
297
+ SegmentIterator begin() {
298
+ return SegmentIterator(tree, tree.GetRootSegment());
299
+ }
300
+ SegmentIterator end() {
301
+ return SegmentIterator(tree, nullptr);
302
+ }
303
+ };
304
+
305
+ //! Load the next segment, if there are any left to load
306
+ bool LoadNextSegment(SegmentLock &l) {
307
+ if (finished_loading) {
308
+ return false;
309
+ }
310
+ auto result = LoadSegment();
311
+ if (result) {
312
+ AppendSegmentInternal(l, std::move(result));
313
+ return true;
314
+ }
315
+ return false;
316
+ }
317
+
318
+ //! Load all segments, if there are any left to load
319
+ void LoadAllSegments(SegmentLock &l) {
320
+ while (LoadNextSegment(l))
321
+ ;
322
+ }
78
323
  };
79
324
 
80
325
  } // namespace duckdb
@@ -14,6 +14,7 @@
14
14
  #include "duckdb/storage/statistics/column_statistics.hpp"
15
15
 
16
16
  namespace duckdb {
17
+ class ColumnList;
17
18
  class PersistentTableData;
18
19
 
19
20
  class TableStatisticsLock {
@@ -38,6 +39,7 @@ public:
38
39
  void MergeStats(idx_t i, BaseStatistics &stats);
39
40
  void MergeStats(TableStatisticsLock &lock, idx_t i, BaseStatistics &stats);
40
41
 
42
+ void CopyStats(TableStatistics &other);
41
43
  unique_ptr<BaseStatistics> CopyStats(idx_t i);
42
44
  ColumnStatistics &GetStats(idx_t i);
43
45
 
@@ -45,6 +47,9 @@ public:
45
47
 
46
48
  unique_ptr<TableStatisticsLock> GetLock();
47
49
 
50
+ void Serialize(Serializer &serializer);
51
+ void Deserialize(Deserializer &source, ColumnList &columns);
52
+
48
53
  private:
49
54
  //! The statistics lock
50
55
  mutex stats_lock;
@@ -34,7 +34,6 @@ public:
34
34
  bool HasUncommittedUpdates(idx_t vector_index);
35
35
  bool HasUpdates(idx_t vector_index) const;
36
36
  bool HasUpdates(idx_t start_row_idx, idx_t end_row_idx);
37
- void ClearUpdates();
38
37
 
39
38
  void FetchUpdates(TransactionData transaction, idx_t vector_index, Vector &result);
40
39
  void FetchCommitted(idx_t vector_index, Vector &result);
@@ -137,7 +137,7 @@ public:
137
137
  //! Sets the table used for subsequent insert/delete/update commands
138
138
  void WriteSetTable(string &schema, string &table);
139
139
 
140
- void WriteAlter(AlterInfo &info);
140
+ void WriteAlter(data_ptr_t ptr, idx_t data_size);
141
141
 
142
142
  void WriteInsert(DataChunk &chunk);
143
143
  void WriteDelete(DataChunk &chunk);
@@ -88,8 +88,8 @@ public:
88
88
 
89
89
  void AppendToIndexes(DuckTransaction &transaction, TableAppendState &append_state, idx_t append_count,
90
90
  bool append_to_table);
91
- bool AppendToIndexes(DuckTransaction &transaction, RowGroupCollection &source, TableIndexList &index_list,
92
- const vector<LogicalType> &table_types, row_t &start_row);
91
+ PreservedError AppendToIndexes(DuckTransaction &transaction, RowGroupCollection &source, TableIndexList &index_list,
92
+ const vector<LogicalType> &table_types, row_t &start_row);
93
93
 
94
94
  //! Creates an optimistic writer for this table
95
95
  OptimisticDataWriter *CreateOptimisticWriter();
@@ -35,7 +35,10 @@
35
35
  #endif
36
36
  #endif
37
37
 
38
- // duplicate of duckdb/common/constants.hpp
38
+ // API versions
39
+ // if no explicit API version is defined, the latest API version is used
40
+ // Note that using older API versions (i.e. not using DUCKDB_API_LATEST) is deprecated.
41
+ // These will not be supported long-term, and will be removed in future versions.
39
42
  #ifndef DUCKDB_API_0_3_1
40
43
  #define DUCKDB_API_0_3_1 1
41
44
  #endif
@@ -570,11 +573,19 @@ Use `duckdb_result_chunk_count` to figure out how many chunks there are in the r
570
573
  */
571
574
  DUCKDB_API duckdb_data_chunk duckdb_result_get_chunk(duckdb_result result, idx_t chunk_index);
572
575
 
576
+ /*!
577
+ Checks if the type of the internal result is StreamQueryResult.
578
+
579
+ * result: The result object to check.
580
+ * returns: Whether or not the result object is of the type StreamQueryResult
581
+ */
582
+ DUCKDB_API bool duckdb_result_is_streaming(duckdb_result result);
583
+
573
584
  /*!
574
585
  Returns the number of data chunks present in the result.
575
586
 
576
587
  * result: The result object
577
- * returns: The resulting data chunk. Returns `NULL` if the chunk index is out of bounds.
588
+ * returns: Number of data chunks present in the result.
578
589
  */
579
590
  DUCKDB_API idx_t duckdb_result_chunk_count(duckdb_result result);
580
591
 
@@ -1106,6 +1117,21 @@ Note that after calling `duckdb_pending_prepared`, the pending result should alw
1106
1117
  DUCKDB_API duckdb_state duckdb_pending_prepared(duckdb_prepared_statement prepared_statement,
1107
1118
  duckdb_pending_result *out_result);
1108
1119
 
1120
+ /*!
1121
+ Executes the prepared statement with the given bound parameters, and returns a pending result.
1122
+ This pending result will create a streaming duckdb_result when executed.
1123
+ The pending result represents an intermediate structure for a query that is not yet fully executed.
1124
+
1125
+ Note that after calling `duckdb_pending_prepared_streaming`, the pending result should always be destroyed using
1126
+ `duckdb_destroy_pending`, even if this function returns DuckDBError.
1127
+
1128
+ * prepared_statement: The prepared statement to execute.
1129
+ * out_result: The pending query result.
1130
+ * returns: `DuckDBSuccess` on success or `DuckDBError` on failure.
1131
+ */
1132
+ DUCKDB_API duckdb_state duckdb_pending_prepared_streaming(duckdb_prepared_statement prepared_statement,
1133
+ duckdb_pending_result *out_result);
1134
+
1109
1135
  /*!
1110
1136
  Closes the pending result and de-allocates all memory allocated for the result.
1111
1137
 
@@ -2319,6 +2345,28 @@ Returns true if execution of the current query is finished.
2319
2345
  */
2320
2346
  DUCKDB_API bool duckdb_execution_is_finished(duckdb_connection con);
2321
2347
 
2348
+ //===--------------------------------------------------------------------===//
2349
+ // Streaming Result Interface
2350
+ //===--------------------------------------------------------------------===//
2351
+
2352
+ /*!
2353
+ Fetches a data chunk from the (streaming) duckdb_result. This function should be called repeatedly until the result is
2354
+ exhausted.
2355
+
2356
+ The result must be destroyed with `duckdb_destroy_data_chunk`.
2357
+
2358
+ This function can only be used on duckdb_results created with 'duckdb_pending_prepared_streaming'
2359
+
2360
+ If this function is used, none of the other result functions can be used and vice versa (i.e. this function cannot be
2361
+ mixed with the legacy result functions or the materialized result functions).
2362
+
2363
+ It is not known beforehand how many chunks will be returned by this result.
2364
+
2365
+ * result: The result object to fetch the data chunk from.
2366
+ * returns: The resulting data chunk. Returns `NULL` if the result has an error.
2367
+ */
2368
+ DUCKDB_API duckdb_data_chunk duckdb_stream_fetch_chunk(duckdb_result result);
2369
+
2322
2370
  #ifdef __cplusplus
2323
2371
  }
2324
2372
  #endif
@@ -11,5 +11,4 @@
11
11
  #include "duckdb/main/connection.hpp"
12
12
  #include "duckdb/main/database.hpp"
13
13
  #include "duckdb/main/query_result.hpp"
14
- #include "duckdb/main/loadable_extension.hpp"
15
14
  #include "duckdb/main/appender.hpp"