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
@@ -17,8 +17,9 @@
17
17
 
18
18
  namespace duckdb {
19
19
 
20
- //! This allows us to use the & operator to check if the type is contained in the set
21
20
  enum class AggregateType : uint8_t { NON_DISTINCT = 1, DISTINCT = 2 };
21
+ //! Whether or not the input order influences the result of the aggregate
22
+ enum class AggregateOrderDependent : uint8_t { ORDER_DEPENDENT = 1, NOT_ORDER_DEPENDENT = 2 };
22
23
 
23
24
  class BoundAggregateExpression;
24
25
 
@@ -29,6 +30,17 @@ struct AggregateInputData {
29
30
  Allocator &allocator;
30
31
  };
31
32
 
33
+ struct AggregateStatisticsInput {
34
+ AggregateStatisticsInput(FunctionData *bind_data_p, vector<BaseStatistics> &child_stats_p,
35
+ NodeStatistics *node_stats_p)
36
+ : bind_data(bind_data_p), child_stats(child_stats_p), node_stats(node_stats_p) {
37
+ }
38
+
39
+ FunctionData *bind_data;
40
+ vector<BaseStatistics> &child_stats;
41
+ NodeStatistics *node_stats;
42
+ };
43
+
32
44
  //! The type used for sizing hashed aggregate function states
33
45
  typedef idx_t (*aggregate_size_t)();
34
46
  //! The type used for initializing hashed aggregate function states
@@ -43,9 +55,7 @@ typedef void (*aggregate_finalize_t)(Vector &state, AggregateInputData &aggr_inp
43
55
  idx_t offset);
44
56
  //! The type used for propagating statistics in aggregate functions (optional)
45
57
  typedef unique_ptr<BaseStatistics> (*aggregate_statistics_t)(ClientContext &context, BoundAggregateExpression &expr,
46
- FunctionData *bind_data,
47
- vector<unique_ptr<BaseStatistics>> &child_stats,
48
- NodeStatistics *node_stats);
58
+ AggregateStatisticsInput &input);
49
59
  //! Binds the scalar function and creates the function data
50
60
  typedef unique_ptr<FunctionData> (*bind_aggregate_function_t)(ClientContext &context, AggregateFunction &function,
51
61
  vector<unique_ptr<Expression>> &arguments);
@@ -83,7 +93,7 @@ public:
83
93
  LogicalType(LogicalTypeId::INVALID), null_handling),
84
94
  state_size(state_size), initialize(initialize), update(update), combine(combine), finalize(finalize),
85
95
  simple_update(simple_update), window(window), bind(bind), destructor(destructor), statistics(statistics),
86
- serialize(serialize), deserialize(deserialize) {
96
+ serialize(serialize), deserialize(deserialize), order_dependent(AggregateOrderDependent::ORDER_DEPENDENT) {
87
97
  }
88
98
 
89
99
  DUCKDB_API
@@ -98,7 +108,7 @@ public:
98
108
  LogicalType(LogicalTypeId::INVALID)),
99
109
  state_size(state_size), initialize(initialize), update(update), combine(combine), finalize(finalize),
100
110
  simple_update(simple_update), window(window), bind(bind), destructor(destructor), statistics(statistics),
101
- serialize(serialize), deserialize(deserialize) {
111
+ serialize(serialize), deserialize(deserialize), order_dependent(AggregateOrderDependent::ORDER_DEPENDENT) {
102
112
  }
103
113
 
104
114
  DUCKDB_API AggregateFunction(const vector<LogicalType> &arguments, const LogicalType &return_type,
@@ -151,6 +161,8 @@ public:
151
161
 
152
162
  aggregate_serialize_t serialize;
153
163
  aggregate_deserialize_t deserialize;
164
+ //! Whether or not the aggregate is order dependent
165
+ AggregateOrderDependent order_dependent;
154
166
 
155
167
  DUCKDB_API bool operator==(const AggregateFunction &rhs) const {
156
168
  return state_size == rhs.state_size && initialize == rhs.initialize && update == rhs.update &&
@@ -0,0 +1,84 @@
1
+ //===----------------------------------------------------------------------===//
2
+ // DuckDB
3
+ //
4
+ // duckdb/function/cast/bound_cast_data.hpp
5
+ //
6
+ //
7
+ //===----------------------------------------------------------------------===//
8
+
9
+ #pragma once
10
+
11
+ #include "duckdb/function/cast/default_casts.hpp"
12
+
13
+ namespace duckdb {
14
+
15
+ struct ListBoundCastData : public BoundCastData {
16
+ explicit ListBoundCastData(BoundCastInfo child_cast) : child_cast_info(std::move(child_cast)) {
17
+ }
18
+
19
+ BoundCastInfo child_cast_info;
20
+ static unique_ptr<BoundCastData> BindListToListCast(BindCastInput &input, const LogicalType &source,
21
+ const LogicalType &target);
22
+ static unique_ptr<FunctionLocalState> InitListLocalState(CastLocalStateParameters &parameters);
23
+
24
+ public:
25
+ unique_ptr<BoundCastData> Copy() const override {
26
+ return make_unique<ListBoundCastData>(child_cast_info.Copy());
27
+ }
28
+ };
29
+
30
+ struct ListCast {
31
+ static bool ListToListCast(Vector &source, Vector &result, idx_t count, CastParameters &parameters);
32
+ };
33
+
34
+ struct StructBoundCastData : public BoundCastData {
35
+ StructBoundCastData(vector<BoundCastInfo> child_casts, LogicalType target_p)
36
+ : child_cast_info(std::move(child_casts)), target(std::move(target_p)) {
37
+ }
38
+
39
+ vector<BoundCastInfo> child_cast_info;
40
+ LogicalType target;
41
+
42
+ static unique_ptr<BoundCastData> BindStructToStructCast(BindCastInput &input, const LogicalType &source,
43
+ const LogicalType &target);
44
+ static unique_ptr<FunctionLocalState> InitStructCastLocalState(CastLocalStateParameters &parameters);
45
+
46
+ public:
47
+ unique_ptr<BoundCastData> Copy() const override {
48
+ vector<BoundCastInfo> copy_info;
49
+ for (auto &info : child_cast_info) {
50
+ copy_info.push_back(info.Copy());
51
+ }
52
+ return make_unique<StructBoundCastData>(std::move(copy_info), target);
53
+ }
54
+ };
55
+
56
+ struct StructCastLocalState : public FunctionLocalState {
57
+ public:
58
+ vector<unique_ptr<FunctionLocalState>> local_states;
59
+ };
60
+
61
+ struct MapBoundCastData : public BoundCastData {
62
+ MapBoundCastData(BoundCastInfo key_cast, BoundCastInfo value_cast)
63
+ : key_cast(std::move(key_cast)), value_cast(std::move(value_cast)) {
64
+ }
65
+
66
+ BoundCastInfo key_cast;
67
+ BoundCastInfo value_cast;
68
+
69
+ static unique_ptr<BoundCastData> BindMapToMapCast(BindCastInput &input, const LogicalType &source,
70
+ const LogicalType &target);
71
+
72
+ public:
73
+ unique_ptr<BoundCastData> Copy() const override {
74
+ return make_unique<MapBoundCastData>(key_cast.Copy(), value_cast.Copy());
75
+ }
76
+ };
77
+
78
+ struct MapCastLocalState : public FunctionLocalState {
79
+ public:
80
+ unique_ptr<FunctionLocalState> key_state;
81
+ unique_ptr<FunctionLocalState> value_state;
82
+ };
83
+
84
+ } // namespace duckdb
@@ -19,12 +19,12 @@ typedef BoundCastInfo (*bind_cast_function_t)(BindCastInput &input, const Logica
19
19
  typedef int64_t (*implicit_cast_cost_t)(const LogicalType &from, const LogicalType &to);
20
20
 
21
21
  struct GetCastFunctionInput {
22
- GetCastFunctionInput(ClientContext *context = nullptr) : context(context) {
22
+ GetCastFunctionInput(optional_ptr<ClientContext> context = nullptr) : context(context) {
23
23
  }
24
24
  GetCastFunctionInput(ClientContext &context) : context(&context) {
25
25
  }
26
26
 
27
- ClientContext *context;
27
+ optional_ptr<ClientContext> context;
28
28
  };
29
29
 
30
30
  struct BindCastFunction {
@@ -10,6 +10,8 @@
10
10
 
11
11
  #include "duckdb/common/types.hpp"
12
12
  #include "duckdb/common/types/vector.hpp"
13
+ #include "duckdb/common/optional_ptr.hpp"
14
+ #include "duckdb/function/scalar_function.hpp"
13
15
 
14
16
  namespace duckdb {
15
17
 
@@ -31,25 +33,43 @@ struct BoundCastData {
31
33
  struct CastParameters {
32
34
  CastParameters() {
33
35
  }
34
- CastParameters(BoundCastData *cast_data, bool strict, string *error_message, FunctionLocalState *local_state)
36
+ CastParameters(BoundCastData *cast_data, bool strict, string *error_message,
37
+ optional_ptr<FunctionLocalState> local_state)
35
38
  : cast_data(cast_data), strict(strict), error_message(error_message), local_state(local_state) {
36
39
  }
37
- CastParameters(CastParameters &parent, BoundCastData *cast_data = nullptr)
38
- : cast_data(cast_data), strict(parent.strict), error_message(parent.error_message) {
40
+ CastParameters(CastParameters &parent, optional_ptr<BoundCastData> cast_data,
41
+ optional_ptr<FunctionLocalState> local_state)
42
+ : cast_data(cast_data), strict(parent.strict), error_message(parent.error_message), local_state(local_state) {
39
43
  }
40
44
 
41
45
  //! The bound cast data (if any)
42
- BoundCastData *cast_data = nullptr;
46
+ optional_ptr<BoundCastData> cast_data;
43
47
  //! whether or not to enable strict casting
44
48
  bool strict = false;
45
49
  // out: error message in case cast has failed
46
50
  string *error_message = nullptr;
47
51
  //! Local state
48
- FunctionLocalState *local_state = nullptr;
52
+ optional_ptr<FunctionLocalState> local_state;
53
+ };
54
+
55
+ struct CastLocalStateParameters {
56
+ CastLocalStateParameters(optional_ptr<ClientContext> context_p, optional_ptr<BoundCastData> cast_data_p)
57
+ : context(context_p), cast_data(cast_data_p) {
58
+ }
59
+ CastLocalStateParameters(ClientContext &context_p, optional_ptr<BoundCastData> cast_data_p)
60
+ : context(&context_p), cast_data(cast_data_p) {
61
+ }
62
+ CastLocalStateParameters(CastLocalStateParameters &parent, optional_ptr<BoundCastData> cast_data_p)
63
+ : context(parent.context), cast_data(cast_data_p) {
64
+ }
65
+
66
+ optional_ptr<ClientContext> context;
67
+ //! The bound cast data (if any)
68
+ optional_ptr<BoundCastData> cast_data;
49
69
  };
50
70
 
51
71
  typedef bool (*cast_function_t)(Vector &source, Vector &result, idx_t count, CastParameters &parameters);
52
- typedef unique_ptr<FunctionLocalState> (*init_cast_local_state_t)(ClientContext &context);
72
+ typedef unique_ptr<FunctionLocalState> (*init_cast_local_state_t)(CastLocalStateParameters &parameters);
53
73
 
54
74
  struct BoundCastInfo {
55
75
  DUCKDB_API
@@ -65,72 +85,16 @@ public:
65
85
  };
66
86
 
67
87
  struct BindCastInput {
68
- DUCKDB_API BindCastInput(CastFunctionSet &function_set, BindCastInfo *info, ClientContext *context);
88
+ DUCKDB_API BindCastInput(CastFunctionSet &function_set, BindCastInfo *info, optional_ptr<ClientContext> context);
69
89
 
70
90
  CastFunctionSet &function_set;
71
91
  BindCastInfo *info;
72
- ClientContext *context;
92
+ optional_ptr<ClientContext> context;
73
93
 
74
94
  public:
75
95
  DUCKDB_API BoundCastInfo GetCastFunction(const LogicalType &source, const LogicalType &target);
76
96
  };
77
97
 
78
- struct ListBoundCastData : public BoundCastData {
79
- explicit ListBoundCastData(BoundCastInfo child_cast) : child_cast_info(std::move(child_cast)) {
80
- }
81
-
82
- BoundCastInfo child_cast_info;
83
- static unique_ptr<BoundCastData> BindListToListCast(BindCastInput &input, const LogicalType &source,
84
- const LogicalType &target);
85
-
86
- public:
87
- unique_ptr<BoundCastData> Copy() const override {
88
- return make_unique<ListBoundCastData>(child_cast_info.Copy());
89
- }
90
- };
91
-
92
- struct ListCast {
93
- static bool ListToListCast(Vector &source, Vector &result, idx_t count, CastParameters &parameters);
94
- };
95
-
96
- struct StructBoundCastData : public BoundCastData {
97
- StructBoundCastData(vector<BoundCastInfo> child_casts, LogicalType target_p)
98
- : child_cast_info(std::move(child_casts)), target(std::move(target_p)) {
99
- }
100
-
101
- vector<BoundCastInfo> child_cast_info;
102
- LogicalType target;
103
-
104
- static unique_ptr<BoundCastData> BindStructToStructCast(BindCastInput &input, const LogicalType &source,
105
- const LogicalType &target);
106
-
107
- public:
108
- unique_ptr<BoundCastData> Copy() const override {
109
- vector<BoundCastInfo> copy_info;
110
- for (auto &info : child_cast_info) {
111
- copy_info.push_back(info.Copy());
112
- }
113
- return make_unique<StructBoundCastData>(std::move(copy_info), target);
114
- }
115
- };
116
-
117
- struct MapBoundCastData : public BoundCastData {
118
- MapBoundCastData(BoundCastInfo key_cast, BoundCastInfo value_cast)
119
- : key_cast(std::move(key_cast)), value_cast(std::move(value_cast)) {
120
- }
121
-
122
- BoundCastInfo key_cast;
123
- BoundCastInfo value_cast;
124
-
125
- static unique_ptr<BoundCastData> BindMapToMapCast(BindCastInput &input, const LogicalType &source,
126
- const LogicalType &target);
127
-
128
- public:
129
- unique_ptr<BoundCastData> Copy() const override {
130
- return make_unique<MapBoundCastData>(key_cast.Copy(), value_cast.Copy());
131
- }
132
- };
133
-
134
98
  struct DefaultCasts {
135
99
  DUCKDB_API static BoundCastInfo GetDefaultCastFunction(BindCastInput &input, const LogicalType &source,
136
100
  const LogicalType &target);
@@ -59,13 +59,10 @@ public:
59
59
  DUCKDB_API unique_ptr<BoundAggregateExpression>
60
60
  BindAggregateFunction(AggregateFunction bound_function, vector<unique_ptr<Expression>> children,
61
61
  unique_ptr<Expression> filter = nullptr,
62
- AggregateType aggr_type = AggregateType::NON_DISTINCT,
63
- unique_ptr<BoundOrderModifier> order_bys = nullptr);
62
+ AggregateType aggr_type = AggregateType::NON_DISTINCT);
64
63
 
65
- DUCKDB_API unique_ptr<FunctionData> BindSortedAggregate(AggregateFunction &bound_function,
66
- vector<unique_ptr<Expression>> &children,
67
- unique_ptr<FunctionData> bind_info,
68
- unique_ptr<BoundOrderModifier> order_bys);
64
+ DUCKDB_API static void BindSortedAggregate(ClientContext &context, BoundAggregateExpression &expr,
65
+ const vector<unique_ptr<Expression>> &groups);
69
66
 
70
67
  private:
71
68
  //! Cast a set of expressions to the arguments of this function
@@ -25,4 +25,8 @@ struct BitPositionFun {
25
25
  static void RegisterFunction(BuiltinFunctions &set);
26
26
  };
27
27
 
28
+ struct BitStringFun {
29
+ static void RegisterFunction(BuiltinFunctions &set);
30
+ };
31
+
28
32
  } // namespace duckdb
@@ -0,0 +1,138 @@
1
+ #pragma once
2
+
3
+ namespace duckdb {
4
+
5
+ template <class CHILD_TYPE, class RETURN_TYPE, class OP, class LIST_ACCESSOR>
6
+ static void TemplatedContainsOrPosition(DataChunk &args, Vector &result, bool is_nested = false) {
7
+ D_ASSERT(args.ColumnCount() == 2);
8
+ auto count = args.size();
9
+ Vector &list = LIST_ACCESSOR::GetList(args.data[0]);
10
+ Vector &value_vector = args.data[1];
11
+
12
+ // Create a result vector of type RETURN_TYPE
13
+ result.SetVectorType(VectorType::FLAT_VECTOR);
14
+ auto result_entries = FlatVector::GetData<RETURN_TYPE>(result);
15
+ auto &result_validity = FlatVector::Validity(result);
16
+
17
+ if (list.GetType().id() == LogicalTypeId::SQLNULL) {
18
+ result_validity.SetInvalid(0);
19
+ return;
20
+ }
21
+
22
+ auto list_size = LIST_ACCESSOR::GetListSize(list);
23
+ auto &child_vector = LIST_ACCESSOR::GetEntry(list);
24
+
25
+ UnifiedVectorFormat child_data;
26
+ child_vector.ToUnifiedFormat(list_size, child_data);
27
+
28
+ UnifiedVectorFormat list_data;
29
+ list.ToUnifiedFormat(count, list_data);
30
+ auto list_entries = (list_entry_t *)list_data.data;
31
+
32
+ UnifiedVectorFormat value_data;
33
+ value_vector.ToUnifiedFormat(count, value_data);
34
+
35
+ // not required for a comparison of nested types
36
+ auto child_value = (CHILD_TYPE *)child_data.data;
37
+ auto values = (CHILD_TYPE *)value_data.data;
38
+
39
+ for (idx_t i = 0; i < count; i++) {
40
+ auto list_index = list_data.sel->get_index(i);
41
+ auto value_index = value_data.sel->get_index(i);
42
+
43
+ if (!list_data.validity.RowIsValid(list_index) || !value_data.validity.RowIsValid(value_index)) {
44
+ result_validity.SetInvalid(i);
45
+ continue;
46
+ }
47
+
48
+ const auto &list_entry = list_entries[list_index];
49
+
50
+ result_entries[i] = OP::Initialize();
51
+ for (idx_t child_idx = 0; child_idx < list_entry.length; child_idx++) {
52
+
53
+ auto child_value_idx = child_data.sel->get_index(list_entry.offset + child_idx);
54
+ if (!child_data.validity.RowIsValid(child_value_idx)) {
55
+ continue;
56
+ }
57
+
58
+ if (!is_nested) {
59
+ if (Equals::Operation(child_value[child_value_idx], values[value_index])) {
60
+ result_entries[i] = OP::UpdateResultEntries(child_idx);
61
+ break; // Found value in list, no need to look further
62
+ }
63
+ } else {
64
+ // FIXME: using Value is less efficient than modifying the vector comparison code
65
+ // to more efficiently compare nested types
66
+
67
+ // Note: When using GetValue we don't first apply the selection vector
68
+ // because it is already done inside GetValue
69
+ auto lvalue = child_vector.GetValue(list_entry.offset + child_idx);
70
+ auto rvalue = value_vector.GetValue(i);
71
+ if (Value::NotDistinctFrom(lvalue, rvalue)) {
72
+ result_entries[i] = OP::UpdateResultEntries(child_idx);
73
+ break; // Found value in list, no need to look further
74
+ }
75
+ }
76
+ }
77
+ }
78
+
79
+ if (args.AllConstant()) {
80
+ result.SetVectorType(VectorType::CONSTANT_VECTOR);
81
+ }
82
+ }
83
+
84
+ template <class T, class OP, class LIST_ACCESSOR>
85
+ void ListContainsOrPosition(DataChunk &args, Vector &result) {
86
+ const auto physical_type = args.data[1].GetType().InternalType();
87
+ switch (physical_type) {
88
+ case PhysicalType::BOOL:
89
+ case PhysicalType::INT8:
90
+ TemplatedContainsOrPosition<int8_t, T, OP, LIST_ACCESSOR>(args, result);
91
+ break;
92
+ case PhysicalType::INT16:
93
+ TemplatedContainsOrPosition<int16_t, T, OP, LIST_ACCESSOR>(args, result);
94
+ break;
95
+ case PhysicalType::INT32:
96
+ TemplatedContainsOrPosition<int32_t, T, OP, LIST_ACCESSOR>(args, result);
97
+ break;
98
+ case PhysicalType::INT64:
99
+ TemplatedContainsOrPosition<int64_t, T, OP, LIST_ACCESSOR>(args, result);
100
+ break;
101
+ case PhysicalType::INT128:
102
+ TemplatedContainsOrPosition<hugeint_t, T, OP, LIST_ACCESSOR>(args, result);
103
+ break;
104
+ case PhysicalType::UINT8:
105
+ TemplatedContainsOrPosition<uint8_t, T, OP, LIST_ACCESSOR>(args, result);
106
+ break;
107
+ case PhysicalType::UINT16:
108
+ TemplatedContainsOrPosition<uint16_t, T, OP, LIST_ACCESSOR>(args, result);
109
+ break;
110
+ case PhysicalType::UINT32:
111
+ TemplatedContainsOrPosition<uint32_t, T, OP, LIST_ACCESSOR>(args, result);
112
+ break;
113
+ case PhysicalType::UINT64:
114
+ TemplatedContainsOrPosition<uint64_t, T, OP, LIST_ACCESSOR>(args, result);
115
+ break;
116
+ case PhysicalType::FLOAT:
117
+ TemplatedContainsOrPosition<float, T, OP, LIST_ACCESSOR>(args, result);
118
+ break;
119
+ case PhysicalType::DOUBLE:
120
+ TemplatedContainsOrPosition<double, T, OP, LIST_ACCESSOR>(args, result);
121
+ break;
122
+ case PhysicalType::VARCHAR:
123
+ TemplatedContainsOrPosition<string_t, T, OP, LIST_ACCESSOR>(args, result);
124
+ break;
125
+ case PhysicalType::INTERVAL:
126
+ TemplatedContainsOrPosition<interval_t, T, OP, LIST_ACCESSOR>(args, result);
127
+ break;
128
+ case PhysicalType::STRUCT:
129
+ case PhysicalType::LIST:
130
+ TemplatedContainsOrPosition<int8_t, T, OP, LIST_ACCESSOR>(args, result, true);
131
+ break;
132
+ default:
133
+ throw NotImplementedException("This function has not been implemented for physical type %s",
134
+ TypeIdToString(physical_type));
135
+ }
136
+ }
137
+
138
+ } // namespace duckdb
@@ -122,4 +122,12 @@ struct IsFiniteFun {
122
122
  static void RegisterFunction(BuiltinFunctions &set);
123
123
  };
124
124
 
125
+ struct GreatestCommonDivisorFun {
126
+ static void RegisterFunction(BuiltinFunctions &set);
127
+ };
128
+
129
+ struct LeastCommonMultipleFun {
130
+ static void RegisterFunction(BuiltinFunctions &set);
131
+ };
132
+
125
133
  } // namespace duckdb
@@ -14,12 +14,59 @@
14
14
  #include "duckdb/common/unordered_map.hpp"
15
15
  #include "duckdb/common/field_writer.hpp"
16
16
  #include "duckdb/function/built_in_functions.hpp"
17
+ #include "duckdb/function/scalar/list/contains_or_position.hpp"
17
18
 
18
19
  namespace duckdb {
19
20
 
20
21
  enum class MapInvalidReason : uint8_t { VALID, NULL_KEY_LIST, NULL_KEY, DUPLICATE_KEY };
21
22
  enum class UnionInvalidReason : uint8_t { VALID, TAG_OUT_OF_RANGE, NO_MEMBERS, VALIDITY_OVERLAP };
22
23
 
24
+ struct ListArgFunctor {
25
+ static Vector &GetList(Vector &list) {
26
+ return list;
27
+ }
28
+ static idx_t GetListSize(Vector &list) {
29
+ return ListVector::GetListSize(list);
30
+ }
31
+ static Vector &GetEntry(Vector &list) {
32
+ return ListVector::GetEntry(list);
33
+ }
34
+ };
35
+
36
+ struct MapKeyArgFunctor {
37
+ // MAP is a LIST(STRUCT(K,V))
38
+ // meaning the MAP itself is a List, but the child vector that we're interested in (the keys)
39
+ // are a level deeper than the initial child vector
40
+
41
+ static Vector &GetList(Vector &map) {
42
+ return map;
43
+ }
44
+ static idx_t GetListSize(Vector &map) {
45
+ return ListVector::GetListSize(map);
46
+ }
47
+ static Vector &GetEntry(Vector &map) {
48
+ return MapVector::GetKeys(map);
49
+ }
50
+ };
51
+
52
+ struct ContainsFunctor {
53
+ static inline bool Initialize() {
54
+ return false;
55
+ }
56
+ static inline bool UpdateResultEntries(idx_t child_idx) {
57
+ return true;
58
+ }
59
+ };
60
+
61
+ struct PositionFunctor {
62
+ static inline int32_t Initialize() {
63
+ return 0;
64
+ }
65
+ static inline int32_t UpdateResultEntries(idx_t child_idx) {
66
+ return child_idx + 1;
67
+ }
68
+ };
69
+
23
70
  struct VariableReturnBindData : public FunctionData {
24
71
  LogicalType stype;
25
72
 
@@ -80,6 +127,18 @@ struct MapFromEntriesFun {
80
127
  static void RegisterFunction(BuiltinFunctions &set);
81
128
  };
82
129
 
130
+ struct MapEntriesFun {
131
+ static void RegisterFunction(BuiltinFunctions &set);
132
+ };
133
+
134
+ struct MapValuesFun {
135
+ static void RegisterFunction(BuiltinFunctions &set);
136
+ };
137
+
138
+ struct MapKeysFun {
139
+ static void RegisterFunction(BuiltinFunctions &set);
140
+ };
141
+
83
142
  struct MapExtractFun {
84
143
  static void RegisterFunction(BuiltinFunctions &set);
85
144
  };
@@ -11,9 +11,36 @@
11
11
  #include "duckdb/function/function_set.hpp"
12
12
  #include "re2/re2.h"
13
13
  #include "duckdb/function/built_in_functions.hpp"
14
+ #include "re2/stringpiece.h"
14
15
 
15
16
  namespace duckdb {
16
17
 
18
+ namespace regexp_util {
19
+
20
+ bool TryParseConstantPattern(ClientContext &context, Expression &expr, string &constant_string);
21
+ void ParseRegexOptions(const string &options, duckdb_re2::RE2::Options &result, bool *global_replace = nullptr);
22
+ void ParseRegexOptions(ClientContext &context, Expression &expr, RE2::Options &target, bool *global_replace = nullptr);
23
+
24
+ inline duckdb_re2::StringPiece CreateStringPiece(const string_t &input) {
25
+ return duckdb_re2::StringPiece(input.GetDataUnsafe(), input.GetSize());
26
+ }
27
+
28
+ inline string_t Extract(const string_t &input, Vector &result, const RE2 &re, const duckdb_re2::StringPiece &rewrite) {
29
+ string extracted;
30
+ RE2::Extract(input.GetString(), re, rewrite, &extracted);
31
+ return StringVector::AddString(result, extracted.c_str(), extracted.size());
32
+ }
33
+
34
+ } // namespace regexp_util
35
+
36
+ struct RegexpExtractAll {
37
+ static void Execute(DataChunk &args, ExpressionState &state, Vector &result);
38
+ static unique_ptr<FunctionData> Bind(ClientContext &context, ScalarFunction &bound_function,
39
+ vector<unique_ptr<Expression>> &arguments);
40
+ static unique_ptr<FunctionLocalState> InitLocalState(ExpressionState &state, const BoundFunctionExpression &expr,
41
+ FunctionData *bind_data);
42
+ };
43
+
17
44
  struct RegexpBaseBindData : public FunctionData {
18
45
  RegexpBaseBindData();
19
46
  RegexpBaseBindData(duckdb_re2::RE2::Options options, string constant_string, bool constant_pattern = true);
@@ -61,14 +88,67 @@ struct RegexpExtractBindData : public RegexpBaseBindData {
61
88
  bool Equals(const FunctionData &other_p) const override;
62
89
  };
63
90
 
91
+ struct RegexStringPieceArgs {
92
+ RegexStringPieceArgs() : size(0), capacity(0), group_buffer(nullptr) {
93
+ }
94
+ void Init(idx_t size) {
95
+ this->size = size;
96
+ // Allocate for one extra, for the all-encompassing match group
97
+ this->capacity = size + 1;
98
+ group_buffer = AllocateArray<duckdb_re2::StringPiece>(capacity);
99
+ }
100
+ void SetSize(idx_t size) {
101
+ this->size = size;
102
+ if (size + 1 > capacity) {
103
+ Clear();
104
+ Init(size);
105
+ }
106
+ }
107
+
108
+ RegexStringPieceArgs &operator=(RegexStringPieceArgs &&other) {
109
+ std::swap(this->size, other.size);
110
+ std::swap(this->capacity, other.capacity);
111
+ std::swap(this->group_buffer, other.group_buffer);
112
+ return *this;
113
+ }
114
+
115
+ ~RegexStringPieceArgs() {
116
+ Clear();
117
+ }
118
+
119
+ private:
120
+ void Clear() {
121
+ DeleteArray<duckdb_re2::StringPiece>(group_buffer, capacity);
122
+ group_buffer = nullptr;
123
+
124
+ size = 0;
125
+ capacity = 0;
126
+ }
127
+
128
+ public:
129
+ idx_t size;
130
+ //! The currently allocated capacity for the groups
131
+ idx_t capacity;
132
+ //! Used by ExtractAll to pre-allocate the storage for the groups
133
+ duckdb_re2::StringPiece *group_buffer;
134
+ };
135
+
64
136
  struct RegexLocalState : public FunctionLocalState {
65
- explicit RegexLocalState(RegexpBaseBindData &info)
137
+ explicit RegexLocalState(RegexpBaseBindData &info, bool extract_all = false)
66
138
  : constant_pattern(duckdb_re2::StringPiece(info.constant_string.c_str(), info.constant_string.size()),
67
139
  info.options) {
140
+ if (extract_all) {
141
+ auto group_count_p = constant_pattern.NumberOfCapturingGroups();
142
+ if (group_count_p != -1) {
143
+ group_buffer.Init(group_count_p);
144
+ }
145
+ }
68
146
  D_ASSERT(info.constant_pattern);
69
147
  }
70
148
 
71
149
  RE2 constant_pattern;
150
+ //! Used by regexp_extract_all to pre-allocate the args
151
+ RegexStringPieceArgs group_buffer;
72
152
  };
73
153
 
74
154
  unique_ptr<FunctionLocalState> RegexInitLocalState(ExpressionState &state, const BoundFunctionExpression &expr,
@@ -213,4 +213,8 @@ struct JaroWinklerFun {
213
213
  static void RegisterFunction(BuiltinFunctions &set);
214
214
  };
215
215
 
216
+ struct HexFun {
217
+ static void RegisterFunction(BuiltinFunctions &set);
218
+ };
219
+
216
220
  } // namespace duckdb