duckdb 0.7.2-dev0.0 → 0.7.2-dev1138.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 (625) 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 +12 -2
  28. package/src/duckdb/extension/parquet/parquet_reader.cpp +1 -1
  29. package/src/duckdb/extension/parquet/parquet_statistics.cpp +26 -32
  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/operator/cast_operators.cpp +1 -1
  53. package/src/duckdb/src/common/preserved_error.cpp +7 -5
  54. package/src/duckdb/src/common/progress_bar/progress_bar.cpp +7 -0
  55. package/src/duckdb/src/common/serializer/buffered_deserializer.cpp +4 -0
  56. package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +15 -2
  57. package/src/duckdb/src/common/serializer/enum_serializer.cpp +1176 -0
  58. package/src/duckdb/src/common/sort/comparators.cpp +14 -5
  59. package/src/duckdb/src/common/sort/sort_state.cpp +5 -7
  60. package/src/duckdb/src/common/sort/sorted_block.cpp +0 -1
  61. package/src/duckdb/src/common/string_util.cpp +4 -1
  62. package/src/duckdb/src/common/types/bit.cpp +166 -87
  63. package/src/duckdb/src/common/types/blob.cpp +1 -1
  64. package/src/duckdb/src/common/types/chunk_collection.cpp +2 -2
  65. package/src/duckdb/src/common/types/column_data_collection.cpp +39 -2
  66. package/src/duckdb/src/common/types/column_data_collection_segment.cpp +11 -6
  67. package/src/duckdb/src/common/types/data_chunk.cpp +1 -1
  68. package/src/duckdb/src/common/types/interval.cpp +0 -41
  69. package/src/duckdb/src/common/types/list_segment.cpp +658 -0
  70. package/src/duckdb/src/common/types/string_heap.cpp +1 -1
  71. package/src/duckdb/src/common/types/string_type.cpp +1 -1
  72. package/src/duckdb/src/common/types/time.cpp +13 -0
  73. package/src/duckdb/src/common/types/value.cpp +320 -154
  74. package/src/duckdb/src/common/types/vector.cpp +156 -128
  75. package/src/duckdb/src/common/types.cpp +313 -153
  76. package/src/duckdb/src/common/value_operations/comparison_operations.cpp +14 -22
  77. package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +10 -10
  78. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +11 -10
  79. package/src/duckdb/src/common/vector_operations/vector_cast.cpp +2 -1
  80. package/src/duckdb/src/execution/aggregate_hashtable.cpp +10 -5
  81. package/src/duckdb/src/execution/column_binding_resolver.cpp +21 -5
  82. package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +2 -1
  83. package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +2 -2
  84. package/src/duckdb/src/execution/index/art/art.cpp +19 -5
  85. package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +1 -1
  86. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +4 -5
  87. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +117 -26
  88. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +3 -0
  89. package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +5 -3
  90. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +64 -17
  91. package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +2 -0
  92. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -2
  93. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +13 -4
  94. package/src/duckdb/src/execution/operator/join/physical_join.cpp +0 -3
  95. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +6 -11
  96. package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +3 -1
  97. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +11 -4
  98. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +24 -19
  99. package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +3 -0
  100. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -1
  101. package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +2 -2
  102. package/src/duckdb/src/execution/operator/persistent/physical_delete.cpp +1 -3
  103. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -0
  104. package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +34 -0
  105. package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +20 -5
  106. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +20 -40
  107. package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +0 -4
  108. package/src/duckdb/src/execution/partitionable_hashtable.cpp +14 -2
  109. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +22 -16
  110. package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +97 -0
  111. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +95 -47
  112. package/src/duckdb/src/execution/physical_plan/plan_create_index.cpp +2 -1
  113. package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +5 -8
  114. package/src/duckdb/src/execution/physical_plan/plan_positional_join.cpp +14 -5
  115. package/src/duckdb/src/execution/physical_plan_generator.cpp +3 -0
  116. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +1 -0
  117. package/src/duckdb/src/execution/window_segment_tree.cpp +173 -1
  118. package/src/duckdb/src/function/aggregate/algebraic/avg.cpp +0 -6
  119. package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +99 -95
  120. package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +269 -0
  121. package/src/duckdb/src/function/aggregate/distributive/bool.cpp +2 -0
  122. package/src/duckdb/src/function/aggregate/distributive/count.cpp +3 -4
  123. package/src/duckdb/src/function/aggregate/distributive/first.cpp +1 -0
  124. package/src/duckdb/src/function/aggregate/distributive/minmax.cpp +2 -0
  125. package/src/duckdb/src/function/aggregate/distributive/sum.cpp +19 -16
  126. package/src/duckdb/src/function/aggregate/distributive_functions.cpp +1 -0
  127. package/src/duckdb/src/function/aggregate/holistic/approximate_quantile.cpp +5 -2
  128. package/src/duckdb/src/function/aggregate/holistic/mode.cpp +1 -1
  129. package/src/duckdb/src/function/aggregate/holistic/quantile.cpp +16 -1
  130. package/src/duckdb/src/function/aggregate/nested/list.cpp +6 -712
  131. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +58 -16
  132. package/src/duckdb/src/function/cast/bit_cast.cpp +0 -2
  133. package/src/duckdb/src/function/cast/blob_cast.cpp +0 -1
  134. package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
  135. package/src/duckdb/src/function/cast/enum_casts.cpp +25 -3
  136. package/src/duckdb/src/function/cast/list_casts.cpp +17 -4
  137. package/src/duckdb/src/function/cast/map_cast.cpp +5 -2
  138. package/src/duckdb/src/function/cast/string_cast.cpp +36 -10
  139. package/src/duckdb/src/function/cast/struct_cast.cpp +24 -4
  140. package/src/duckdb/src/function/cast/time_casts.cpp +2 -2
  141. package/src/duckdb/src/function/cast/union_casts.cpp +33 -7
  142. package/src/duckdb/src/function/function_binder.cpp +1 -8
  143. package/src/duckdb/src/function/scalar/bit/bitstring.cpp +100 -0
  144. package/src/duckdb/src/function/scalar/date/current.cpp +0 -2
  145. package/src/duckdb/src/function/scalar/date/date_diff.cpp +0 -1
  146. package/src/duckdb/src/function/scalar/date/date_part.cpp +18 -26
  147. package/src/duckdb/src/function/scalar/date/date_sub.cpp +0 -1
  148. package/src/duckdb/src/function/scalar/date/date_trunc.cpp +10 -14
  149. package/src/duckdb/src/function/scalar/generic/stats.cpp +2 -4
  150. package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +4 -146
  151. package/src/duckdb/src/function/scalar/list/flatten.cpp +5 -12
  152. package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +1 -1
  153. package/src/duckdb/src/function/scalar/list/list_concat.cpp +8 -12
  154. package/src/duckdb/src/function/scalar/list/list_extract.cpp +5 -12
  155. package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +7 -3
  156. package/src/duckdb/src/function/scalar/list/list_sort.cpp +25 -18
  157. package/src/duckdb/src/function/scalar/list/list_value.cpp +6 -10
  158. package/src/duckdb/src/function/scalar/map/map.cpp +47 -1
  159. package/src/duckdb/src/function/scalar/map/map_entries.cpp +61 -0
  160. package/src/duckdb/src/function/scalar/map/map_extract.cpp +68 -26
  161. package/src/duckdb/src/function/scalar/map/map_keys_values.cpp +97 -0
  162. package/src/duckdb/src/function/scalar/math/numeric.cpp +101 -17
  163. package/src/duckdb/src/function/scalar/math_functions.cpp +3 -0
  164. package/src/duckdb/src/function/scalar/nested_functions.cpp +3 -0
  165. package/src/duckdb/src/function/scalar/operators/add.cpp +0 -9
  166. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +29 -48
  167. package/src/duckdb/src/function/scalar/operators/bitwise.cpp +0 -63
  168. package/src/duckdb/src/function/scalar/operators/multiply.cpp +5 -6
  169. package/src/duckdb/src/function/scalar/operators/subtract.cpp +0 -6
  170. package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -6
  171. package/src/duckdb/src/function/scalar/string/hex.cpp +201 -0
  172. package/src/duckdb/src/function/scalar/string/instr.cpp +2 -6
  173. package/src/duckdb/src/function/scalar/string/length.cpp +2 -6
  174. package/src/duckdb/src/function/scalar/string/like.cpp +2 -6
  175. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +243 -0
  176. package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +79 -0
  177. package/src/duckdb/src/function/scalar/string/regexp.cpp +21 -80
  178. package/src/duckdb/src/function/scalar/string/substring.cpp +2 -6
  179. package/src/duckdb/src/function/scalar/string_functions.cpp +2 -0
  180. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +5 -10
  181. package/src/duckdb/src/function/scalar/struct/struct_insert.cpp +11 -14
  182. package/src/duckdb/src/function/scalar/struct/struct_pack.cpp +6 -7
  183. package/src/duckdb/src/function/table/arrow.cpp +5 -2
  184. package/src/duckdb/src/function/table/arrow_conversion.cpp +25 -1
  185. package/src/duckdb/src/function/table/checkpoint.cpp +5 -1
  186. package/src/duckdb/src/function/table/read_csv.cpp +60 -0
  187. package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +2 -2
  188. package/src/duckdb/src/function/table/system/test_all_types.cpp +2 -2
  189. package/src/duckdb/src/function/table/table_scan.cpp +9 -12
  190. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  191. package/src/duckdb/src/function/table_function.cpp +30 -11
  192. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +6 -0
  193. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +1 -1
  194. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +6 -8
  195. package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +3 -0
  196. package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +2 -1
  197. package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +8 -2
  198. package/src/duckdb/src/include/duckdb/common/constants.hpp +0 -19
  199. package/src/duckdb/src/include/duckdb/common/enums/aggregate_handling.hpp +2 -0
  200. package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -3
  201. package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +7 -4
  202. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +1 -0
  203. package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +2 -0
  204. package/src/duckdb/src/include/duckdb/common/enums/set_operation_type.hpp +2 -1
  205. package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +2 -1
  206. package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +2 -1
  207. package/src/duckdb/src/include/duckdb/common/exception.hpp +69 -2
  208. package/src/duckdb/src/include/duckdb/common/field_writer.hpp +12 -4
  209. package/src/duckdb/src/include/duckdb/common/helper.hpp +1 -1
  210. package/src/duckdb/src/include/duckdb/common/{http_stats.hpp → http_state.hpp} +18 -4
  211. package/src/duckdb/src/include/duckdb/common/operator/comparison_operators.hpp +45 -149
  212. package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +2 -0
  213. package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +45 -0
  214. package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +6 -1
  215. package/src/duckdb/src/include/duckdb/common/progress_bar/progress_bar.hpp +2 -0
  216. package/src/duckdb/src/include/duckdb/common/serializer/buffered_deserializer.hpp +4 -2
  217. package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +8 -2
  218. package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +113 -0
  219. package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +336 -0
  220. package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +268 -0
  221. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +126 -0
  222. package/src/duckdb/src/include/duckdb/common/serializer.hpp +13 -0
  223. package/src/duckdb/src/include/duckdb/common/string_util.hpp +25 -0
  224. package/src/duckdb/src/include/duckdb/common/types/bit.hpp +12 -7
  225. package/src/duckdb/src/include/duckdb/common/types/interval.hpp +39 -3
  226. package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +70 -0
  227. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +73 -3
  228. package/src/duckdb/src/include/duckdb/common/types/time.hpp +3 -0
  229. package/src/duckdb/src/include/duckdb/common/types/value.hpp +17 -48
  230. package/src/duckdb/src/include/duckdb/common/types/value_map.hpp +1 -1
  231. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -1
  232. package/src/duckdb/src/include/duckdb/common/types.hpp +45 -8
  233. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +2 -2
  234. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +1 -0
  235. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -14
  236. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_perfecthash_aggregate.hpp +1 -1
  237. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_cross_product.hpp +2 -0
  238. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_file_handle.hpp +1 -0
  239. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +10 -0
  240. package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_projection.hpp +5 -0
  241. package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +3 -0
  242. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +1 -3
  243. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +54 -0
  244. package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +5 -0
  245. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +18 -6
  246. package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +84 -0
  247. package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +2 -2
  248. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +28 -64
  249. package/src/duckdb/src/include/duckdb/function/function_binder.hpp +3 -6
  250. package/src/duckdb/src/include/duckdb/function/scalar/bit_functions.hpp +4 -0
  251. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +138 -0
  252. package/src/duckdb/src/include/duckdb/function/scalar/math_functions.hpp +8 -0
  253. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +59 -0
  254. package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
  255. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +4 -0
  256. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
  257. package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +12 -1
  258. package/src/duckdb/src/include/duckdb/function/table_function.hpp +10 -0
  259. package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -0
  260. package/src/duckdb/src/include/duckdb/main/client_config.hpp +2 -0
  261. package/src/duckdb/src/include/duckdb/main/client_data.hpp +3 -3
  262. package/src/duckdb/src/include/duckdb/main/config.hpp +3 -0
  263. package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +2 -0
  264. package/src/duckdb/src/include/duckdb/main/database.hpp +1 -0
  265. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +2 -0
  266. package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +2 -0
  267. package/src/duckdb/src/include/duckdb/main/relation/explain_relation.hpp +2 -1
  268. package/src/duckdb/src/include/duckdb/main/relation.hpp +2 -1
  269. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
  270. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  271. package/src/duckdb/src/include/duckdb/optimizer/rule/list.hpp +1 -0
  272. package/src/duckdb/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp +24 -0
  273. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +4 -0
  274. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
  275. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
  276. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +5 -0
  277. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -0
  278. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -0
  279. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -0
  280. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -0
  281. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -0
  282. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
  283. package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
  284. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +4 -2
  285. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -0
  286. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -0
  287. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -0
  288. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -0
  289. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +4 -2
  290. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -0
  291. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +5 -0
  292. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +5 -1
  293. package/src/duckdb/src/include/duckdb/parser/parsed_data/{alter_function_info.hpp → alter_scalar_function_info.hpp} +13 -13
  294. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +47 -0
  295. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +6 -0
  296. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_function_info.hpp +2 -1
  297. package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -0
  298. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -0
  299. package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
  300. package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +5 -0
  301. package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
  302. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +13 -2
  303. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +24 -1
  304. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -1
  305. package/src/duckdb/src/include/duckdb/parser/statement/multi_statement.hpp +28 -0
  306. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +6 -1
  307. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +4 -0
  308. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -0
  309. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
  310. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
  311. package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
  312. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +87 -0
  313. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
  314. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
  315. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -1
  316. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -0
  317. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +33 -0
  318. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -0
  319. package/src/duckdb/src/include/duckdb/planner/binder.hpp +15 -4
  320. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +3 -0
  321. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +3 -0
  322. package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +64 -0
  323. package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -2
  324. package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +4 -1
  325. package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +2 -2
  326. package/src/duckdb/src/include/duckdb/planner/expression_binder/select_binder.hpp +9 -38
  327. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
  328. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
  329. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
  330. package/src/duckdb/src/include/duckdb/planner/operator/logical_asof_join.hpp +22 -0
  331. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -2
  332. package/src/duckdb/src/include/duckdb/planner/operator/logical_distinct.hpp +3 -0
  333. package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +8 -2
  334. package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +2 -0
  335. package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +76 -44
  336. package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -2
  337. package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +1 -1
  338. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
  339. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
  340. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +2 -1
  341. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
  342. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
  343. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +2 -1
  344. package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +4 -3
  345. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +4 -3
  346. package/src/duckdb/src/include/duckdb/storage/index.hpp +5 -4
  347. package/src/duckdb/src/include/duckdb/storage/meta_block_reader.hpp +7 -0
  348. package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +93 -29
  349. package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +22 -3
  350. package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +8 -6
  351. package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +41 -0
  352. package/src/duckdb/src/include/duckdb/storage/statistics/node_statistics.hpp +26 -0
  353. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +114 -0
  354. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +62 -0
  355. package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -7
  356. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +74 -0
  357. package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +42 -0
  358. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +2 -3
  359. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
  360. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +21 -7
  361. package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +3 -2
  362. package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +5 -6
  363. package/src/duckdb/src/include/duckdb/storage/table/column_segment_tree.hpp +18 -0
  364. package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
  365. package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +6 -3
  366. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +41 -45
  367. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +23 -7
  368. package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +35 -0
  369. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +21 -29
  370. package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +6 -6
  371. package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +281 -26
  372. package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +0 -4
  373. package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -0
  374. package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +0 -1
  375. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +1 -1
  376. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +6 -3
  377. package/src/duckdb/src/include/duckdb.h +71 -2
  378. package/src/duckdb/src/include/duckdb.hpp +0 -1
  379. package/src/duckdb/src/main/capi/pending-c.cpp +16 -3
  380. package/src/duckdb/src/main/capi/result-c.cpp +27 -1
  381. package/src/duckdb/src/main/capi/stream-c.cpp +25 -0
  382. package/src/duckdb/src/main/capi/table_function-c.cpp +23 -0
  383. package/src/duckdb/src/main/client_context.cpp +38 -34
  384. package/src/duckdb/src/main/client_data.cpp +7 -6
  385. package/src/duckdb/src/main/config.cpp +70 -1
  386. package/src/duckdb/src/main/database.cpp +19 -2
  387. package/src/duckdb/src/main/extension/extension_install.cpp +7 -2
  388. package/src/duckdb/src/main/prepared_statement.cpp +4 -0
  389. package/src/duckdb/src/main/query_profiler.cpp +17 -15
  390. package/src/duckdb/src/main/relation/explain_relation.cpp +3 -3
  391. package/src/duckdb/src/main/relation.cpp +3 -2
  392. package/src/duckdb/src/main/settings/settings.cpp +20 -8
  393. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -0
  394. package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
  395. package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -6
  396. package/src/duckdb/src/optimizer/filter_pullup.cpp +3 -1
  397. package/src/duckdb/src/optimizer/filter_pushdown.cpp +14 -8
  398. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +107 -71
  399. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +32 -12
  400. package/src/duckdb/src/optimizer/optimizer.cpp +1 -0
  401. package/src/duckdb/src/optimizer/pullup/pullup_from_left.cpp +2 -2
  402. package/src/duckdb/src/optimizer/pushdown/pushdown_aggregate.cpp +33 -5
  403. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +1 -1
  404. package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +3 -0
  405. package/src/duckdb/src/optimizer/pushdown/pushdown_left_join.cpp +5 -12
  406. package/src/duckdb/src/optimizer/pushdown/pushdown_mark_join.cpp +2 -2
  407. package/src/duckdb/src/optimizer/pushdown/pushdown_single_join.cpp +1 -1
  408. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +1 -0
  409. package/src/duckdb/src/optimizer/rule/move_constants.cpp +10 -4
  410. package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +30 -0
  411. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +9 -2
  412. package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +9 -3
  413. package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +6 -7
  414. package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +14 -11
  415. package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
  416. package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +13 -15
  417. package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +0 -1
  418. package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +3 -75
  419. package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +7 -2
  420. package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -0
  421. package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +2 -3
  422. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +29 -32
  423. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +5 -5
  424. package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +3 -3
  425. package/src/duckdb/src/optimizer/statistics_propagator.cpp +2 -1
  426. package/src/duckdb/src/optimizer/unnest_rewriter.cpp +2 -2
  427. package/src/duckdb/src/parallel/meta_pipeline.cpp +0 -7
  428. package/src/duckdb/src/parser/common_table_expression_info.cpp +19 -0
  429. package/src/duckdb/src/parser/expression/between_expression.cpp +17 -0
  430. package/src/duckdb/src/parser/expression/case_expression.cpp +28 -0
  431. package/src/duckdb/src/parser/expression/cast_expression.cpp +17 -0
  432. package/src/duckdb/src/parser/expression/collate_expression.cpp +16 -0
  433. package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -0
  434. package/src/duckdb/src/parser/expression/comparison_expression.cpp +16 -0
  435. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +17 -0
  436. package/src/duckdb/src/parser/expression/constant_expression.cpp +14 -0
  437. package/src/duckdb/src/parser/expression/default_expression.cpp +7 -0
  438. package/src/duckdb/src/parser/expression/function_expression.cpp +35 -0
  439. package/src/duckdb/src/parser/expression/lambda_expression.cpp +16 -0
  440. package/src/duckdb/src/parser/expression/operator_expression.cpp +15 -0
  441. package/src/duckdb/src/parser/expression/parameter_expression.cpp +15 -0
  442. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +14 -0
  443. package/src/duckdb/src/parser/expression/star_expression.cpp +26 -6
  444. package/src/duckdb/src/parser/expression/subquery_expression.cpp +20 -0
  445. package/src/duckdb/src/parser/expression/window_expression.cpp +43 -0
  446. package/src/duckdb/src/parser/parsed_data/alter_info.cpp +7 -3
  447. package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +56 -0
  448. package/src/duckdb/src/parser/parsed_data/alter_table_function_info.cpp +51 -0
  449. package/src/duckdb/src/parser/parsed_data/create_scalar_function_info.cpp +3 -2
  450. package/src/duckdb/src/parser/parsed_data/create_table_function_info.cpp +6 -0
  451. package/src/duckdb/src/parser/parsed_data/sample_options.cpp +22 -10
  452. package/src/duckdb/src/parser/parsed_expression.cpp +72 -0
  453. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +15 -1
  454. package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +21 -0
  455. package/src/duckdb/src/parser/query_node/select_node.cpp +31 -0
  456. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +17 -0
  457. package/src/duckdb/src/parser/query_node.cpp +51 -1
  458. package/src/duckdb/src/parser/result_modifier.cpp +78 -0
  459. package/src/duckdb/src/parser/statement/multi_statement.cpp +18 -0
  460. package/src/duckdb/src/parser/statement/select_statement.cpp +12 -0
  461. package/src/duckdb/src/parser/tableref/basetableref.cpp +21 -0
  462. package/src/duckdb/src/parser/tableref/emptytableref.cpp +4 -0
  463. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +17 -0
  464. package/src/duckdb/src/parser/tableref/joinref.cpp +29 -0
  465. package/src/duckdb/src/parser/tableref/pivotref.cpp +373 -0
  466. package/src/duckdb/src/parser/tableref/subqueryref.cpp +15 -0
  467. package/src/duckdb/src/parser/tableref/table_function.cpp +17 -0
  468. package/src/duckdb/src/parser/tableref.cpp +49 -0
  469. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +11 -0
  470. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -1
  471. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +17 -2
  472. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +85 -42
  473. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
  474. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +1 -1
  475. package/src/duckdb/src/parser/transform/helpers/transform_alias.cpp +12 -6
  476. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +24 -0
  477. package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +7 -0
  478. package/src/duckdb/src/parser/transform/helpers/transform_orderby.cpp +0 -7
  479. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +3 -2
  480. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +4 -0
  481. package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +4 -0
  482. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +179 -0
  483. package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +3 -4
  484. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -0
  485. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +2 -3
  486. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +12 -1
  487. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +121 -0
  488. package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +2 -0
  489. package/src/duckdb/src/parser/transformer.cpp +15 -3
  490. package/src/duckdb/src/planner/bind_context.cpp +18 -25
  491. package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +9 -7
  492. package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +4 -3
  493. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +23 -12
  494. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +3 -2
  495. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +176 -0
  496. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -0
  497. package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +163 -24
  498. package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +2 -2
  499. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +109 -94
  500. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +11 -0
  501. package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +9 -4
  502. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +5 -3
  503. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +3 -2
  504. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +10 -1
  505. package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
  506. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +12 -8
  507. package/src/duckdb/src/planner/binder/statement/bind_logical_plan.cpp +17 -0
  508. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +4 -2
  509. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +19 -3
  510. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +366 -0
  511. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +11 -1
  512. package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -0
  513. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +61 -13
  514. package/src/duckdb/src/planner/binder.cpp +19 -24
  515. package/src/duckdb/src/planner/bound_result_modifier.cpp +27 -1
  516. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +9 -2
  517. package/src/duckdb/src/planner/expression/bound_expression.cpp +4 -0
  518. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +1 -1
  519. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +146 -0
  520. package/src/duckdb/src/planner/expression_binder/having_binder.cpp +6 -3
  521. package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -3
  522. package/src/duckdb/src/planner/expression_binder/select_binder.cpp +1 -132
  523. package/src/duckdb/src/planner/expression_binder.cpp +10 -3
  524. package/src/duckdb/src/planner/expression_iterator.cpp +17 -10
  525. package/src/duckdb/src/planner/filter/constant_filter.cpp +4 -6
  526. package/src/duckdb/src/planner/logical_operator.cpp +7 -2
  527. package/src/duckdb/src/planner/logical_operator_visitor.cpp +6 -0
  528. package/src/duckdb/src/planner/operator/logical_asof_join.cpp +8 -0
  529. package/src/duckdb/src/planner/operator/logical_distinct.cpp +3 -0
  530. package/src/duckdb/src/planner/planner.cpp +2 -1
  531. package/src/duckdb/src/planner/pragma_handler.cpp +10 -2
  532. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +3 -1
  533. package/src/duckdb/src/storage/buffer_manager.cpp +44 -46
  534. package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +1 -1
  535. package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +4 -15
  536. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +10 -4
  537. package/src/duckdb/src/storage/checkpoint_manager.cpp +9 -3
  538. package/src/duckdb/src/storage/compression/bitpacking.cpp +29 -25
  539. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +45 -46
  540. package/src/duckdb/src/storage/compression/numeric_constant.cpp +10 -11
  541. package/src/duckdb/src/storage/compression/patas.cpp +1 -1
  542. package/src/duckdb/src/storage/compression/rle.cpp +20 -15
  543. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +6 -6
  544. package/src/duckdb/src/storage/data_table.cpp +23 -23
  545. package/src/duckdb/src/storage/index.cpp +12 -1
  546. package/src/duckdb/src/storage/local_storage.cpp +27 -23
  547. package/src/duckdb/src/storage/meta_block_reader.cpp +22 -0
  548. package/src/duckdb/src/storage/statistics/base_statistics.cpp +373 -128
  549. package/src/duckdb/src/storage/statistics/column_statistics.cpp +57 -3
  550. package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +8 -9
  551. package/src/duckdb/src/storage/statistics/list_stats.cpp +121 -0
  552. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +591 -0
  553. package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +65 -0
  554. package/src/duckdb/src/storage/statistics/segment_statistics.cpp +2 -11
  555. package/src/duckdb/src/storage/statistics/string_stats.cpp +273 -0
  556. package/src/duckdb/src/storage/statistics/struct_stats.cpp +133 -0
  557. package/src/duckdb/src/storage/storage_info.cpp +2 -2
  558. package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +4 -10
  559. package/src/duckdb/src/storage/table/column_data.cpp +118 -62
  560. package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +10 -9
  561. package/src/duckdb/src/storage/table/column_segment.cpp +30 -45
  562. package/src/duckdb/src/storage/table/list_column_data.cpp +50 -71
  563. package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
  564. package/src/duckdb/src/storage/table/row_group.cpp +213 -143
  565. package/src/duckdb/src/storage/table/row_group_collection.cpp +151 -105
  566. package/src/duckdb/src/storage/table/scan_state.cpp +45 -33
  567. package/src/duckdb/src/storage/table/standard_column_data.cpp +11 -12
  568. package/src/duckdb/src/storage/table/struct_column_data.cpp +27 -34
  569. package/src/duckdb/src/storage/table/table_statistics.cpp +27 -7
  570. package/src/duckdb/src/storage/table/update_segment.cpp +23 -18
  571. package/src/duckdb/src/storage/wal_replay.cpp +8 -5
  572. package/src/duckdb/src/storage/write_ahead_log.cpp +2 -2
  573. package/src/duckdb/src/transaction/commit_state.cpp +11 -7
  574. package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
  575. package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +35 -0
  576. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +36 -2
  577. package/src/duckdb/third_party/libpg_query/include/nodes/primnodes.hpp +3 -3
  578. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +1022 -530
  579. package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +8 -0
  580. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24462 -22828
  581. package/src/duckdb/third_party/re2/re2/re2.cc +9 -0
  582. package/src/duckdb/third_party/re2/re2/re2.h +2 -0
  583. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +4 -4
  584. package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
  585. package/src/duckdb/ub_src_common_serializer.cpp +2 -0
  586. package/src/duckdb/ub_src_common_types.cpp +2 -0
  587. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  588. package/src/duckdb/ub_src_function_aggregate_distributive.cpp +2 -0
  589. package/src/duckdb/ub_src_function_scalar_bit.cpp +2 -0
  590. package/src/duckdb/ub_src_function_scalar_map.cpp +4 -0
  591. package/src/duckdb/ub_src_function_scalar_string.cpp +2 -0
  592. package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
  593. package/src/duckdb/ub_src_main_capi.cpp +2 -0
  594. package/src/duckdb/ub_src_optimizer_rule.cpp +2 -0
  595. package/src/duckdb/ub_src_parser.cpp +2 -0
  596. package/src/duckdb/ub_src_parser_parsed_data.cpp +4 -2
  597. package/src/duckdb/ub_src_parser_statement.cpp +2 -0
  598. package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
  599. package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
  600. package/src/duckdb/ub_src_parser_transform_tableref.cpp +2 -0
  601. package/src/duckdb/ub_src_planner_binder_expression.cpp +2 -0
  602. package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
  603. package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
  604. package/src/duckdb/ub_src_planner_operator.cpp +2 -0
  605. package/src/duckdb/ub_src_storage_statistics.cpp +6 -6
  606. package/src/duckdb/ub_src_storage_table.cpp +0 -2
  607. package/src/duckdb_node.hpp +2 -1
  608. package/src/statement.cpp +5 -5
  609. package/src/utils.cpp +27 -2
  610. package/test/extension.test.ts +44 -26
  611. package/test/syntax_error.test.ts +3 -1
  612. package/filelist.cache +0 -0
  613. package/src/duckdb/src/include/duckdb/main/loadable_extension.hpp +0 -59
  614. package/src/duckdb/src/include/duckdb/storage/statistics/list_statistics.hpp +0 -36
  615. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_statistics.hpp +0 -75
  616. package/src/duckdb/src/include/duckdb/storage/statistics/string_statistics.hpp +0 -49
  617. package/src/duckdb/src/include/duckdb/storage/statistics/struct_statistics.hpp +0 -36
  618. package/src/duckdb/src/include/duckdb/storage/statistics/validity_statistics.hpp +0 -45
  619. package/src/duckdb/src/parser/parsed_data/alter_function_info.cpp +0 -55
  620. package/src/duckdb/src/storage/statistics/list_statistics.cpp +0 -94
  621. package/src/duckdb/src/storage/statistics/numeric_statistics.cpp +0 -307
  622. package/src/duckdb/src/storage/statistics/string_statistics.cpp +0 -220
  623. package/src/duckdb/src/storage/statistics/struct_statistics.cpp +0 -108
  624. package/src/duckdb/src/storage/statistics/validity_statistics.cpp +0 -91
  625. package/src/duckdb/src/storage/table/segment_tree.cpp +0 -179
@@ -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
  };
@@ -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 {
@@ -17,12 +17,28 @@
17
17
 
18
18
  namespace duckdb {
19
19
 
20
+ class FormatSerializer;
21
+ class FormatDeserializer;
20
22
  class Serializer;
21
23
  class Deserializer;
22
24
  class Value;
23
25
  class TypeCatalogEntry;
24
26
  class Vector;
25
27
  class ClientContext;
28
+ class FieldWriter;
29
+
30
+ //! Extra Type Info Type
31
+ enum class ExtraTypeInfoType : uint8_t {
32
+ INVALID_TYPE_INFO = 0,
33
+ GENERIC_TYPE_INFO = 1,
34
+ DECIMAL_TYPE_INFO = 2,
35
+ STRING_TYPE_INFO = 3,
36
+ LIST_TYPE_INFO = 4,
37
+ STRUCT_TYPE_INFO = 5,
38
+ ENUM_TYPE_INFO = 6,
39
+ USER_TYPE_INFO = 7,
40
+ AGGREGATE_STATE_TYPE_INFO = 8
41
+ };
26
42
 
27
43
  struct hugeint_t {
28
44
  public:
@@ -32,7 +48,7 @@ public:
32
48
  public:
33
49
  DUCKDB_API hugeint_t() = default;
34
50
  DUCKDB_API hugeint_t(int64_t value); // NOLINT: Allow implicit conversion from `int64_t`
35
- DUCKDB_API constexpr hugeint_t(int64_t upper, uint64_t lower): lower(lower), upper(upper) {};
51
+ DUCKDB_API constexpr hugeint_t(int64_t upper, uint64_t lower): lower(lower), upper(upper) {}
36
52
  DUCKDB_API constexpr hugeint_t(const hugeint_t &rhs) = default;
37
53
  DUCKDB_API constexpr hugeint_t(hugeint_t &&rhs) = default;
38
54
  DUCKDB_API hugeint_t &operator=(const hugeint_t &rhs) = default;
@@ -94,6 +110,12 @@ struct list_entry_t {
94
110
  list_entry_t() = default;
95
111
  list_entry_t(uint64_t offset, uint64_t length) : offset(offset), length(length) {
96
112
  }
113
+ inline constexpr bool operator != (const list_entry_t &other) const {
114
+ return !(*this == other);
115
+ }
116
+ inline constexpr bool operator == (const list_entry_t &other) const {
117
+ return offset == other.offset && length == other.length;
118
+ }
97
119
 
98
120
  uint64_t offset;
99
121
  uint64_t length;
@@ -261,7 +283,6 @@ enum class LogicalTypeId : uint8_t {
261
283
 
262
284
  HUGEINT = 50,
263
285
  POINTER = 51,
264
- // HASH = 52, // deprecated, uses UBIGINT instead
265
286
  VALIDITY = 53,
266
287
  UUID = 54,
267
288
 
@@ -275,8 +296,8 @@ enum class LogicalTypeId : uint8_t {
275
296
  UNION = 107
276
297
  };
277
298
 
278
- struct ExtraTypeInfo;
279
299
 
300
+ struct ExtraTypeInfo;
280
301
 
281
302
  struct aggregate_state_t;
282
303
 
@@ -298,6 +319,11 @@ struct LogicalType {
298
319
  inline const ExtraTypeInfo *AuxInfo() const {
299
320
  return type_info_.get();
300
321
  }
322
+
323
+ inline shared_ptr<ExtraTypeInfo> GetAuxInfoShrPtr() const {
324
+ return type_info_;
325
+ }
326
+
301
327
  inline void CopyAuxInfo(const LogicalType& other) {
302
328
  type_info_ = other.type_info_;
303
329
  }
@@ -314,7 +340,7 @@ struct LogicalType {
314
340
  inline LogicalType& operator=(LogicalType&& other) noexcept {
315
341
  id_ = other.id_;
316
342
  physical_type_ = other.physical_type_;
317
- type_info_ = std::move(other.type_info_);
343
+ std::swap(type_info_, other.type_info_);
318
344
  return *this;
319
345
  }
320
346
 
@@ -325,9 +351,16 @@ struct LogicalType {
325
351
 
326
352
  //! Serializes a LogicalType to a stand-alone binary blob
327
353
  DUCKDB_API void Serialize(Serializer &serializer) const;
354
+
355
+ DUCKDB_API void SerializeEnumType(Serializer &serializer) const;
356
+
328
357
  //! Deserializes a blob back into an LogicalType
329
358
  DUCKDB_API static LogicalType Deserialize(Deserializer &source);
330
359
 
360
+ DUCKDB_API void FormatSerialize(FormatSerializer &serializer) const;
361
+ DUCKDB_API static LogicalType FormatDeserialize(FormatDeserializer &deserializer);
362
+
363
+
331
364
  DUCKDB_API static bool TypeIsTimestamp(LogicalTypeId id) {
332
365
  return (id == LogicalTypeId::TIMESTAMP ||
333
366
  id == LogicalTypeId::TIMESTAMP_MS ||
@@ -350,6 +383,8 @@ struct LogicalType {
350
383
  DUCKDB_API static void SetCatalog(LogicalType &type, TypeCatalogEntry* catalog_entry);
351
384
  DUCKDB_API static TypeCatalogEntry* GetCatalog(const LogicalType &type);
352
385
 
386
+ DUCKDB_API static ExtraTypeInfoType GetExtraTypeInfoType(const ExtraTypeInfo &type);
387
+
353
388
  //! Gets the decimal properties of a numeric type. Fails if the type is not numeric.
354
389
  DUCKDB_API bool GetDecimalProperties(uint8_t &width, uint8_t &scale) const;
355
390
 
@@ -404,10 +439,10 @@ public:
404
439
  // explicitly allowing these functions to be capitalized to be in-line with the remaining functions
405
440
  DUCKDB_API static LogicalType DECIMAL(int width, int scale); // NOLINT
406
441
  DUCKDB_API static LogicalType VARCHAR_COLLATION(string collation); // NOLINT
407
- DUCKDB_API static LogicalType LIST( LogicalType child); // NOLINT
408
- DUCKDB_API static LogicalType STRUCT( child_list_t<LogicalType> children); // NOLINT
442
+ DUCKDB_API static LogicalType LIST(const LogicalType &child); // NOLINT
443
+ DUCKDB_API static LogicalType STRUCT(const child_list_t<LogicalType> &children); // NOLINT
409
444
  DUCKDB_API static LogicalType AGGREGATE_STATE(aggregate_state_t state_type); // NOLINT
410
- DUCKDB_API static LogicalType MAP(LogicalType child); // NOLINT
445
+ DUCKDB_API static LogicalType MAP(const LogicalType &child); // NOLINT
411
446
  DUCKDB_API static LogicalType MAP( child_list_t<LogicalType> children); // NOLINT
412
447
  DUCKDB_API static LogicalType MAP(LogicalType key, LogicalType value); // NOLINT
413
448
  DUCKDB_API static LogicalType UNION( child_list_t<LogicalType> members); // NOLINT
@@ -442,12 +477,14 @@ struct UserType{
442
477
  struct EnumType{
443
478
  DUCKDB_API static const string &GetTypeName(const LogicalType &type);
444
479
  DUCKDB_API static int64_t GetPos(const LogicalType &type, const string_t& key);
445
- DUCKDB_API static Vector &GetValuesInsertOrder(const LogicalType &type);
480
+ DUCKDB_API static const Vector &GetValuesInsertOrder(const LogicalType &type);
446
481
  DUCKDB_API static idx_t GetSize(const LogicalType &type);
447
482
  DUCKDB_API static const string GetValue(const Value &val);
448
483
  DUCKDB_API static void SetCatalog(LogicalType &type, TypeCatalogEntry* catalog_entry);
449
484
  DUCKDB_API static TypeCatalogEntry* GetCatalog(const LogicalType &type);
485
+ DUCKDB_API static string GetSchemaName(const LogicalType &type);
450
486
  DUCKDB_API static PhysicalType GetPhysicalType(const LogicalType &type);
487
+ DUCKDB_API static void Serialize(FieldWriter& writer, const ExtraTypeInfo& type_info, bool serialize_internals);
451
488
  };
452
489
 
453
490
  struct StructType {
@@ -209,8 +209,8 @@ public:
209
209
 
210
210
  template <class INPUT_TYPE, class RESULT_TYPE, class OP>
211
211
  static void ExecuteString(Vector &input, Vector &result, idx_t count) {
212
- UnaryExecutor::GenericExecute<string_t, string_t, UnaryStringOperator<OP>>(input, result, count,
213
- (void *)&result);
212
+ UnaryExecutor::GenericExecute<INPUT_TYPE, RESULT_TYPE, UnaryStringOperator<OP>>(input, result, count,
213
+ (void *)&result);
214
214
  }
215
215
  };
216
216
 
@@ -113,6 +113,7 @@ public:
113
113
  }
114
114
 
115
115
  idx_t MaxCapacity();
116
+ static idx_t GetMaxCapacity(HtEntryType entry_type, idx_t tuple_size);
116
117
 
117
118
  void Partition(vector<GroupedAggregateHashTable *> &partition_hts, hash_t mask, idx_t shift);
118
119
 
@@ -27,18 +27,7 @@
27
27
  namespace duckdb {
28
28
 
29
29
  class ConflictManager;
30
-
31
- struct ARTIndexScanState : public IndexScanState {
32
-
33
- //! Scan predicates (single predicate scan or range scan)
34
- Value values[2];
35
- //! Expressions of the scan predicates
36
- ExpressionType expressions[2];
37
- bool checked = false;
38
- //! All scanned row IDs
39
- vector<row_t> result_ids;
40
- Iterator iterator;
41
- };
30
+ struct ARTIndexScanState;
42
31
 
43
32
  enum class VerifyExistenceType : uint8_t {
44
33
  APPEND = 0, // appends to a table
@@ -72,7 +61,7 @@ public:
72
61
  vector<row_t> &result_ids) override;
73
62
 
74
63
  //! Called when data is appended to the index. The lock obtained from InitializeLock must be held
75
- bool Append(IndexLock &lock, DataChunk &entries, Vector &row_identifiers) override;
64
+ PreservedError Append(IndexLock &lock, DataChunk &entries, Vector &row_identifiers) override;
76
65
  //! Verify that data can be appended to the index without a constraint violation
77
66
  void VerifyAppend(DataChunk &chunk) override;
78
67
  //! Verify that data can be appended to the index without a constraint violation using the conflict manager
@@ -80,7 +69,7 @@ public:
80
69
  //! Delete a chunk of entries from the index. The lock obtained from InitializeLock must be held
81
70
  void Delete(IndexLock &lock, DataChunk &entries, Vector &row_identifiers) override;
82
71
  //! Insert a chunk of entries into the index
83
- bool Insert(IndexLock &lock, DataChunk &data, Vector &row_ids) override;
72
+ PreservedError Insert(IndexLock &lock, DataChunk &data, Vector &row_ids) override;
84
73
 
85
74
  //! Construct an ART from a vector of sorted keys
86
75
  bool ConstructFromSorted(idx_t count, vector<Key> &keys, Vector &row_identifiers);
@@ -20,7 +20,7 @@ class PhysicalPerfectHashAggregate : public PhysicalOperator {
20
20
  public:
21
21
  PhysicalPerfectHashAggregate(ClientContext &context, vector<LogicalType> types,
22
22
  vector<unique_ptr<Expression>> aggregates, vector<unique_ptr<Expression>> groups,
23
- vector<unique_ptr<BaseStatistics>> group_stats, vector<idx_t> required_bits,
23
+ const vector<unique_ptr<BaseStatistics>> &group_stats, vector<idx_t> required_bits,
24
24
  idx_t estimated_cardinality);
25
25
 
26
26
  //! The groups
@@ -60,10 +60,12 @@ public:
60
60
 
61
61
  OperatorResultType Execute(DataChunk &input, DataChunk &output);
62
62
 
63
+ // returns if the left side is scanned as a constant vector
63
64
  bool ScanLHS() {
64
65
  return scan_input_chunk;
65
66
  }
66
67
 
68
+ // returns the position in the chunk of chunk scanned as a constant input vector
67
69
  idx_t PositionInChunk() {
68
70
  return position_in_chunk;
69
71
  }
@@ -87,6 +87,7 @@ public:
87
87
  // we have data left to read from the file
88
88
  // read directly into the buffer
89
89
  auto bytes_read = file_handle->Read((char *)buffer + result_offset, nr_bytes - result_offset);
90
+ file_size = file_handle->GetFileSize();
90
91
  read_position += bytes_read;
91
92
  if (reset_enabled) {
92
93
  // if reset caching is enabled, we need to cache the bytes that we have read
@@ -14,6 +14,7 @@
14
14
  #include "duckdb/common/types/value.hpp"
15
15
  #include "duckdb/common/field_writer.hpp"
16
16
  #include "duckdb/common/case_insensitive_map.hpp"
17
+ #include "duckdb/common/types.hpp"
17
18
 
18
19
  namespace duckdb {
19
20
 
@@ -77,12 +78,19 @@ struct BufferedCSVReaderOptions {
77
78
  vector<LogicalType> sql_type_list;
78
79
  //! User-defined name list
79
80
  vector<string> name_list;
81
+ //! Types considered as candidates for auto detection ordered by descending specificity (~ from high to low)
82
+ vector<LogicalType> auto_type_candidates = {LogicalType::VARCHAR, LogicalType::TIMESTAMP, LogicalType::DATE,
83
+ LogicalType::TIME, LogicalType::DOUBLE, LogicalType::BIGINT,
84
+ LogicalType::BOOLEAN, LogicalType::SQLNULL};
85
+
80
86
  //===--------------------------------------------------------------------===//
81
87
  // ReadCSVOptions
82
88
  //===--------------------------------------------------------------------===//
83
89
 
84
90
  //! How many leading rows to skip
85
91
  idx_t skip_rows = 0;
92
+ //! Whether or not the skip_rows is set by the user
93
+ bool skip_rows_set = false;
86
94
  //! Maximum CSV line size: specified because if we reach this amount, we likely have wrong delimiters (default: 2MB)
87
95
  //! note that this is the guaranteed line length that will succeed, longer lines may be accepted if slightly above
88
96
  idx_t maximum_line_size = 2097152;
@@ -110,6 +118,8 @@ struct BufferedCSVReaderOptions {
110
118
  idx_t buffer_size = CSVBuffer::INITIAL_BUFFER_SIZE_COLOSSAL;
111
119
  //! Decimal separator when reading as numeric
112
120
  string decimal_separator = ".";
121
+ //! Whether or not to pad rows that do not have enough columns with NULL values
122
+ bool null_padding = true;
113
123
 
114
124
  //===--------------------------------------------------------------------===//
115
125
  // WriteCSVOptions
@@ -30,6 +30,11 @@ public:
30
30
  }
31
31
 
32
32
  string ParamsToString() const override;
33
+
34
+ static unique_ptr<PhysicalOperator>
35
+ CreateJoinProjection(vector<LogicalType> proj_types, const vector<LogicalType> &lhs_types,
36
+ const vector<LogicalType> &rhs_types, const vector<idx_t> &left_projection_map,
37
+ const vector<idx_t> &right_projection_map, const idx_t estimated_cardinality);
33
38
  };
34
39
 
35
40
  } // namespace duckdb
@@ -57,9 +57,12 @@ private:
57
57
 
58
58
  HashTableList unpartitioned_hts;
59
59
  unordered_map<hash_t, HashTableList> radix_partitioned_hts;
60
+ idx_t tuple_size;
60
61
 
61
62
  private:
62
63
  idx_t ListAddChunk(HashTableList &list, DataChunk &groups, Vector &group_hashes, DataChunk &payload,
63
64
  const vector<idx_t> &filter);
65
+ //! Returns the HT entry size used for intermediate hash tables
66
+ HtEntryType GetHTEntrySize();
64
67
  };
65
68
  } // namespace duckdb
@@ -48,6 +48,7 @@ protected:
48
48
 
49
49
  unique_ptr<PhysicalOperator> CreatePlan(LogicalAggregate &op);
50
50
  unique_ptr<PhysicalOperator> CreatePlan(LogicalAnyJoin &op);
51
+ unique_ptr<PhysicalOperator> CreatePlan(LogicalAsOfJoin &op);
51
52
  unique_ptr<PhysicalOperator> CreatePlan(LogicalColumnDataGet &op);
52
53
  unique_ptr<PhysicalOperator> CreatePlan(LogicalComparisonJoin &op);
53
54
  unique_ptr<PhysicalOperator> CreatePlan(LogicalCreate &op);
@@ -88,9 +89,6 @@ protected:
88
89
  unique_ptr<PhysicalOperator> CreatePlan(LogicalRecursiveCTE &op);
89
90
  unique_ptr<PhysicalOperator> CreatePlan(LogicalCTERef &op);
90
91
 
91
- unique_ptr<PhysicalOperator> CreateDistinctOn(unique_ptr<PhysicalOperator> child,
92
- vector<unique_ptr<Expression>> distinct_targets);
93
-
94
92
  unique_ptr<PhysicalOperator> ExtractAggregateExpressions(unique_ptr<PhysicalOperator> child,
95
93
  vector<unique_ptr<Expression>> &expressions,
96
94
  vector<unique_ptr<Expression>> &groups);
@@ -15,6 +15,60 @@
15
15
 
16
16
  namespace duckdb {
17
17
 
18
+ class WindowAggregateState {
19
+ public:
20
+ WindowAggregateState(AggregateFunction &aggregate, FunctionData *bind_info, const LogicalType &result_type_p);
21
+ virtual ~WindowAggregateState();
22
+
23
+ virtual void Sink(DataChunk &payload_chunk, SelectionVector *filter_sel, idx_t filtered);
24
+ virtual void Finalize();
25
+ virtual void Compute(Vector &result, idx_t rid, idx_t start, idx_t end);
26
+
27
+ protected:
28
+ void AggregateInit();
29
+ void AggegateFinal(Vector &result, idx_t rid);
30
+
31
+ //! The aggregate that the window function is computed over
32
+ AggregateFunction aggregate;
33
+ //! The bind info of the aggregate
34
+ FunctionData *bind_info;
35
+ //! The result type of the window function
36
+ LogicalType result_type;
37
+
38
+ //! Data pointer that contains a single state, used for intermediate window segment aggregation
39
+ vector<data_t> state;
40
+ //! Reused result state container for the window functions
41
+ Vector statev;
42
+ //! A vector of pointers to "state", used for intermediate window segment aggregation
43
+ Vector statep;
44
+ //! Input data chunk, used for intermediate window segment aggregation
45
+ DataChunk inputs;
46
+ };
47
+
48
+ class WindowConstantAggregate : public WindowAggregateState {
49
+ public:
50
+ static bool IsConstantAggregate(const BoundWindowExpression &wexpr);
51
+
52
+ WindowConstantAggregate(AggregateFunction &aggregate, FunctionData *bind_info, const LogicalType &result_type_p,
53
+ const ValidityMask &partition_mask, const idx_t count);
54
+ ~WindowConstantAggregate() override {
55
+ }
56
+
57
+ void Sink(DataChunk &payload_chunk, SelectionVector *filter_sel, idx_t filtered) override;
58
+ void Finalize() override;
59
+ void Compute(Vector &result, idx_t rid, idx_t start, idx_t end) override;
60
+
61
+ private:
62
+ //! Partition starts
63
+ vector<idx_t> partition_offsets;
64
+ //! Aggregate results
65
+ unique_ptr<Vector> results;
66
+ //! The current result partition being built/read
67
+ idx_t partition;
68
+ //! The current input row being built/read
69
+ idx_t row;
70
+ };
71
+
18
72
  class WindowSegmentTree {
19
73
  public:
20
74
  using FrameBounds = std::pair<idx_t, idx_t>;
@@ -27,6 +27,11 @@ struct BitXorFun {
27
27
  static void RegisterFunction(BuiltinFunctions &set);
28
28
  };
29
29
 
30
+ struct BitStringAggFun {
31
+ static void GetBitStringAggregate(const LogicalType &type, AggregateFunctionSet &bitstring_agg);
32
+ static void RegisterFunction(BuiltinFunctions &set);
33
+ };
34
+
30
35
  struct CountStarFun {
31
36
  static AggregateFunction GetFunction();
32
37