duckdb 0.7.2-dev12.0 → 0.7.2-dev1238.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (631) hide show
  1. package/binding.gyp +12 -7
  2. package/lib/duckdb.d.ts +55 -2
  3. package/lib/duckdb.js +20 -1
  4. package/package.json +1 -1
  5. package/src/connection.cpp +1 -2
  6. package/src/database.cpp +1 -1
  7. package/src/duckdb/extension/icu/icu-extension.cpp +4 -0
  8. package/src/duckdb/extension/icu/icu-list-range.cpp +207 -0
  9. package/src/duckdb/extension/icu/icu-table-range.cpp +194 -0
  10. package/src/duckdb/extension/icu/include/icu-list-range.hpp +17 -0
  11. package/src/duckdb/extension/icu/include/icu-table-range.hpp +17 -0
  12. package/src/duckdb/extension/icu/third_party/icu/stubdata/stubdata.cpp +1 -1
  13. package/src/duckdb/extension/json/include/json_common.hpp +1 -0
  14. package/src/duckdb/extension/json/include/json_functions.hpp +2 -0
  15. package/src/duckdb/extension/json/include/json_serializer.hpp +77 -0
  16. package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +147 -0
  17. package/src/duckdb/extension/json/json_functions/read_json.cpp +6 -5
  18. package/src/duckdb/extension/json/json_functions.cpp +12 -4
  19. package/src/duckdb/extension/json/json_scan.cpp +2 -2
  20. package/src/duckdb/extension/json/json_serializer.cpp +217 -0
  21. package/src/duckdb/extension/parquet/column_reader.cpp +94 -15
  22. package/src/duckdb/extension/parquet/column_writer.cpp +0 -1
  23. package/src/duckdb/extension/parquet/include/column_reader.hpp +1 -2
  24. package/src/duckdb/extension/parquet/include/decode_utils.hpp +5 -4
  25. package/src/duckdb/extension/parquet/include/generated_column_reader.hpp +1 -11
  26. package/src/duckdb/extension/parquet/include/parquet_timestamp.hpp +2 -1
  27. package/src/duckdb/extension/parquet/parquet-extension.cpp +14 -3
  28. package/src/duckdb/extension/parquet/parquet_reader.cpp +6 -1
  29. package/src/duckdb/extension/parquet/parquet_statistics.cpp +49 -36
  30. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +16 -6
  31. package/src/duckdb/src/catalog/catalog.cpp +34 -5
  32. package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +4 -0
  33. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +2 -21
  34. package/src/duckdb/src/catalog/catalog_entry/scalar_function_catalog_entry.cpp +7 -6
  35. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +3 -3
  36. package/src/duckdb/src/catalog/catalog_entry/table_function_catalog_entry.cpp +20 -1
  37. package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +8 -2
  38. package/src/duckdb/src/catalog/catalog_set.cpp +1 -0
  39. package/src/duckdb/src/catalog/default/default_functions.cpp +3 -0
  40. package/src/duckdb/src/catalog/dependency_list.cpp +12 -0
  41. package/src/duckdb/src/catalog/duck_catalog.cpp +34 -7
  42. package/src/duckdb/src/common/arrow/arrow_appender.cpp +48 -4
  43. package/src/duckdb/src/common/arrow/arrow_converter.cpp +1 -1
  44. package/src/duckdb/src/common/box_renderer.cpp +109 -23
  45. package/src/duckdb/src/common/enums/expression_type.cpp +8 -222
  46. package/src/duckdb/src/common/enums/join_type.cpp +3 -22
  47. package/src/duckdb/src/common/enums/logical_operator_type.cpp +2 -0
  48. package/src/duckdb/src/common/enums/statement_type.cpp +2 -0
  49. package/src/duckdb/src/common/exception.cpp +15 -1
  50. package/src/duckdb/src/common/field_writer.cpp +1 -0
  51. package/src/duckdb/src/common/hive_partitioning.cpp +3 -1
  52. package/src/duckdb/src/common/local_file_system.cpp +64 -7
  53. package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
  54. package/src/duckdb/src/common/preserved_error.cpp +7 -5
  55. package/src/duckdb/src/common/progress_bar/progress_bar.cpp +7 -0
  56. package/src/duckdb/src/common/serializer/buffered_deserializer.cpp +4 -0
  57. package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +15 -2
  58. package/src/duckdb/src/common/serializer/enum_serializer.cpp +1176 -0
  59. package/src/duckdb/src/common/sort/comparators.cpp +14 -5
  60. package/src/duckdb/src/common/sort/sort_state.cpp +5 -7
  61. package/src/duckdb/src/common/sort/sorted_block.cpp +0 -1
  62. package/src/duckdb/src/common/string_util.cpp +18 -1
  63. package/src/duckdb/src/common/types/bit.cpp +166 -87
  64. package/src/duckdb/src/common/types/blob.cpp +1 -1
  65. package/src/duckdb/src/common/types/chunk_collection.cpp +2 -2
  66. package/src/duckdb/src/common/types/column_data_collection.cpp +39 -2
  67. package/src/duckdb/src/common/types/column_data_collection_segment.cpp +12 -10
  68. package/src/duckdb/src/common/types/data_chunk.cpp +1 -1
  69. package/src/duckdb/src/common/types/interval.cpp +0 -41
  70. package/src/duckdb/src/common/types/list_segment.cpp +658 -0
  71. package/src/duckdb/src/common/types/string_heap.cpp +1 -1
  72. package/src/duckdb/src/common/types/string_type.cpp +1 -1
  73. package/src/duckdb/src/common/types/time.cpp +13 -0
  74. package/src/duckdb/src/common/types/validity_mask.cpp +24 -7
  75. package/src/duckdb/src/common/types/value.cpp +320 -154
  76. package/src/duckdb/src/common/types/vector.cpp +158 -134
  77. package/src/duckdb/src/common/types.cpp +313 -153
  78. package/src/duckdb/src/common/value_operations/comparison_operations.cpp +14 -22
  79. package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +10 -10
  80. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +11 -10
  81. package/src/duckdb/src/common/vector_operations/vector_cast.cpp +2 -1
  82. package/src/duckdb/src/execution/aggregate_hashtable.cpp +98 -74
  83. package/src/duckdb/src/execution/column_binding_resolver.cpp +21 -5
  84. package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +2 -1
  85. package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +2 -2
  86. package/src/duckdb/src/execution/index/art/art.cpp +19 -5
  87. package/src/duckdb/src/execution/join_hashtable.cpp +3 -1
  88. package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +1 -1
  89. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +4 -5
  90. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +117 -26
  91. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +3 -0
  92. package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +5 -3
  93. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +64 -17
  94. package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +2 -0
  95. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -2
  96. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +13 -4
  97. package/src/duckdb/src/execution/operator/join/physical_join.cpp +0 -3
  98. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +6 -11
  99. package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +3 -1
  100. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +11 -4
  101. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +24 -19
  102. package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +3 -0
  103. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -1
  104. package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +2 -2
  105. package/src/duckdb/src/execution/operator/persistent/physical_delete.cpp +1 -3
  106. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -0
  107. package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +34 -0
  108. package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +20 -5
  109. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +20 -40
  110. package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +2 -5
  111. package/src/duckdb/src/execution/partitionable_hashtable.cpp +20 -5
  112. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +22 -16
  113. package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +97 -0
  114. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +95 -47
  115. package/src/duckdb/src/execution/physical_plan/plan_create_index.cpp +2 -1
  116. package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +5 -8
  117. package/src/duckdb/src/execution/physical_plan/plan_positional_join.cpp +14 -5
  118. package/src/duckdb/src/execution/physical_plan_generator.cpp +3 -0
  119. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +23 -15
  120. package/src/duckdb/src/execution/window_segment_tree.cpp +173 -1
  121. package/src/duckdb/src/function/aggregate/algebraic/avg.cpp +0 -6
  122. package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +99 -95
  123. package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +269 -0
  124. package/src/duckdb/src/function/aggregate/distributive/bool.cpp +2 -0
  125. package/src/duckdb/src/function/aggregate/distributive/count.cpp +3 -4
  126. package/src/duckdb/src/function/aggregate/distributive/first.cpp +1 -0
  127. package/src/duckdb/src/function/aggregate/distributive/minmax.cpp +2 -0
  128. package/src/duckdb/src/function/aggregate/distributive/sum.cpp +19 -16
  129. package/src/duckdb/src/function/aggregate/distributive_functions.cpp +1 -0
  130. package/src/duckdb/src/function/aggregate/holistic/approximate_quantile.cpp +5 -2
  131. package/src/duckdb/src/function/aggregate/holistic/mode.cpp +1 -1
  132. package/src/duckdb/src/function/aggregate/holistic/quantile.cpp +16 -1
  133. package/src/duckdb/src/function/aggregate/nested/list.cpp +6 -712
  134. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +138 -45
  135. package/src/duckdb/src/function/cast/bit_cast.cpp +0 -2
  136. package/src/duckdb/src/function/cast/blob_cast.cpp +0 -1
  137. package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
  138. package/src/duckdb/src/function/cast/enum_casts.cpp +25 -3
  139. package/src/duckdb/src/function/cast/list_casts.cpp +17 -4
  140. package/src/duckdb/src/function/cast/map_cast.cpp +5 -2
  141. package/src/duckdb/src/function/cast/string_cast.cpp +36 -10
  142. package/src/duckdb/src/function/cast/struct_cast.cpp +24 -4
  143. package/src/duckdb/src/function/cast/time_casts.cpp +2 -2
  144. package/src/duckdb/src/function/cast/union_casts.cpp +33 -7
  145. package/src/duckdb/src/function/cast_rules.cpp +9 -4
  146. package/src/duckdb/src/function/function_binder.cpp +1 -8
  147. package/src/duckdb/src/function/pragma/pragma_queries.cpp +24 -1
  148. package/src/duckdb/src/function/scalar/bit/bitstring.cpp +100 -0
  149. package/src/duckdb/src/function/scalar/date/current.cpp +0 -2
  150. package/src/duckdb/src/function/scalar/date/date_diff.cpp +0 -1
  151. package/src/duckdb/src/function/scalar/date/date_part.cpp +18 -26
  152. package/src/duckdb/src/function/scalar/date/date_sub.cpp +0 -1
  153. package/src/duckdb/src/function/scalar/date/date_trunc.cpp +10 -14
  154. package/src/duckdb/src/function/scalar/generic/stats.cpp +2 -4
  155. package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +4 -146
  156. package/src/duckdb/src/function/scalar/list/flatten.cpp +5 -12
  157. package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +1 -1
  158. package/src/duckdb/src/function/scalar/list/list_concat.cpp +8 -12
  159. package/src/duckdb/src/function/scalar/list/list_extract.cpp +5 -12
  160. package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +7 -3
  161. package/src/duckdb/src/function/scalar/list/list_sort.cpp +25 -18
  162. package/src/duckdb/src/function/scalar/list/list_value.cpp +6 -10
  163. package/src/duckdb/src/function/scalar/map/map.cpp +47 -1
  164. package/src/duckdb/src/function/scalar/map/map_entries.cpp +61 -0
  165. package/src/duckdb/src/function/scalar/map/map_extract.cpp +68 -26
  166. package/src/duckdb/src/function/scalar/map/map_keys_values.cpp +97 -0
  167. package/src/duckdb/src/function/scalar/math/numeric.cpp +101 -17
  168. package/src/duckdb/src/function/scalar/math_functions.cpp +3 -0
  169. package/src/duckdb/src/function/scalar/nested_functions.cpp +3 -0
  170. package/src/duckdb/src/function/scalar/operators/add.cpp +0 -9
  171. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +29 -48
  172. package/src/duckdb/src/function/scalar/operators/bitwise.cpp +0 -63
  173. package/src/duckdb/src/function/scalar/operators/multiply.cpp +5 -6
  174. package/src/duckdb/src/function/scalar/operators/subtract.cpp +0 -6
  175. package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -6
  176. package/src/duckdb/src/function/scalar/string/hex.cpp +201 -0
  177. package/src/duckdb/src/function/scalar/string/instr.cpp +2 -6
  178. package/src/duckdb/src/function/scalar/string/length.cpp +2 -6
  179. package/src/duckdb/src/function/scalar/string/like.cpp +2 -6
  180. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +243 -0
  181. package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +79 -0
  182. package/src/duckdb/src/function/scalar/string/regexp.cpp +21 -80
  183. package/src/duckdb/src/function/scalar/string/substring.cpp +2 -6
  184. package/src/duckdb/src/function/scalar/string_functions.cpp +2 -0
  185. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +5 -10
  186. package/src/duckdb/src/function/scalar/struct/struct_insert.cpp +11 -14
  187. package/src/duckdb/src/function/scalar/struct/struct_pack.cpp +6 -7
  188. package/src/duckdb/src/function/table/arrow.cpp +5 -2
  189. package/src/duckdb/src/function/table/arrow_conversion.cpp +25 -1
  190. package/src/duckdb/src/function/table/checkpoint.cpp +5 -1
  191. package/src/duckdb/src/function/table/read_csv.cpp +60 -0
  192. package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +2 -2
  193. package/src/duckdb/src/function/table/system/test_all_types.cpp +2 -2
  194. package/src/duckdb/src/function/table/table_scan.cpp +9 -12
  195. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  196. package/src/duckdb/src/function/table_function.cpp +30 -11
  197. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +6 -0
  198. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +1 -1
  199. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +6 -8
  200. package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +3 -0
  201. package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +2 -1
  202. package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +8 -2
  203. package/src/duckdb/src/include/duckdb/common/constants.hpp +0 -19
  204. package/src/duckdb/src/include/duckdb/common/enums/aggregate_handling.hpp +2 -0
  205. package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -3
  206. package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +7 -4
  207. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +1 -0
  208. package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +2 -0
  209. package/src/duckdb/src/include/duckdb/common/enums/set_operation_type.hpp +2 -1
  210. package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +2 -1
  211. package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +2 -1
  212. package/src/duckdb/src/include/duckdb/common/exception.hpp +69 -2
  213. package/src/duckdb/src/include/duckdb/common/field_writer.hpp +12 -4
  214. package/src/duckdb/src/include/duckdb/common/helper.hpp +1 -1
  215. package/src/duckdb/src/include/duckdb/common/{http_stats.hpp → http_state.hpp} +18 -4
  216. package/src/duckdb/src/include/duckdb/common/operator/comparison_operators.hpp +45 -149
  217. package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +2 -0
  218. package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +45 -0
  219. package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +6 -1
  220. package/src/duckdb/src/include/duckdb/common/progress_bar/progress_bar.hpp +2 -0
  221. package/src/duckdb/src/include/duckdb/common/serializer/buffered_deserializer.hpp +4 -2
  222. package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +8 -2
  223. package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +113 -0
  224. package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +336 -0
  225. package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +268 -0
  226. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +126 -0
  227. package/src/duckdb/src/include/duckdb/common/serializer.hpp +13 -0
  228. package/src/duckdb/src/include/duckdb/common/string_util.hpp +27 -0
  229. package/src/duckdb/src/include/duckdb/common/types/bit.hpp +12 -7
  230. package/src/duckdb/src/include/duckdb/common/types/interval.hpp +39 -3
  231. package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +70 -0
  232. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +73 -3
  233. package/src/duckdb/src/include/duckdb/common/types/time.hpp +3 -0
  234. package/src/duckdb/src/include/duckdb/common/types/validity_mask.hpp +4 -1
  235. package/src/duckdb/src/include/duckdb/common/types/value.hpp +17 -48
  236. package/src/duckdb/src/include/duckdb/common/types/value_map.hpp +1 -1
  237. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -1
  238. package/src/duckdb/src/include/duckdb/common/types.hpp +45 -8
  239. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +2 -2
  240. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +35 -20
  241. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -14
  242. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_perfecthash_aggregate.hpp +1 -1
  243. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_cross_product.hpp +2 -0
  244. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_file_handle.hpp +1 -0
  245. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +10 -0
  246. package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_projection.hpp +5 -0
  247. package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +5 -1
  248. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +1 -3
  249. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +54 -0
  250. package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +5 -0
  251. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +18 -6
  252. package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +84 -0
  253. package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +2 -2
  254. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +28 -64
  255. package/src/duckdb/src/include/duckdb/function/function_binder.hpp +3 -6
  256. package/src/duckdb/src/include/duckdb/function/scalar/bit_functions.hpp +4 -0
  257. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +138 -0
  258. package/src/duckdb/src/include/duckdb/function/scalar/math_functions.hpp +8 -0
  259. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +59 -0
  260. package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
  261. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +4 -0
  262. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
  263. package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +12 -1
  264. package/src/duckdb/src/include/duckdb/function/table_function.hpp +10 -0
  265. package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -0
  266. package/src/duckdb/src/include/duckdb/main/client_config.hpp +2 -0
  267. package/src/duckdb/src/include/duckdb/main/client_data.hpp +3 -3
  268. package/src/duckdb/src/include/duckdb/main/config.hpp +3 -0
  269. package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +2 -0
  270. package/src/duckdb/src/include/duckdb/main/database.hpp +1 -0
  271. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +2 -0
  272. package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +2 -0
  273. package/src/duckdb/src/include/duckdb/main/relation/explain_relation.hpp +2 -1
  274. package/src/duckdb/src/include/duckdb/main/relation.hpp +2 -1
  275. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
  276. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  277. package/src/duckdb/src/include/duckdb/optimizer/rule/list.hpp +1 -0
  278. package/src/duckdb/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp +24 -0
  279. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +4 -0
  280. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
  281. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
  282. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +5 -0
  283. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -0
  284. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -0
  285. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -0
  286. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -0
  287. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -0
  288. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
  289. package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
  290. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +4 -2
  291. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -0
  292. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -0
  293. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -0
  294. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -0
  295. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +4 -2
  296. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -0
  297. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +5 -0
  298. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +5 -1
  299. package/src/duckdb/src/include/duckdb/parser/parsed_data/{alter_function_info.hpp → alter_scalar_function_info.hpp} +13 -13
  300. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +47 -0
  301. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +6 -0
  302. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_function_info.hpp +2 -1
  303. package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -0
  304. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -0
  305. package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
  306. package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +5 -0
  307. package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
  308. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +13 -2
  309. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +24 -1
  310. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -1
  311. package/src/duckdb/src/include/duckdb/parser/statement/multi_statement.hpp +28 -0
  312. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +6 -1
  313. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +4 -0
  314. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -0
  315. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
  316. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
  317. package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
  318. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +87 -0
  319. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
  320. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
  321. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -1
  322. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -0
  323. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +33 -0
  324. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -0
  325. package/src/duckdb/src/include/duckdb/planner/binder.hpp +15 -4
  326. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +3 -0
  327. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +3 -0
  328. package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +64 -0
  329. package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -2
  330. package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +4 -1
  331. package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +2 -2
  332. package/src/duckdb/src/include/duckdb/planner/expression_binder/select_binder.hpp +9 -38
  333. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
  334. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
  335. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
  336. package/src/duckdb/src/include/duckdb/planner/operator/logical_asof_join.hpp +22 -0
  337. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -2
  338. package/src/duckdb/src/include/duckdb/planner/operator/logical_distinct.hpp +3 -0
  339. package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +8 -2
  340. package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +2 -0
  341. package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +76 -44
  342. package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -2
  343. package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +1 -1
  344. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
  345. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
  346. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +2 -1
  347. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
  348. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
  349. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +2 -1
  350. package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +4 -3
  351. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +4 -3
  352. package/src/duckdb/src/include/duckdb/storage/index.hpp +5 -4
  353. package/src/duckdb/src/include/duckdb/storage/meta_block_reader.hpp +7 -0
  354. package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +93 -29
  355. package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +22 -3
  356. package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +8 -6
  357. package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +41 -0
  358. package/src/duckdb/src/include/duckdb/storage/statistics/node_statistics.hpp +26 -0
  359. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +114 -0
  360. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +62 -0
  361. package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -7
  362. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +74 -0
  363. package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +42 -0
  364. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +2 -3
  365. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
  366. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +21 -7
  367. package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +3 -2
  368. package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +5 -6
  369. package/src/duckdb/src/include/duckdb/storage/table/column_segment_tree.hpp +18 -0
  370. package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
  371. package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +6 -3
  372. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +41 -45
  373. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +23 -7
  374. package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +35 -0
  375. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +21 -29
  376. package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +6 -6
  377. package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +281 -26
  378. package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +0 -4
  379. package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -0
  380. package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +0 -1
  381. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +1 -1
  382. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +6 -3
  383. package/src/duckdb/src/include/duckdb.h +71 -2
  384. package/src/duckdb/src/include/duckdb.hpp +0 -1
  385. package/src/duckdb/src/main/capi/pending-c.cpp +16 -3
  386. package/src/duckdb/src/main/capi/result-c.cpp +27 -1
  387. package/src/duckdb/src/main/capi/stream-c.cpp +25 -0
  388. package/src/duckdb/src/main/capi/table_function-c.cpp +23 -0
  389. package/src/duckdb/src/main/client_context.cpp +38 -34
  390. package/src/duckdb/src/main/client_data.cpp +7 -6
  391. package/src/duckdb/src/main/config.cpp +70 -1
  392. package/src/duckdb/src/main/database.cpp +19 -2
  393. package/src/duckdb/src/main/extension/extension_install.cpp +7 -2
  394. package/src/duckdb/src/main/prepared_statement.cpp +4 -0
  395. package/src/duckdb/src/main/query_profiler.cpp +17 -15
  396. package/src/duckdb/src/main/relation/explain_relation.cpp +3 -3
  397. package/src/duckdb/src/main/relation.cpp +3 -2
  398. package/src/duckdb/src/main/settings/settings.cpp +20 -8
  399. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -0
  400. package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
  401. package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -6
  402. package/src/duckdb/src/optimizer/filter_pullup.cpp +3 -1
  403. package/src/duckdb/src/optimizer/filter_pushdown.cpp +14 -8
  404. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +107 -71
  405. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +32 -12
  406. package/src/duckdb/src/optimizer/optimizer.cpp +1 -0
  407. package/src/duckdb/src/optimizer/pullup/pullup_from_left.cpp +2 -2
  408. package/src/duckdb/src/optimizer/pushdown/pushdown_aggregate.cpp +33 -5
  409. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +1 -1
  410. package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +3 -0
  411. package/src/duckdb/src/optimizer/pushdown/pushdown_left_join.cpp +5 -12
  412. package/src/duckdb/src/optimizer/pushdown/pushdown_mark_join.cpp +2 -2
  413. package/src/duckdb/src/optimizer/pushdown/pushdown_single_join.cpp +1 -1
  414. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +1 -0
  415. package/src/duckdb/src/optimizer/rule/move_constants.cpp +10 -4
  416. package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +30 -0
  417. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +9 -2
  418. package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +9 -3
  419. package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +6 -7
  420. package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +14 -11
  421. package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
  422. package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +13 -15
  423. package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +0 -1
  424. package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +3 -75
  425. package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +7 -2
  426. package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -0
  427. package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +2 -3
  428. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +29 -32
  429. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +5 -5
  430. package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +3 -3
  431. package/src/duckdb/src/optimizer/statistics_propagator.cpp +2 -1
  432. package/src/duckdb/src/optimizer/unnest_rewriter.cpp +2 -2
  433. package/src/duckdb/src/parallel/meta_pipeline.cpp +0 -7
  434. package/src/duckdb/src/parser/common_table_expression_info.cpp +19 -0
  435. package/src/duckdb/src/parser/expression/between_expression.cpp +17 -0
  436. package/src/duckdb/src/parser/expression/case_expression.cpp +28 -0
  437. package/src/duckdb/src/parser/expression/cast_expression.cpp +17 -0
  438. package/src/duckdb/src/parser/expression/collate_expression.cpp +16 -0
  439. package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -0
  440. package/src/duckdb/src/parser/expression/comparison_expression.cpp +16 -0
  441. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +17 -0
  442. package/src/duckdb/src/parser/expression/constant_expression.cpp +14 -0
  443. package/src/duckdb/src/parser/expression/default_expression.cpp +7 -0
  444. package/src/duckdb/src/parser/expression/function_expression.cpp +35 -0
  445. package/src/duckdb/src/parser/expression/lambda_expression.cpp +16 -0
  446. package/src/duckdb/src/parser/expression/operator_expression.cpp +15 -0
  447. package/src/duckdb/src/parser/expression/parameter_expression.cpp +15 -0
  448. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +14 -0
  449. package/src/duckdb/src/parser/expression/star_expression.cpp +26 -6
  450. package/src/duckdb/src/parser/expression/subquery_expression.cpp +20 -0
  451. package/src/duckdb/src/parser/expression/window_expression.cpp +43 -0
  452. package/src/duckdb/src/parser/parsed_data/alter_info.cpp +7 -3
  453. package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +56 -0
  454. package/src/duckdb/src/parser/parsed_data/alter_table_function_info.cpp +51 -0
  455. package/src/duckdb/src/parser/parsed_data/create_scalar_function_info.cpp +3 -2
  456. package/src/duckdb/src/parser/parsed_data/create_table_function_info.cpp +6 -0
  457. package/src/duckdb/src/parser/parsed_data/sample_options.cpp +22 -10
  458. package/src/duckdb/src/parser/parsed_expression.cpp +72 -0
  459. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +15 -1
  460. package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +21 -0
  461. package/src/duckdb/src/parser/query_node/select_node.cpp +31 -0
  462. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +17 -0
  463. package/src/duckdb/src/parser/query_node.cpp +51 -1
  464. package/src/duckdb/src/parser/result_modifier.cpp +78 -0
  465. package/src/duckdb/src/parser/statement/multi_statement.cpp +18 -0
  466. package/src/duckdb/src/parser/statement/select_statement.cpp +12 -0
  467. package/src/duckdb/src/parser/tableref/basetableref.cpp +21 -0
  468. package/src/duckdb/src/parser/tableref/emptytableref.cpp +4 -0
  469. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +17 -0
  470. package/src/duckdb/src/parser/tableref/joinref.cpp +29 -0
  471. package/src/duckdb/src/parser/tableref/pivotref.cpp +373 -0
  472. package/src/duckdb/src/parser/tableref/subqueryref.cpp +15 -0
  473. package/src/duckdb/src/parser/tableref/table_function.cpp +17 -0
  474. package/src/duckdb/src/parser/tableref.cpp +49 -0
  475. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +11 -0
  476. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -1
  477. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +17 -2
  478. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +85 -42
  479. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
  480. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +1 -1
  481. package/src/duckdb/src/parser/transform/helpers/transform_alias.cpp +12 -6
  482. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +24 -0
  483. package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +7 -0
  484. package/src/duckdb/src/parser/transform/helpers/transform_orderby.cpp +0 -7
  485. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +3 -2
  486. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +4 -0
  487. package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +4 -0
  488. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +179 -0
  489. package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +3 -4
  490. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -0
  491. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +2 -3
  492. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +12 -1
  493. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +121 -0
  494. package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +2 -0
  495. package/src/duckdb/src/parser/transformer.cpp +15 -3
  496. package/src/duckdb/src/planner/bind_context.cpp +18 -25
  497. package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +9 -7
  498. package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +4 -3
  499. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +23 -12
  500. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +3 -2
  501. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +176 -0
  502. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -0
  503. package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +163 -24
  504. package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +2 -2
  505. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +109 -94
  506. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +11 -0
  507. package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +9 -4
  508. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +5 -3
  509. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +3 -2
  510. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +10 -1
  511. package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
  512. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +12 -8
  513. package/src/duckdb/src/planner/binder/statement/bind_logical_plan.cpp +17 -0
  514. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +4 -2
  515. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +19 -3
  516. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +366 -0
  517. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +11 -1
  518. package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -0
  519. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +61 -13
  520. package/src/duckdb/src/planner/binder.cpp +19 -24
  521. package/src/duckdb/src/planner/bound_result_modifier.cpp +27 -1
  522. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +9 -2
  523. package/src/duckdb/src/planner/expression/bound_expression.cpp +4 -0
  524. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +1 -1
  525. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +146 -0
  526. package/src/duckdb/src/planner/expression_binder/having_binder.cpp +6 -3
  527. package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -3
  528. package/src/duckdb/src/planner/expression_binder/select_binder.cpp +1 -132
  529. package/src/duckdb/src/planner/expression_binder.cpp +10 -3
  530. package/src/duckdb/src/planner/expression_iterator.cpp +17 -10
  531. package/src/duckdb/src/planner/filter/constant_filter.cpp +4 -6
  532. package/src/duckdb/src/planner/logical_operator.cpp +7 -2
  533. package/src/duckdb/src/planner/logical_operator_visitor.cpp +6 -0
  534. package/src/duckdb/src/planner/operator/logical_asof_join.cpp +8 -0
  535. package/src/duckdb/src/planner/operator/logical_distinct.cpp +3 -0
  536. package/src/duckdb/src/planner/planner.cpp +2 -1
  537. package/src/duckdb/src/planner/pragma_handler.cpp +10 -2
  538. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +3 -1
  539. package/src/duckdb/src/storage/buffer_manager.cpp +44 -46
  540. package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +1 -1
  541. package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +4 -15
  542. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +10 -4
  543. package/src/duckdb/src/storage/checkpoint_manager.cpp +9 -3
  544. package/src/duckdb/src/storage/compression/bitpacking.cpp +29 -25
  545. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +45 -46
  546. package/src/duckdb/src/storage/compression/numeric_constant.cpp +10 -11
  547. package/src/duckdb/src/storage/compression/patas.cpp +1 -1
  548. package/src/duckdb/src/storage/compression/rle.cpp +20 -15
  549. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +6 -6
  550. package/src/duckdb/src/storage/data_table.cpp +23 -23
  551. package/src/duckdb/src/storage/index.cpp +12 -1
  552. package/src/duckdb/src/storage/local_storage.cpp +27 -23
  553. package/src/duckdb/src/storage/meta_block_reader.cpp +22 -0
  554. package/src/duckdb/src/storage/statistics/base_statistics.cpp +373 -128
  555. package/src/duckdb/src/storage/statistics/column_statistics.cpp +57 -3
  556. package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +8 -9
  557. package/src/duckdb/src/storage/statistics/list_stats.cpp +121 -0
  558. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +591 -0
  559. package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +65 -0
  560. package/src/duckdb/src/storage/statistics/segment_statistics.cpp +2 -11
  561. package/src/duckdb/src/storage/statistics/string_stats.cpp +273 -0
  562. package/src/duckdb/src/storage/statistics/struct_stats.cpp +133 -0
  563. package/src/duckdb/src/storage/storage_info.cpp +2 -2
  564. package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +4 -10
  565. package/src/duckdb/src/storage/table/column_data.cpp +118 -62
  566. package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +10 -9
  567. package/src/duckdb/src/storage/table/column_segment.cpp +30 -45
  568. package/src/duckdb/src/storage/table/list_column_data.cpp +50 -71
  569. package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
  570. package/src/duckdb/src/storage/table/row_group.cpp +213 -143
  571. package/src/duckdb/src/storage/table/row_group_collection.cpp +151 -105
  572. package/src/duckdb/src/storage/table/scan_state.cpp +45 -33
  573. package/src/duckdb/src/storage/table/standard_column_data.cpp +11 -12
  574. package/src/duckdb/src/storage/table/struct_column_data.cpp +27 -34
  575. package/src/duckdb/src/storage/table/table_statistics.cpp +27 -7
  576. package/src/duckdb/src/storage/table/update_segment.cpp +23 -18
  577. package/src/duckdb/src/storage/wal_replay.cpp +8 -5
  578. package/src/duckdb/src/storage/write_ahead_log.cpp +2 -2
  579. package/src/duckdb/src/transaction/commit_state.cpp +11 -7
  580. package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
  581. package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +35 -0
  582. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +36 -2
  583. package/src/duckdb/third_party/libpg_query/include/nodes/primnodes.hpp +3 -3
  584. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +1022 -530
  585. package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +8 -0
  586. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24462 -22828
  587. package/src/duckdb/third_party/re2/re2/re2.cc +9 -0
  588. package/src/duckdb/third_party/re2/re2/re2.h +2 -0
  589. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +4 -4
  590. package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
  591. package/src/duckdb/ub_src_common_serializer.cpp +2 -0
  592. package/src/duckdb/ub_src_common_types.cpp +2 -0
  593. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  594. package/src/duckdb/ub_src_function_aggregate_distributive.cpp +2 -0
  595. package/src/duckdb/ub_src_function_scalar_bit.cpp +2 -0
  596. package/src/duckdb/ub_src_function_scalar_map.cpp +4 -0
  597. package/src/duckdb/ub_src_function_scalar_string.cpp +2 -0
  598. package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
  599. package/src/duckdb/ub_src_main_capi.cpp +2 -0
  600. package/src/duckdb/ub_src_optimizer_rule.cpp +2 -0
  601. package/src/duckdb/ub_src_parser.cpp +2 -0
  602. package/src/duckdb/ub_src_parser_parsed_data.cpp +4 -2
  603. package/src/duckdb/ub_src_parser_statement.cpp +2 -0
  604. package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
  605. package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
  606. package/src/duckdb/ub_src_parser_transform_tableref.cpp +2 -0
  607. package/src/duckdb/ub_src_planner_binder_expression.cpp +2 -0
  608. package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
  609. package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
  610. package/src/duckdb/ub_src_planner_operator.cpp +2 -0
  611. package/src/duckdb/ub_src_storage_statistics.cpp +6 -6
  612. package/src/duckdb/ub_src_storage_table.cpp +0 -2
  613. package/src/duckdb_node.hpp +2 -1
  614. package/src/statement.cpp +5 -5
  615. package/src/utils.cpp +27 -2
  616. package/test/extension.test.ts +44 -26
  617. package/test/syntax_error.test.ts +3 -1
  618. package/filelist.cache +0 -0
  619. package/src/duckdb/src/include/duckdb/main/loadable_extension.hpp +0 -59
  620. package/src/duckdb/src/include/duckdb/storage/statistics/list_statistics.hpp +0 -36
  621. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_statistics.hpp +0 -75
  622. package/src/duckdb/src/include/duckdb/storage/statistics/string_statistics.hpp +0 -49
  623. package/src/duckdb/src/include/duckdb/storage/statistics/struct_statistics.hpp +0 -36
  624. package/src/duckdb/src/include/duckdb/storage/statistics/validity_statistics.hpp +0 -45
  625. package/src/duckdb/src/parser/parsed_data/alter_function_info.cpp +0 -55
  626. package/src/duckdb/src/storage/statistics/list_statistics.cpp +0 -94
  627. package/src/duckdb/src/storage/statistics/numeric_statistics.cpp +0 -307
  628. package/src/duckdb/src/storage/statistics/string_statistics.cpp +0 -220
  629. package/src/duckdb/src/storage/statistics/struct_statistics.cpp +0 -108
  630. package/src/duckdb/src/storage/statistics/validity_statistics.cpp +0 -91
  631. package/src/duckdb/src/storage/table/segment_tree.cpp +0 -179
@@ -0,0 +1,126 @@
1
+ #pragma once
2
+ #include <type_traits>
3
+ #include "duckdb/common/vector.hpp"
4
+ #include "duckdb/common/unordered_map.hpp"
5
+ #include "duckdb/common/unordered_set.hpp"
6
+
7
+ namespace duckdb {
8
+
9
+ class FormatSerializer; // Forward declare
10
+ class FormatDeserializer; // Forward declare
11
+
12
+ // Backport to c++11
13
+ template <class...>
14
+ using void_t = void;
15
+
16
+ // Check for anything implementing a `void FormatSerialize(FormatSerializer &FormatSerializer)` method
17
+ template <typename T, typename = void_t<>>
18
+ struct has_serialize : std::false_type {};
19
+
20
+ template <typename T>
21
+ struct has_serialize<T, void_t<decltype(std::declval<T>().FormatSerialize(std::declval<FormatSerializer &>()))>>
22
+ : std::true_type {};
23
+
24
+ template <typename T>
25
+ constexpr bool has_serialize_v() {
26
+ return has_serialize<T>::value;
27
+ }
28
+
29
+ // Check for anything implementing a static `T FormatDeserialize(FormatDeserializer&)` method
30
+ /*
31
+ template <typename T, typename = void_t<>>
32
+ struct has_deserialize : std::false_type {};
33
+
34
+ template <typename T>
35
+ struct has_deserialize<T, void_t<decltype(T::FormatDeserialize)>> : std::true_type {};
36
+
37
+ template <typename T>
38
+ constexpr bool has_deserialize_v() {
39
+ return has_deserialize<T>::value;
40
+ }*/
41
+
42
+ template <typename T, typename = T>
43
+ struct has_deserialize : std::false_type {};
44
+
45
+ // Accept `static unique_ptr<T> FormatDeserialize(FormatDeserializer& deserializer)`
46
+ template <typename T>
47
+ struct has_deserialize<
48
+ T, typename std::enable_if<std::is_same<decltype(T::FormatDeserialize), unique_ptr<T>(FormatDeserializer &)>::value,
49
+ T>::type> : std::true_type {};
50
+
51
+ // Accept `static shared_ptr<T> FormatDeserialize(FormatDeserializer& deserializer)`
52
+ template <typename T>
53
+ struct has_deserialize<
54
+ T, typename std::enable_if<std::is_same<decltype(T::FormatDeserialize), shared_ptr<T>(FormatDeserializer &)>::value,
55
+ T>::type> : std::true_type {};
56
+
57
+ // Accept `static T FormatDeserialize(FormatDeserializer& deserializer)`
58
+ template <typename T>
59
+ struct has_deserialize<
60
+ T, typename std::enable_if<std::is_same<decltype(T::FormatDeserialize), T(FormatDeserializer &)>::value, T>::type>
61
+ : std::true_type {};
62
+
63
+ // Check if T is a vector, and provide access to the inner type
64
+ template <typename T>
65
+ struct is_vector : std::false_type {};
66
+ template <typename T>
67
+ struct is_vector<typename std::vector<T>> : std::true_type {
68
+ typedef T ELEMENT_TYPE;
69
+ };
70
+
71
+ // Check if T is a unordered map, and provide access to the inner type
72
+ template <typename T>
73
+ struct is_unordered_map : std::false_type {};
74
+ template <typename... Args>
75
+ struct is_unordered_map<typename std::unordered_map<Args...>> : std::true_type {
76
+ typedef typename std::tuple_element<0, std::tuple<Args...>>::type KEY_TYPE;
77
+ typedef typename std::tuple_element<1, std::tuple<Args...>>::type VALUE_TYPE;
78
+ typedef typename std::tuple_element<2, std::tuple<Args...>>::type HASH_TYPE;
79
+ typedef typename std::tuple_element<3, std::tuple<Args...>>::type EQUAL_TYPE;
80
+ };
81
+
82
+ template <typename T>
83
+ struct is_unique_ptr : std::false_type {};
84
+
85
+ template <typename T, typename D>
86
+ struct is_unique_ptr<unique_ptr<T, D>> : std::true_type {
87
+ typedef T ELEMENT_TYPE;
88
+ typedef D DELETER_TYPE;
89
+ };
90
+
91
+ template <typename T>
92
+ struct is_shared_ptr : std::false_type {};
93
+
94
+ template <typename T>
95
+ struct is_shared_ptr<shared_ptr<T>> : std::true_type {
96
+ typedef T ELEMENT_TYPE;
97
+ };
98
+
99
+ template <typename T>
100
+ struct is_pair : std::false_type {};
101
+
102
+ template <typename T, typename U>
103
+ struct is_pair<std::pair<T, U>> : std::true_type {
104
+ typedef T FIRST_TYPE;
105
+ typedef U SECOND_TYPE;
106
+ };
107
+
108
+ template <typename T>
109
+ struct is_unordered_set : std::false_type {};
110
+ template <typename... Args>
111
+ struct is_unordered_set<std::unordered_set<Args...>> : std::true_type {
112
+ typedef typename std::tuple_element<0, std::tuple<Args...>>::type ELEMENT_TYPE;
113
+ typedef typename std::tuple_element<1, std::tuple<Args...>>::type HASH_TYPE;
114
+ typedef typename std::tuple_element<2, std::tuple<Args...>>::type EQUAL_TYPE;
115
+ };
116
+
117
+ template <typename T>
118
+ struct is_set : std::false_type {};
119
+ template <typename... Args>
120
+ struct is_set<std::set<Args...>> : std::true_type {
121
+ typedef typename std::tuple_element<0, std::tuple<Args...>>::type ELEMENT_TYPE;
122
+ typedef typename std::tuple_element<1, std::tuple<Args...>>::type HASH_TYPE;
123
+ typedef typename std::tuple_element<2, std::tuple<Args...>>::type EQUAL_TYPE;
124
+ };
125
+
126
+ } // namespace duckdb
@@ -8,6 +8,7 @@
8
8
 
9
9
  #pragma once
10
10
 
11
+ #include "duckdb/catalog/catalog.hpp"
11
12
  #include "duckdb/common/common.hpp"
12
13
  #include "duckdb/common/exception.hpp"
13
14
  #include "duckdb/common/vector.hpp"
@@ -21,6 +22,8 @@ private:
21
22
  uint64_t version = 0L;
22
23
 
23
24
  public:
25
+ bool is_query_plan = false;
26
+
24
27
  virtual ~Serializer() {
25
28
  }
26
29
 
@@ -111,6 +114,16 @@ public:
111
114
  //! Reads [read_size] bytes into the buffer
112
115
  virtual void ReadData(data_ptr_t buffer, idx_t read_size) = 0;
113
116
 
117
+ //! Gets the context for the deserializer
118
+ virtual ClientContext &GetContext() {
119
+ throw InternalException("This deserializer does not have a client-context");
120
+ };
121
+
122
+ //! Gets the catalog for the deserializer
123
+ virtual Catalog *GetCatalog() {
124
+ return nullptr;
125
+ };
126
+
114
127
  template <class T>
115
128
  T Read() {
116
129
  T value;
@@ -21,6 +21,21 @@ namespace duckdb {
21
21
  */
22
22
  class StringUtil {
23
23
  public:
24
+ static string GenerateRandomName(idx_t length = 16);
25
+
26
+ static uint8_t GetHexValue(char c) {
27
+ if (c >= '0' && c <= '9') {
28
+ return c - '0';
29
+ }
30
+ if (c >= 'a' && c <= 'f') {
31
+ return c - 'a' + 10;
32
+ }
33
+ if (c >= 'A' && c <= 'F') {
34
+ return c - 'A' + 10;
35
+ }
36
+ throw InvalidInputException("Invalid input for hex digit: %s", string(c, 1));
37
+ }
38
+
24
39
  DUCKDB_API static bool CharacterIsSpace(char c) {
25
40
  return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r';
26
41
  }
@@ -170,6 +185,18 @@ public:
170
185
  //! Equivalent to calling TopNLevenshtein followed by CandidatesMessage
171
186
  DUCKDB_API static string CandidatesErrorMessage(const vector<string> &strings, const string &target,
172
187
  const string &message_prefix, idx_t n = 5);
188
+
189
+ //! Returns true if two null-terminated strings are equal or point to the same address.
190
+ //! Returns false if only one of the strings is nullptr
191
+ DUCKDB_API static bool Equals(const char *s1, const char *s2) {
192
+ if (s1 == s2) {
193
+ return true;
194
+ }
195
+ if (s1 == nullptr || s2 == nullptr) {
196
+ return false;
197
+ }
198
+ return strcmp(s1, s2) == 0;
199
+ }
173
200
  };
174
201
 
175
202
  } // namespace duckdb
@@ -25,7 +25,7 @@ public:
25
25
  //! Extracts the nth bit from bit string; the first (leftmost) bit is indexed 0
26
26
  DUCKDB_API static idx_t GetBit(string_t bit_string, idx_t n);
27
27
  //! Sets the nth bit in bit string to newvalue; the first (leftmost) bit is indexed 0
28
- DUCKDB_API static void SetBit(const string_t &bit_string, idx_t n, idx_t new_value, string_t &result);
28
+ DUCKDB_API static void SetBit(string_t &bit_string, idx_t n, idx_t new_value);
29
29
  //! Returns first starting index of the specified substring within bits, or zero if it's not present.
30
30
  DUCKDB_API static idx_t BitPosition(string_t substring, string_t bits);
31
31
  //! Converts bits to a string, writing the output to the designated output string.
@@ -36,9 +36,13 @@ public:
36
36
  DUCKDB_API static bool TryGetBitStringSize(string_t str, idx_t &result_size, string *error_message);
37
37
  //! Convert a string to a bit. This function should ONLY be called after calling GetBitSize, since it does NOT
38
38
  //! perform data validation.
39
- DUCKDB_API static void ToBit(string_t str, data_ptr_t output);
39
+ DUCKDB_API static void ToBit(string_t str, string_t &output);
40
40
  DUCKDB_API static string ToBit(string_t str);
41
+ //! Creates a new bitstring of determined length
42
+ DUCKDB_API static void BitString(const string_t &input, const idx_t &len, string_t &result);
41
43
  DUCKDB_API static void SetEmptyBitString(string_t &target, string_t &input);
44
+ DUCKDB_API static void SetEmptyBitString(string_t &target, idx_t len);
45
+ DUCKDB_API static idx_t ComputeBitstringLen(idx_t len);
42
46
 
43
47
  DUCKDB_API static void RightShift(const string_t &bit_string, const idx_t &shif, string_t &result);
44
48
  DUCKDB_API static void LeftShift(const string_t &bit_string, const idx_t &shift, string_t &result);
@@ -47,11 +51,12 @@ public:
47
51
  DUCKDB_API static void BitwiseXor(const string_t &rhs, const string_t &lhs, string_t &result);
48
52
  DUCKDB_API static void BitwiseNot(const string_t &rhs, string_t &result);
49
53
 
54
+ DUCKDB_API static void Verify(const string_t &input);
55
+
50
56
  private:
51
- //! Returns the amount of padded zeroes to fill up to a full byte. This information is stored in the first byte of
52
- //! the bitstring.
53
- DUCKDB_API static idx_t GetPadding(const string_t &bit_string);
54
- DUCKDB_API static idx_t GetBitSize(string_t str);
55
- DUCKDB_API static void SetBit(string_t &bit_string, idx_t n, idx_t new_value);
57
+ static void Finalize(string_t &str);
58
+ static idx_t GetBitInternal(string_t bit_string, idx_t n);
59
+ static void SetBitInternal(string_t &bit_string, idx_t n, idx_t new_value);
60
+ static idx_t GetBitIndex(idx_t n);
56
61
  };
57
62
  } // namespace duckdb
@@ -101,8 +101,44 @@ public:
101
101
  static dtime_t Add(dtime_t left, interval_t right, date_t &date);
102
102
 
103
103
  //! Comparison operators
104
- static bool Equals(interval_t left, interval_t right);
105
- static bool GreaterThan(interval_t left, interval_t right);
106
- static bool GreaterThanEquals(interval_t left, interval_t right);
104
+ inline static bool Equals(const interval_t &left, const interval_t &right);
105
+ inline static bool GreaterThan(const interval_t &left, const interval_t &right);
107
106
  };
107
+ static void NormalizeIntervalEntries(interval_t input, int64_t &months, int64_t &days, int64_t &micros) {
108
+ int64_t extra_months_d = input.days / Interval::DAYS_PER_MONTH;
109
+ int64_t extra_months_micros = input.micros / Interval::MICROS_PER_MONTH;
110
+ input.days -= extra_months_d * Interval::DAYS_PER_MONTH;
111
+ input.micros -= extra_months_micros * Interval::MICROS_PER_MONTH;
112
+
113
+ int64_t extra_days_micros = input.micros / Interval::MICROS_PER_DAY;
114
+ input.micros -= extra_days_micros * Interval::MICROS_PER_DAY;
115
+
116
+ months = input.months + extra_months_d + extra_months_micros;
117
+ days = input.days + extra_days_micros;
118
+ micros = input.micros;
119
+ }
120
+
121
+ bool Interval::Equals(const interval_t &left, const interval_t &right) {
122
+ return left.months == right.months && left.days == right.days && left.micros == right.micros;
123
+ }
124
+
125
+ bool Interval::GreaterThan(const interval_t &left, const interval_t &right) {
126
+ int64_t lmonths, ldays, lmicros;
127
+ int64_t rmonths, rdays, rmicros;
128
+ NormalizeIntervalEntries(left, lmonths, ldays, lmicros);
129
+ NormalizeIntervalEntries(right, rmonths, rdays, rmicros);
130
+
131
+ if (lmonths > rmonths) {
132
+ return true;
133
+ } else if (lmonths < rmonths) {
134
+ return false;
135
+ }
136
+ if (ldays > rdays) {
137
+ return true;
138
+ } else if (ldays < rdays) {
139
+ return false;
140
+ }
141
+ return lmicros > rmicros;
142
+ }
143
+
108
144
  } // namespace duckdb
@@ -0,0 +1,70 @@
1
+ //===----------------------------------------------------------------------===//
2
+ // DuckDB
3
+ //
4
+ // duckdb/common/types/list_segment.hpp
5
+ //
6
+ //
7
+ //===----------------------------------------------------------------------===//
8
+
9
+ #include "duckdb/common/allocator.hpp"
10
+ #include "duckdb/common/constants.hpp"
11
+ #include "duckdb/common/types/vector.hpp"
12
+
13
+ #pragma once
14
+
15
+ namespace duckdb {
16
+
17
+ struct ListSegment {
18
+ uint16_t count;
19
+ uint16_t capacity;
20
+ ListSegment *next;
21
+ };
22
+ struct LinkedList {
23
+ LinkedList() {};
24
+ LinkedList(idx_t total_capacity_p, ListSegment *first_segment_p, ListSegment *last_segment_p)
25
+ : total_capacity(total_capacity_p), first_segment(first_segment_p), last_segment(last_segment_p) {
26
+ }
27
+
28
+ idx_t total_capacity = 0;
29
+ ListSegment *first_segment = nullptr;
30
+ ListSegment *last_segment = nullptr;
31
+ };
32
+
33
+ // forward declarations
34
+ struct WriteDataToSegment;
35
+ struct ReadDataFromSegment;
36
+ struct CopyDataFromSegment;
37
+ typedef ListSegment *(*create_segment_t)(WriteDataToSegment &write_data_to_segment, Allocator &allocator,
38
+ vector<AllocatedData> &owning_vector, const uint16_t &capacity);
39
+ typedef void (*write_data_to_segment_t)(WriteDataToSegment &write_data_to_segment, Allocator &allocator,
40
+ vector<AllocatedData> &owning_vector, ListSegment *segment, Vector &input,
41
+ idx_t &entry_idx, idx_t &count);
42
+ typedef void (*read_data_from_segment_t)(ReadDataFromSegment &read_data_from_segment, const ListSegment *segment,
43
+ Vector &result, idx_t &total_count);
44
+ typedef ListSegment *(*copy_data_from_segment_t)(CopyDataFromSegment &copy_data_from_segment, const ListSegment *source,
45
+ Allocator &allocator, vector<AllocatedData> &owning_vector);
46
+
47
+ struct WriteDataToSegment {
48
+ create_segment_t create_segment;
49
+ write_data_to_segment_t segment_function;
50
+ vector<WriteDataToSegment> child_functions;
51
+ void AppendRow(Allocator &allocator, vector<AllocatedData> &owning_vector, LinkedList *linked_list, Vector &input,
52
+ idx_t &entry_idx, idx_t &count);
53
+ };
54
+
55
+ struct ReadDataFromSegment {
56
+ read_data_from_segment_t segment_function;
57
+ vector<ReadDataFromSegment> child_functions;
58
+ void BuildListVector(LinkedList *linked_list, Vector &result, idx_t &initial_total_count);
59
+ };
60
+
61
+ struct CopyDataFromSegment {
62
+ copy_data_from_segment_t segment_function;
63
+ vector<CopyDataFromSegment> child_functions;
64
+ void CopyLinkedList(const LinkedList *source_list, LinkedList &target_list, Allocator &allocator,
65
+ vector<AllocatedData> &owning_vector);
66
+ };
67
+
68
+ void GetSegmentDataFunctions(WriteDataToSegment &write_data_to_segment, ReadDataFromSegment &read_data_from_segment,
69
+ CopyDataFromSegment &copy_data_from_segment, const LogicalType &type);
70
+ } // namespace duckdb
@@ -10,6 +10,7 @@
10
10
 
11
11
  #include "duckdb/common/assert.hpp"
12
12
  #include "duckdb/common/constants.hpp"
13
+ #include "duckdb/common/helper.hpp"
13
14
 
14
15
  #include <cstring>
15
16
 
@@ -117,10 +118,79 @@ public:
117
118
 
118
119
  void Verify() const;
119
120
  void VerifyNull() const;
121
+
122
+ struct StringComparisonOperators {
123
+ static inline bool Equals(const string_t &a, const string_t &b) {
124
+ #ifdef DUCKDB_DEBUG_NO_INLINE
125
+ if (a.GetSize() != b.GetSize())
126
+ return false;
127
+ return (memcmp(a.GetDataUnsafe(), b.GetDataUnsafe(), a.GetSize()) == 0);
128
+ #endif
129
+ uint64_t A = Load<uint64_t>((const_data_ptr_t)&a);
130
+ uint64_t B = Load<uint64_t>((const_data_ptr_t)&b);
131
+ if (A != B) {
132
+ // Either length or prefix are different -> not equal
133
+ return false;
134
+ }
135
+ // they have the same length and same prefix!
136
+ A = Load<uint64_t>((const_data_ptr_t)&a + 8u);
137
+ B = Load<uint64_t>((const_data_ptr_t)&b + 8u);
138
+ if (A == B) {
139
+ // either they are both inlined (so compare equal) or point to the same string (so compare equal)
140
+ return true;
141
+ }
142
+ if (!a.IsInlined()) {
143
+ // 'long' strings of the same length -> compare pointed value
144
+ if (memcmp(a.value.pointer.ptr, b.value.pointer.ptr, a.GetSize()) == 0) {
145
+ return true;
146
+ }
147
+ }
148
+ // either they are short string of same length but different content
149
+ // or they point to string with different content
150
+ // either way, they can't represent the same underlying string
151
+ return false;
152
+ }
153
+ // compare up to shared length. if still the same, compare lengths
154
+ static bool GreaterThan(const string_t &left, const string_t &right) {
155
+ const uint32_t left_length = left.GetSize();
156
+ const uint32_t right_length = right.GetSize();
157
+ const uint32_t min_length = std::min<uint32_t>(left_length, right_length);
158
+
159
+ #ifndef DUCKDB_DEBUG_NO_INLINE
160
+ uint32_t A = Load<uint32_t>((const_data_ptr_t)left.GetPrefix());
161
+ uint32_t B = Load<uint32_t>((const_data_ptr_t)right.GetPrefix());
162
+
163
+ // Utility to move 0xa1b2c3d4 into 0xd4c3b2a1, basically inverting the order byte-a-byte
164
+ auto bswap = [](uint32_t v) -> uint32_t {
165
+ uint32_t t1 = (v >> 16u) | (v << 16u);
166
+ uint32_t t2 = t1 & 0x00ff00ff;
167
+ uint32_t t3 = t1 & 0xff00ff00;
168
+ return (t2 << 8u) | (t3 >> 8u);
169
+ };
170
+
171
+ // Check on prefix -----
172
+ // We dont' need to mask since:
173
+ // if the prefix is greater(after bswap), it will stay greater regardless of the extra bytes
174
+ // if the prefix is smaller(after bswap), it will stay smaller regardless of the extra bytes
175
+ // if the prefix is equal, the extra bytes are guaranteed to be /0 for the shorter one
176
+
177
+ if (A != B)
178
+ return bswap(A) > bswap(B);
179
+ #endif
180
+ auto memcmp_res = memcmp(left.GetDataUnsafe(), right.GetDataUnsafe(), min_length);
181
+ return memcmp_res > 0 || (memcmp_res == 0 && left_length > right_length);
182
+ }
183
+ };
184
+
185
+ bool operator==(const string_t &r) const {
186
+ return StringComparisonOperators::Equals(*this, r);
187
+ }
188
+
189
+ bool operator>(const string_t &r) const {
190
+ return StringComparisonOperators::GreaterThan(*this, r);
191
+ }
120
192
  bool operator<(const string_t &r) const {
121
- auto this_str = this->GetString();
122
- auto r_str = r.GetString();
123
- return this_str < r_str;
193
+ return r > *this;
124
194
  }
125
195
 
126
196
  private:
@@ -39,6 +39,9 @@ public:
39
39
  DUCKDB_API static string ConversionError(const string &str);
40
40
  DUCKDB_API static string ConversionError(string_t str);
41
41
 
42
+ DUCKDB_API static dtime_t FromTimeMs(int64_t time_ms);
43
+ DUCKDB_API static dtime_t FromTimeNs(int64_t time_ns);
44
+
42
45
  private:
43
46
  static bool TryConvertInternal(const char *buf, idx_t len, idx_t &pos, dtime_t &result, bool strict);
44
47
  };
@@ -323,9 +323,12 @@ public:
323
323
  public:
324
324
  DUCKDB_API void Resize(idx_t old_size, idx_t new_size);
325
325
 
326
- DUCKDB_API void Slice(const ValidityMask &other, idx_t offset, idx_t end);
326
+ DUCKDB_API void SliceInPlace(const ValidityMask &other, idx_t target_offset, idx_t source_offset, idx_t count);
327
+ DUCKDB_API void Slice(const ValidityMask &other, idx_t source_offset, idx_t count);
327
328
  DUCKDB_API void Combine(const ValidityMask &other, idx_t count);
328
329
  DUCKDB_API string ToString(idx_t count) const;
330
+
331
+ DUCKDB_API static bool IsAligned(idx_t count);
329
332
  };
330
333
 
331
334
  } // namespace duckdb
@@ -23,6 +23,7 @@ class CastFunctionSet;
23
23
  class Deserializer;
24
24
  class Serializer;
25
25
  struct GetCastFunctionInput;
26
+ struct ExtraValueInfo;
26
27
 
27
28
  //! The Value object holds a single arbitrary value of any type that can be
28
29
  //! stored in the database.
@@ -66,7 +67,7 @@ public:
66
67
  inline LogicalType &GetTypeMutable() {
67
68
  return type_;
68
69
  }
69
- inline const LogicalType &type() const {
70
+ inline const LogicalType &type() const { // NOLINT
70
71
  return type_;
71
72
  }
72
73
  inline bool IsNull() const {
@@ -77,6 +78,10 @@ public:
77
78
  DUCKDB_API static Value MinimumValue(const LogicalType &type);
78
79
  //! Create the highest possible value of a given type (numeric only)
79
80
  DUCKDB_API static Value MaximumValue(const LogicalType &type);
81
+ //! Create the negative infinite value of a given type (numeric only)
82
+ DUCKDB_API static Value NegativeInfinity(const LogicalType &type);
83
+ //! Create the positive infinite value of a given type (numeric only)
84
+ DUCKDB_API static Value Infinity(const LogicalType &type);
80
85
  //! Create a Numeric value of the specified type with the specified value
81
86
  DUCKDB_API static Value Numeric(const LogicalType &type, int64_t value);
82
87
  DUCKDB_API static Value Numeric(const LogicalType &type, hugeint_t value);
@@ -150,17 +155,17 @@ public:
150
155
  //! Cannot be called with an empty list, use either EMPTYLIST or LIST with a type instead
151
156
  DUCKDB_API static Value LIST(vector<Value> values);
152
157
  //! Create a list value with the given entries
153
- DUCKDB_API static Value LIST(LogicalType child_type, vector<Value> values);
158
+ DUCKDB_API static Value LIST(const LogicalType &child_type, vector<Value> values);
154
159
  //! Create an empty list with the specified child-type
155
- DUCKDB_API static Value EMPTYLIST(LogicalType child_type);
160
+ DUCKDB_API static Value EMPTYLIST(const LogicalType &child_type);
156
161
  //! Create a map value with the given entries
157
- DUCKDB_API static Value MAP(LogicalType child_type, vector<Value> values);
162
+ DUCKDB_API static Value MAP(const LogicalType &child_type, vector<Value> values);
158
163
  //! Create a union value from a selected value and a tag from a set of alternatives.
159
164
  DUCKDB_API static Value UNION(child_list_t<LogicalType> members, uint8_t tag, Value value);
160
165
 
161
166
  //! Create a blob Value from a data pointer and a length: no bytes are interpreted
162
167
  DUCKDB_API static Value BLOB(const_data_ptr_t data, idx_t len);
163
- DUCKDB_API static Value BLOB_RAW(const string &data) {
168
+ DUCKDB_API static Value BLOB_RAW(const string &data) { // NOLINT
164
169
  return Value::BLOB((const_data_ptr_t)data.c_str(), data.size());
165
170
  }
166
171
  //! Creates a blob by casting a specified string to a blob (i.e. interpreting \x characters)
@@ -225,6 +230,8 @@ public:
225
230
 
226
231
  //! Serializes a Value to a stand-alone binary blob
227
232
  DUCKDB_API void Serialize(Serializer &serializer) const;
233
+ DUCKDB_API void FormatSerialize(FormatSerializer &serializer) const;
234
+ DUCKDB_API static Value FormatDeserialize(FormatDeserializer &deserializer);
228
235
  //! Deserializes a Value from a blob
229
236
  DUCKDB_API static Value Deserialize(Deserializer &source);
230
237
 
@@ -277,11 +284,8 @@ public:
277
284
 
278
285
  private:
279
286
  //! The logical of the value
280
- LogicalType type_;
287
+ LogicalType type_; // NOLINT
281
288
 
282
- #if DUCKDB_API_VERSION < DUCKDB_API_0_3_2
283
- public:
284
- #endif
285
289
  //! Whether or not the value is NULL
286
290
  bool is_null;
287
291
 
@@ -297,21 +301,17 @@ public:
297
301
  uint32_t uinteger;
298
302
  uint64_t ubigint;
299
303
  hugeint_t hugeint;
300
- float float_;
301
- double double_;
304
+ float float_; // NOLINT
305
+ double double_; // NOLINT
302
306
  uintptr_t pointer;
303
307
  uint64_t hash;
304
308
  date_t date;
305
309
  dtime_t time;
306
310
  timestamp_t timestamp;
307
311
  interval_t interval;
308
- } value_;
309
-
310
- //! The value of the object, if it is of a variable size type
311
- string str_value;
312
+ } value_; // NOLINT
312
313
 
313
- vector<Value> struct_value;
314
- vector<Value> list_value;
314
+ shared_ptr<ExtraValueInfo> value_info_; // NOLINT
315
315
 
316
316
  private:
317
317
  template <class T>
@@ -535,37 +535,6 @@ DUCKDB_API timestamp_t Value::GetValueUnsafe() const;
535
535
  template <>
536
536
  DUCKDB_API interval_t Value::GetValueUnsafe() const;
537
537
 
538
- template <>
539
- DUCKDB_API int8_t &Value::GetReferenceUnsafe();
540
- template <>
541
- DUCKDB_API int16_t &Value::GetReferenceUnsafe();
542
- template <>
543
- DUCKDB_API int32_t &Value::GetReferenceUnsafe();
544
- template <>
545
- DUCKDB_API int64_t &Value::GetReferenceUnsafe();
546
- template <>
547
- DUCKDB_API hugeint_t &Value::GetReferenceUnsafe();
548
- template <>
549
- DUCKDB_API uint8_t &Value::GetReferenceUnsafe();
550
- template <>
551
- DUCKDB_API uint16_t &Value::GetReferenceUnsafe();
552
- template <>
553
- DUCKDB_API uint32_t &Value::GetReferenceUnsafe();
554
- template <>
555
- DUCKDB_API uint64_t &Value::GetReferenceUnsafe();
556
- template <>
557
- DUCKDB_API float &Value::GetReferenceUnsafe();
558
- template <>
559
- DUCKDB_API double &Value::GetReferenceUnsafe();
560
- template <>
561
- DUCKDB_API date_t &Value::GetReferenceUnsafe();
562
- template <>
563
- DUCKDB_API dtime_t &Value::GetReferenceUnsafe();
564
- template <>
565
- DUCKDB_API timestamp_t &Value::GetReferenceUnsafe();
566
- template <>
567
- DUCKDB_API interval_t &Value::GetReferenceUnsafe();
568
-
569
538
  template <>
570
539
  DUCKDB_API bool Value::IsNan(float input);
571
540
  template <>
@@ -1,7 +1,7 @@
1
1
  //===----------------------------------------------------------------------===//
2
2
  // DuckDB
3
3
  //
4
- // duckdb/parser/value_map.hpp
4
+ // duckdb/common/types/value_map.hpp
5
5
  //
6
6
  //
7
7
  //===----------------------------------------------------------------------===//
@@ -162,6 +162,9 @@ public:
162
162
  //! Deserializes a blob back into a Vector
163
163
  DUCKDB_API void Deserialize(idx_t count, Deserializer &source);
164
164
 
165
+ DUCKDB_API void FormatSerialize(FormatSerializer &serializer, idx_t count);
166
+ DUCKDB_API void FormatDeserialize(FormatDeserializer &deserializer, idx_t count);
167
+
165
168
  // Getters
166
169
  inline VectorType GetVectorType() const {
167
170
  return vector_type;
@@ -312,7 +315,6 @@ struct FlatVector {
312
315
  return !vector.validity.RowIsValid(idx);
313
316
  }
314
317
  DUCKDB_API static const SelectionVector *IncrementalSelectionVector();
315
- static Value GetValuesFromOffsets(Vector &values, vector<idx_t> &offsets);
316
318
  };
317
319
 
318
320
  struct ListVector {