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
@@ -5,6 +5,7 @@
5
5
  #include "duckdb/storage/data_table.hpp"
6
6
  #include "duckdb/planner/table_filter.hpp"
7
7
  #include "duckdb/transaction/transaction.hpp"
8
+ #include "duckdb/storage/table/column_checkpoint_state.hpp"
8
9
 
9
10
  namespace duckdb {
10
11
 
@@ -24,7 +25,7 @@ bool StandardColumnData::CheckZonemap(ColumnScanState &state, TableFilter &filte
24
25
  return true;
25
26
  }
26
27
  state.segment_checked = true;
27
- auto prune_result = filter.CheckStatistics(*state.current->stats.statistics);
28
+ auto prune_result = filter.CheckStatistics(state.current->stats.statistics);
28
29
  if (prune_result != FilterPropagateResult::FILTER_ALWAYS_FALSE) {
29
30
  return true;
30
31
  }
@@ -44,18 +45,16 @@ void StandardColumnData::InitializeScan(ColumnScanState &state) {
44
45
  ColumnData::InitializeScan(state);
45
46
 
46
47
  // initialize the validity segment
47
- ColumnScanState child_state;
48
- validity.InitializeScan(child_state);
49
- state.child_states.push_back(std::move(child_state));
48
+ D_ASSERT(state.child_states.size() == 1);
49
+ validity.InitializeScan(state.child_states[0]);
50
50
  }
51
51
 
52
52
  void StandardColumnData::InitializeScanWithOffset(ColumnScanState &state, idx_t row_idx) {
53
53
  ColumnData::InitializeScanWithOffset(state, row_idx);
54
54
 
55
55
  // initialize the validity segment
56
- ColumnScanState child_state;
57
- validity.InitializeScanWithOffset(child_state, row_idx);
58
- state.child_states.push_back(std::move(child_state));
56
+ D_ASSERT(state.child_states.size() == 1);
57
+ validity.InitializeScanWithOffset(state.child_states[0], row_idx);
59
58
  }
60
59
 
61
60
  idx_t StandardColumnData::Scan(TransactionData transaction, idx_t vector_index, ColumnScanState &state,
@@ -91,8 +90,7 @@ void StandardColumnData::InitializeAppend(ColumnAppendState &state) {
91
90
  void StandardColumnData::AppendData(BaseStatistics &stats, ColumnAppendState &state, UnifiedVectorFormat &vdata,
92
91
  idx_t count) {
93
92
  ColumnData::AppendData(stats, state, vdata, count);
94
-
95
- validity.AppendData(*stats.validity_stats, state.child_appends[0], vdata, count);
93
+ validity.AppendData(stats, state.child_appends[0], vdata, count);
96
94
  }
97
95
 
98
96
  void StandardColumnData::RevertAppend(row_t start_row) {
@@ -136,9 +134,11 @@ unique_ptr<BaseStatistics> StandardColumnData::GetUpdateStatistics() {
136
134
  return nullptr;
137
135
  }
138
136
  if (!stats) {
139
- stats = BaseStatistics::CreateEmpty(type, StatisticsType::GLOBAL_STATS);
137
+ stats = BaseStatistics::CreateEmpty(type).ToUnique();
138
+ }
139
+ if (validity_stats) {
140
+ stats->Merge(*validity_stats);
140
141
  }
141
- stats->validity_stats = std::move(validity_stats);
142
142
  return stats;
143
143
  }
144
144
 
@@ -169,7 +169,6 @@ struct StandardColumnCheckpointState : public ColumnCheckpointState {
169
169
  public:
170
170
  unique_ptr<BaseStatistics> GetStatistics() override {
171
171
  D_ASSERT(global_stats);
172
- global_stats->validity_stats = validity_state->GetStatistics();
173
172
  return std::move(global_stats);
174
173
  }
175
174
 
@@ -1,6 +1,9 @@
1
1
  #include "duckdb/storage/table/struct_column_data.hpp"
2
- #include "duckdb/storage/statistics/struct_statistics.hpp"
2
+ #include "duckdb/storage/statistics/struct_stats.hpp"
3
3
  #include "duckdb/transaction/transaction.hpp"
4
+ #include "duckdb/storage/table/column_checkpoint_state.hpp"
5
+ #include "duckdb/storage/table/append_state.hpp"
6
+ #include "duckdb/storage/table/scan_state.hpp"
4
7
 
5
8
  namespace duckdb {
6
9
 
@@ -38,40 +41,30 @@ idx_t StructColumnData::GetMaxEntry() {
38
41
  }
39
42
 
40
43
  void StructColumnData::InitializeScan(ColumnScanState &state) {
41
- D_ASSERT(state.child_states.empty());
42
-
44
+ D_ASSERT(state.child_states.size() == sub_columns.size() + 1);
43
45
  state.row_index = 0;
44
46
  state.current = nullptr;
45
47
 
46
48
  // initialize the validity segment
47
- ColumnScanState validity_state;
48
- validity.InitializeScan(validity_state);
49
- state.child_states.push_back(std::move(validity_state));
49
+ validity.InitializeScan(state.child_states[0]);
50
50
 
51
51
  // initialize the sub-columns
52
- for (auto &sub_column : sub_columns) {
53
- ColumnScanState child_state;
54
- sub_column->InitializeScan(child_state);
55
- state.child_states.push_back(std::move(child_state));
52
+ for (idx_t i = 0; i < sub_columns.size(); i++) {
53
+ sub_columns[i]->InitializeScan(state.child_states[i + 1]);
56
54
  }
57
55
  }
58
56
 
59
57
  void StructColumnData::InitializeScanWithOffset(ColumnScanState &state, idx_t row_idx) {
60
- D_ASSERT(state.child_states.empty());
61
-
58
+ D_ASSERT(state.child_states.size() == sub_columns.size() + 1);
62
59
  state.row_index = row_idx;
63
60
  state.current = nullptr;
64
61
 
65
62
  // initialize the validity segment
66
- ColumnScanState validity_state;
67
- validity.InitializeScanWithOffset(validity_state, row_idx);
68
- state.child_states.push_back(std::move(validity_state));
63
+ validity.InitializeScanWithOffset(state.child_states[0], row_idx);
69
64
 
70
65
  // initialize the sub-columns
71
- for (auto &sub_column : sub_columns) {
72
- ColumnScanState child_state;
73
- sub_column->InitializeScanWithOffset(child_state, row_idx);
74
- state.child_states.push_back(std::move(child_state));
66
+ for (idx_t i = 0; i < sub_columns.size(); i++) {
67
+ sub_columns[i]->InitializeScanWithOffset(state.child_states[i + 1], row_idx);
75
68
  }
76
69
  }
77
70
 
@@ -127,12 +120,12 @@ void StructColumnData::Append(BaseStatistics &stats, ColumnAppendState &state, V
127
120
  vector.Flatten(count);
128
121
 
129
122
  // append the null values
130
- validity.Append(*stats.validity_stats, state.child_appends[0], vector, count);
123
+ validity.Append(stats, state.child_appends[0], vector, count);
131
124
 
132
- auto &struct_stats = (StructStatistics &)stats;
133
125
  auto &child_entries = StructVector::GetEntries(vector);
134
126
  for (idx_t i = 0; i < child_entries.size(); i++) {
135
- sub_columns[i]->Append(*struct_stats.child_stats[i], state.child_appends[i + 1], *child_entries[i], count);
127
+ sub_columns[i]->Append(StructStats::GetChildStats(stats, i), state.child_appends[i + 1], *child_entries[i],
128
+ count);
136
129
  }
137
130
  }
138
131
 
@@ -190,16 +183,18 @@ void StructColumnData::UpdateColumn(TransactionData transaction, const vector<co
190
183
 
191
184
  unique_ptr<BaseStatistics> StructColumnData::GetUpdateStatistics() {
192
185
  // check if any child column has updates
193
- auto stats = BaseStatistics::CreateEmpty(type, StatisticsType::GLOBAL_STATS);
194
- auto &struct_stats = (StructStatistics &)*stats;
195
- stats->validity_stats = validity.GetUpdateStatistics();
186
+ auto stats = BaseStatistics::CreateEmpty(type);
187
+ auto validity_stats = validity.GetUpdateStatistics();
188
+ if (validity_stats) {
189
+ stats.Merge(*validity_stats);
190
+ }
196
191
  for (idx_t i = 0; i < sub_columns.size(); i++) {
197
192
  auto child_stats = sub_columns[i]->GetUpdateStatistics();
198
193
  if (child_stats) {
199
- struct_stats.child_stats[i] = std::move(child_stats);
194
+ StructStats::SetChildStats(stats, i, std::move(child_stats));
200
195
  }
201
196
  }
202
- return stats;
197
+ return stats.ToUnique();
203
198
  }
204
199
 
205
200
  void StructColumnData::FetchRow(TransactionData transaction, ColumnFetchState &state, row_t row_id, Vector &result,
@@ -230,7 +225,7 @@ struct StructColumnCheckpointState : public ColumnCheckpointState {
230
225
  StructColumnCheckpointState(RowGroup &row_group, ColumnData &column_data,
231
226
  PartialBlockManager &partial_block_manager)
232
227
  : ColumnCheckpointState(row_group, column_data, partial_block_manager) {
233
- global_stats = make_unique<StructStatistics>(column_data.type);
228
+ global_stats = StructStats::CreateEmpty(column_data.type).ToUnique();
234
229
  }
235
230
 
236
231
  unique_ptr<ColumnCheckpointState> validity_state;
@@ -238,14 +233,11 @@ struct StructColumnCheckpointState : public ColumnCheckpointState {
238
233
 
239
234
  public:
240
235
  unique_ptr<BaseStatistics> GetStatistics() override {
241
- auto stats = make_unique<StructStatistics>(column_data.type);
242
- D_ASSERT(stats->child_stats.size() == child_states.size());
243
- stats->validity_stats = validity_state->GetStatistics();
236
+ auto stats = StructStats::CreateEmpty(column_data.type);
244
237
  for (idx_t i = 0; i < child_states.size(); i++) {
245
- stats->child_stats[i] = child_states[i]->GetStatistics();
246
- D_ASSERT(stats->child_stats[i]);
238
+ StructStats::SetChildStats(stats, i, child_states[i]->GetStatistics());
247
239
  }
248
- return std::move(stats);
240
+ return stats.ToUnique();
249
241
  }
250
242
 
251
243
  void WriteDataPointers(RowGroupWriter &writer) override {
@@ -284,6 +276,7 @@ void StructColumnData::DeserializeColumn(Deserializer &source) {
284
276
  for (auto &sub_column : sub_columns) {
285
277
  sub_column->DeserializeColumn(source);
286
278
  }
279
+ this->count = validity.count;
287
280
  }
288
281
 
289
282
  void StructColumnData::GetStorageInfo(idx_t row_group_index, vector<idx_t> col_path, TableStorageInfo &result) {
@@ -6,10 +6,7 @@ namespace duckdb {
6
6
  void TableStatistics::Initialize(const vector<LogicalType> &types, PersistentTableData &data) {
7
7
  D_ASSERT(Empty());
8
8
 
9
- column_stats.reserve(data.column_stats.size());
10
- for (auto &stats : data.column_stats) {
11
- column_stats.push_back(make_shared<ColumnStatistics>(std::move(stats)));
12
- }
9
+ column_stats = std::move(data.table_stats.column_stats);
13
10
  if (column_stats.size() != types.size()) { // LCOV_EXCL_START
14
11
  throw IOException("Table statistics column count is not aligned with table column count. Corrupt file?");
15
12
  } // LCOV_EXCL_STOP
@@ -70,7 +67,7 @@ void TableStatistics::MergeStats(TableStatistics &other) {
70
67
  auto l = GetLock();
71
68
  D_ASSERT(column_stats.size() == other.column_stats.size());
72
69
  for (idx_t i = 0; i < column_stats.size(); i++) {
73
- column_stats[i]->stats->Merge(*other.column_stats[i]->stats);
70
+ column_stats[i]->Merge(*other.column_stats[i]);
74
71
  }
75
72
  }
76
73
 
@@ -80,7 +77,7 @@ void TableStatistics::MergeStats(idx_t i, BaseStatistics &stats) {
80
77
  }
81
78
 
82
79
  void TableStatistics::MergeStats(TableStatisticsLock &lock, idx_t i, BaseStatistics &stats) {
83
- column_stats[i]->stats->Merge(stats);
80
+ column_stats[i]->Statistics().Merge(stats);
84
81
  }
85
82
 
86
83
  ColumnStatistics &TableStatistics::GetStats(idx_t i) {
@@ -89,7 +86,30 @@ ColumnStatistics &TableStatistics::GetStats(idx_t i) {
89
86
 
90
87
  unique_ptr<BaseStatistics> TableStatistics::CopyStats(idx_t i) {
91
88
  lock_guard<mutex> l(stats_lock);
92
- return column_stats[i]->stats->Copy();
89
+ auto result = column_stats[i]->Statistics().Copy();
90
+ if (column_stats[i]->HasDistinctStats()) {
91
+ result.SetDistinctCount(column_stats[i]->DistinctStats().GetCount());
92
+ }
93
+ return result.ToUnique();
94
+ }
95
+
96
+ void TableStatistics::CopyStats(TableStatistics &other) {
97
+ for (auto &stats : column_stats) {
98
+ other.column_stats.push_back(stats->Copy());
99
+ }
100
+ }
101
+
102
+ void TableStatistics::Serialize(Serializer &serializer) {
103
+ for (auto &stats : column_stats) {
104
+ stats->Serialize(serializer);
105
+ }
106
+ }
107
+
108
+ void TableStatistics::Deserialize(Deserializer &source, ColumnList &columns) {
109
+ for (auto &col : columns.Physical()) {
110
+ auto stats = ColumnStatistics::Deserialize(source, col.GetType());
111
+ column_stats.push_back(std::move(stats));
112
+ }
93
113
  }
94
114
 
95
115
  unique_ptr<TableStatisticsLock> TableStatistics::GetLock() {
@@ -1,12 +1,13 @@
1
1
  #include "duckdb/storage/table/update_segment.hpp"
2
2
 
3
3
  #include "duckdb/storage/statistics/distinct_statistics.hpp"
4
- #include "duckdb/storage/statistics/numeric_statistics.hpp"
5
- #include "duckdb/storage/statistics/string_statistics.hpp"
6
- #include "duckdb/storage/statistics/validity_statistics.hpp"
4
+
7
5
  #include "duckdb/storage/table/column_data.hpp"
8
6
  #include "duckdb/transaction/duck_transaction.hpp"
9
7
  #include "duckdb/transaction/update_info.hpp"
8
+ #include "duckdb/common/printer.hpp"
9
+
10
+ #include <algorithm>
10
11
 
11
12
  namespace duckdb {
12
13
 
@@ -40,7 +41,17 @@ UpdateSegment::UpdateSegment(UpdateSegment &other, ColumnData &owner)
40
41
  : column_data(owner), root(std::move(other.root)), stats(std::move(other.stats)), type_size(other.type_size) {
41
42
 
42
43
  this->heap.Move(other.heap);
43
-
44
+ // update the segment links
45
+ if (root) {
46
+ for (idx_t i = 0; i < RowGroup::ROW_GROUP_VECTOR_COUNT; i++) {
47
+ if (!root->info[i]) {
48
+ continue;
49
+ }
50
+ for (auto info = root->info[i]->info.get(); info; info = info->next) {
51
+ info->segment = this;
52
+ }
53
+ }
54
+ }
44
55
  initialize_update_function = other.initialize_update_function;
45
56
  merge_update_function = other.merge_update_function;
46
57
  fetch_update_function = other.fetch_update_function;
@@ -54,12 +65,6 @@ UpdateSegment::UpdateSegment(UpdateSegment &other, ColumnData &owner)
54
65
  UpdateSegment::~UpdateSegment() {
55
66
  }
56
67
 
57
- void UpdateSegment::ClearUpdates() {
58
- stats.Reset();
59
- root.reset();
60
- heap.Destroy();
61
- }
62
-
63
68
  //===--------------------------------------------------------------------===//
64
69
  // Update Info Helpers
65
70
  //===--------------------------------------------------------------------===//
@@ -905,17 +910,17 @@ static UpdateSegment::merge_update_function_t GetMergeUpdateFunction(PhysicalTyp
905
910
  //===--------------------------------------------------------------------===//
906
911
  unique_ptr<BaseStatistics> UpdateSegment::GetStatistics() {
907
912
  lock_guard<mutex> stats_guard(stats_lock);
908
- return stats.statistics->Copy();
913
+ return stats.statistics.ToUnique();
909
914
  }
910
915
 
911
916
  idx_t UpdateValidityStatistics(UpdateSegment *segment, SegmentStatistics &stats, Vector &update, idx_t count,
912
917
  SelectionVector &sel) {
913
918
  auto &mask = FlatVector::Validity(update);
914
- auto &validity = (ValidityStatistics &)*stats.statistics;
915
- if (!mask.AllValid() && !validity.has_null) {
919
+ auto &validity = stats.statistics;
920
+ if (!mask.AllValid() && !validity.CanHaveNull()) {
916
921
  for (idx_t i = 0; i < count; i++) {
917
922
  if (!mask.RowIsValid(i)) {
918
- validity.has_null = true;
923
+ validity.SetHasNull();
919
924
  break;
920
925
  }
921
926
  }
@@ -932,7 +937,7 @@ idx_t TemplatedUpdateNumericStatistics(UpdateSegment *segment, SegmentStatistics
932
937
 
933
938
  if (mask.AllValid()) {
934
939
  for (idx_t i = 0; i < count; i++) {
935
- NumericStatistics::Update<T>(stats, update_data[i]);
940
+ NumericStats::Update<T>(stats.statistics, update_data[i]);
936
941
  }
937
942
  sel.Initialize(nullptr);
938
943
  return count;
@@ -942,7 +947,7 @@ idx_t TemplatedUpdateNumericStatistics(UpdateSegment *segment, SegmentStatistics
942
947
  for (idx_t i = 0; i < count; i++) {
943
948
  if (mask.RowIsValid(i)) {
944
949
  sel.set_index(not_null_count++, i);
945
- NumericStatistics::Update<T>(stats, update_data[i]);
950
+ NumericStats::Update<T>(stats.statistics, update_data[i]);
946
951
  }
947
952
  }
948
953
  return not_null_count;
@@ -955,7 +960,7 @@ idx_t UpdateStringStatistics(UpdateSegment *segment, SegmentStatistics &stats, V
955
960
  auto &mask = FlatVector::Validity(update);
956
961
  if (mask.AllValid()) {
957
962
  for (idx_t i = 0; i < count; i++) {
958
- ((StringStatistics &)*stats.statistics).Update(update_data[i]);
963
+ StringStats::Update(stats.statistics, update_data[i]);
959
964
  if (!update_data[i].IsInlined()) {
960
965
  update_data[i] = segment->GetStringHeap().AddBlob(update_data[i]);
961
966
  }
@@ -968,7 +973,7 @@ idx_t UpdateStringStatistics(UpdateSegment *segment, SegmentStatistics &stats, V
968
973
  for (idx_t i = 0; i < count; i++) {
969
974
  if (mask.RowIsValid(i)) {
970
975
  sel.set_index(not_null_count++, i);
971
- ((StringStatistics &)*stats.statistics).Update(update_data[i]);
976
+ StringStats::Update(stats.statistics, update_data[i]);
972
977
  if (!update_data[i].IsInlined()) {
973
978
  update_data[i] = segment->GetStringHeap().AddBlob(update_data[i]);
974
979
  }
@@ -24,17 +24,19 @@
24
24
  namespace duckdb {
25
25
 
26
26
  bool WriteAheadLog::Replay(AttachedDatabase &database, string &path) {
27
- auto initial_reader = make_unique<BufferedFileReader>(FileSystem::Get(database), path.c_str());
27
+ Connection con(database.GetDatabase());
28
+ auto initial_reader = make_unique<BufferedFileReader>(FileSystem::Get(database), path.c_str(), con.context.get());
28
29
  if (initial_reader->Finished()) {
29
30
  // WAL is empty
30
31
  return false;
31
32
  }
32
- Connection con(database.GetDatabase());
33
+
33
34
  con.BeginTransaction();
34
35
 
35
36
  // first deserialize the WAL to look for a checkpoint flag
36
37
  // if there is a checkpoint flag, we might have already flushed the contents of the WAL to disk
37
38
  ReplayState checkpoint_state(database, *con.context, *initial_reader);
39
+ initial_reader->catalog = &checkpoint_state.catalog;
38
40
  checkpoint_state.deserialize_only = true;
39
41
  try {
40
42
  while (true) {
@@ -70,7 +72,8 @@ bool WriteAheadLog::Replay(AttachedDatabase &database, string &path) {
70
72
  }
71
73
 
72
74
  // we need to recover from the WAL: actually set up the replay state
73
- BufferedFileReader reader(FileSystem::Get(database), path.c_str());
75
+ BufferedFileReader reader(FileSystem::Get(database), path.c_str(), con.context.get());
76
+ reader.catalog = &checkpoint_state.catalog;
74
77
  ReplayState state(database, *con.context, reader);
75
78
 
76
79
  // replay the WAL
@@ -192,6 +195,7 @@ void ReplayState::ReplayEntry(WALType entry_type) {
192
195
  // Replay Table
193
196
  //===--------------------------------------------------------------------===//
194
197
  void ReplayState::ReplayCreateTable() {
198
+
195
199
  auto info = TableCatalogEntry::Deserialize(source, context);
196
200
  if (deserialize_only) {
197
201
  return;
@@ -278,10 +282,9 @@ void ReplayState::ReplayDropSchema() {
278
282
  //===--------------------------------------------------------------------===//
279
283
  void ReplayState::ReplayCreateType() {
280
284
  auto info = TypeCatalogEntry::Deserialize(source);
281
- if (deserialize_only) {
285
+ if (Catalog::TypeExists(context, info->catalog, info->schema, info->name)) {
282
286
  return;
283
287
  }
284
-
285
288
  catalog.CreateType(context, info.get());
286
289
  }
287
290
 
@@ -281,12 +281,12 @@ void WriteAheadLog::WriteUpdate(DataChunk &chunk, const vector<column_t> &column
281
281
  //===--------------------------------------------------------------------===//
282
282
  // Write ALTER Statement
283
283
  //===--------------------------------------------------------------------===//
284
- void WriteAheadLog::WriteAlter(AlterInfo &info) {
284
+ void WriteAheadLog::WriteAlter(data_ptr_t ptr, idx_t data_size) {
285
285
  if (skip_writing) {
286
286
  return;
287
287
  }
288
288
  writer->Write<WALType>(WALType::ALTER_INFO);
289
- info.Serialize(*writer);
289
+ writer->WriteData(ptr, data_size);
290
290
  }
291
291
 
292
292
  //===--------------------------------------------------------------------===//
@@ -46,12 +46,16 @@ void CommitState::WriteCatalogEntry(CatalogEntry *entry, data_ptr_t dataptr) {
46
46
  // ALTER TABLE statement, read the extra data after the entry
47
47
  auto extra_data_size = Load<idx_t>(dataptr);
48
48
  auto extra_data = (data_ptr_t)(dataptr + sizeof(idx_t));
49
- // deserialize it
49
+
50
50
  BufferedDeserializer source(extra_data, extra_data_size);
51
- auto info = AlterInfo::Deserialize(source);
52
- // write the alter table in the log
53
- table_entry->CommitAlter(*info);
54
- log->WriteAlter(*info);
51
+ string column_name = source.Read<string>();
52
+
53
+ if (!column_name.empty()) {
54
+ // write the alter table in the log
55
+ table_entry->CommitAlter(column_name);
56
+ }
57
+
58
+ log->WriteAlter(source.ptr, source.endptr - source.ptr);
55
59
  } else {
56
60
  // CREATE TABLE statement
57
61
  log->WriteCreateTable((TableCatalogEntry *)parent);
@@ -71,9 +75,9 @@ void CommitState::WriteCatalogEntry(CatalogEntry *entry, data_ptr_t dataptr) {
71
75
  auto extra_data = (data_ptr_t)(dataptr + sizeof(idx_t));
72
76
  // deserialize it
73
77
  BufferedDeserializer source(extra_data, extra_data_size);
74
- auto info = AlterInfo::Deserialize(source);
78
+ string column_name = source.Read<string>();
75
79
  // write the alter table in the log
76
- log->WriteAlter(*info);
80
+ log->WriteAlter(source.ptr, source.endptr - source.ptr);
77
81
  } else {
78
82
  log->WriteCreateView((ViewCatalogEntry *)parent);
79
83
  }
@@ -1,5 +1,4 @@
1
1
  #include "duckdb/verification/deserialized_statement_verifier.hpp"
2
-
3
2
  #include "duckdb/common/serializer/buffered_deserializer.hpp"
4
3
 
5
4
  namespace duckdb {
@@ -194,6 +194,9 @@ typedef enum PGNodeTag {
194
194
  T_PGOnConflictExpr,
195
195
  T_PGIntoClause,
196
196
  T_PGLambdaFunction,
197
+ T_PGPivotExpr,
198
+ T_PGPivot,
199
+ T_PGPivotStmt,
197
200
 
198
201
  /*
199
202
  * TAGS FOR EXPRESSION STATE NODES (execnodes.h)
@@ -678,6 +681,38 @@ typedef enum PGJoinType {
678
681
  */
679
682
  } PGJoinType;
680
683
 
684
+ /*
685
+ * PGJoinRefType -
686
+ * enums for the types of implied conditions
687
+ *
688
+ * PGJoinRefType specifies the semantics of interpreting the join conditions.
689
+ * These can be explicit (e.g., REGULAR) implied (e.g., NATURAL)
690
+ * or interpreted in a particular manner (e.g., ASOF)
691
+ *
692
+ * This is a generalisation of the old Postgres isNatural flag.
693
+ */
694
+ typedef enum PGJoinRefType {
695
+ PG_JOIN_REGULAR, /* Join conditions are interpreted as is */
696
+ PG_JOIN_NATURAL, /* Join conditions are inferred from the column names */
697
+
698
+ /*
699
+ * ASOF joins are joins with a single inequality predicate
700
+ * and optional equality predicates.
701
+ * The semantics are equivalent to the following window join:
702
+ * times t
703
+ * <jointype> JOIN (
704
+ * SELECT *,
705
+ * LEAD(begin, 1, 'infinity') OVER ([PARTITION BY key] ORDER BY begin) AS end)
706
+ * FROM events) e
707
+ * ON t.ts >= e.begin AND t.ts < e.end [AND t.key = e.key]
708
+ */
709
+ PG_JOIN_ASOF
710
+
711
+ /*
712
+ * Positional join is a candidate to move here
713
+ */
714
+ } PGJoinRefType;
715
+
681
716
  /*
682
717
  * OUTER joins are those for which pushed-down quals must behave differently
683
718
  * from the join's own quals. This is in fact everything except INNER and
@@ -307,7 +307,7 @@ typedef struct PGFuncCall {
307
307
  typedef struct PGAStar {
308
308
  PGNodeTag type;
309
309
  char *relation; /* relation name (optional) */
310
- char *regex; /* optional: REGEX to select columns */
310
+ PGNode *expr; /* optional: the expression (regex or list) to select columns */
311
311
  PGList *except_list; /* optional: EXCLUDE list */
312
312
  PGList *replace_list; /* optional: REPLACE list */
313
313
  bool columns; /* whether or not this is a columns list */
@@ -1162,6 +1162,38 @@ typedef struct PGUpdateStmt {
1162
1162
  PGWithClause *withClause; /* WITH clause */
1163
1163
  } PGUpdateStmt;
1164
1164
 
1165
+ /* ----------------------
1166
+ * Pivot Expression
1167
+ * ----------------------
1168
+ */
1169
+ typedef struct PGPivot {
1170
+ PGNodeTag type;
1171
+ PGList *pivot_columns; /* The column names to pivot on */
1172
+ PGList *unpivot_columns;/* The column names to unpivot */
1173
+ PGList *pivot_value; /* The set of pivot values */
1174
+ char *pivot_enum; /* The enum to fetch the unique values from */
1175
+ } PGPivot;
1176
+
1177
+ typedef struct PGPivotExpr {
1178
+ PGNodeTag type;
1179
+ PGNode *source; /* the source subtree */
1180
+ PGList *aggrs; /* The aggregations to pivot over (PIVOT only) */
1181
+ PGList *unpivots; /* The names to unpivot over (UNPIVOT only) */
1182
+ PGList *pivots; /* The set of pivot values */
1183
+ PGList *groups; /* The set of groups to pivot over (if any) */
1184
+ PGAlias *alias; /* table alias & optional column aliases */
1185
+ bool include_nulls; /* Whether or not to include NULL values (UNPIVOT only */
1186
+ } PGPivotExpr;
1187
+
1188
+ typedef struct PGPivotStmt {
1189
+ PGNodeTag type;
1190
+ PGNode *source; /* The source to pivot */
1191
+ PGList *aggrs; /* The aggregations to pivot over (PIVOT only) */
1192
+ PGList *unpivots; /* The names to unpivot over (UNPIVOT only) */
1193
+ PGList *columns; /* The set of columns to pivot over */
1194
+ PGList *groups; /* The set of groups to pivot over (if any) */
1195
+ } PGPivotStmt;
1196
+
1165
1197
  /* ----------------------
1166
1198
  * Select Statement
1167
1199
  *
@@ -1204,6 +1236,9 @@ typedef struct PGSelectStmt {
1204
1236
  */
1205
1237
  PGList *valuesLists; /* untransformed list of expression lists */
1206
1238
 
1239
+ /* When representing a pivot statement, all values are NULL besides the pivot field */
1240
+ PGPivotStmt *pivot; /* PIVOT statement */
1241
+
1207
1242
  /*
1208
1243
  * These fields are used in both "leaf" SelectStmts and upper-level
1209
1244
  * SelectStmts.
@@ -2107,5 +2142,4 @@ typedef struct PGUseStmt {
2107
2142
  } PGUseStmt;
2108
2143
 
2109
2144
 
2110
-
2111
2145
  }
@@ -1324,7 +1324,7 @@ typedef struct PGRangeTblRef {
1324
1324
  /*----------
1325
1325
  * PGJoinExpr - for SQL JOIN expressions
1326
1326
  *
1327
- * isNatural, usingClause, and quals are interdependent. The user can write
1327
+ * joinreftype, usingClause, and quals are interdependent. The user can write
1328
1328
  * only one of NATURAL, USING(), or ON() (this is enforced by the grammar).
1329
1329
  * If he writes NATURAL then parse analysis generates the equivalent USING()
1330
1330
  * list, and from that fills in "quals" with the right equality comparisons.
@@ -1347,7 +1347,7 @@ typedef struct PGRangeTblRef {
1347
1347
  typedef struct PGJoinExpr {
1348
1348
  PGNodeTag type;
1349
1349
  PGJoinType jointype; /* type of join */
1350
- bool isNatural; /* Natural join? Will need to shape table */
1350
+ PGJoinRefType joinreftype; /* Regular/Natural/AsOf join? Will need to shape table */
1351
1351
  PGNode *larg; /* left subtree */
1352
1352
  PGNode *rarg; /* right subtree */
1353
1353
  PGList *usingClause; /* USING clause, if any (list of String) */
@@ -1398,4 +1398,4 @@ typedef struct PGOnConflictExpr {
1398
1398
  PGList *exclRelTlist; /* tlist of the EXCLUDED pseudo relation */
1399
1399
  } PGOnConflictExpr;
1400
1400
 
1401
- }
1401
+ }